Obtener la distancia de Fréchet discreta entre dos valores temporales
frechetDistance({tnumber, tgeo}, {tnumber, tgeo}): float
Esta función tiene una complejidad de espacio lineal ya que solo dos filas de la matriz de distancia son asignadas en la memoria. Sin embargo, su complejidad de tiempo es cuadrática en el número de instantes de los valores temporales. Por lo tanto, la función requerirá un tiempo considerable para valores temporales con gran número de instantes.
SELECT frechetDistance(tfloat '[1@2012-01-01, 3@2012-01-03, 1@2012-01-06]', tfloat '[1@2012-01-01, 1.5@2012-01-02, 2.5@2012-01-03, 1.5@2012-01-04, 1.5@2012-01-05]'); -- 0.5 SELECT round(frechetDistance(tgeompoint '[Point(1 1)@2012-01-01, Point(3 3)@2012-01-03, Point(1 1)@2012-01-05]', tgeompoint '[Point(1.1 1.1)@2012-01-01, Point(2.5 2.5)@2012-01-02, Point(4 4)@2012-01-03, Point(3 3)@2012-01-04, Point(1.5 2)@2012-01-05]')::numeric, 6); -- 1.414214
Obtener las parejas de correspondencia entre dos valores temporales con respecto a la distancia de Fréchet discreta
frechetDistancePath({tnumber, tgeo}, {tnumber, tgeo}): pairs
Esta función requiere ubicar en memoria una matriz de distancias cuyo tamaño es cuadrático en el número de instantes de los valores temporales. Por tanto, la función fallará para valores temporales con gran número de instantes dependiendo de la memoria disponible.
SELECT frechetDistancePath(tfloat '[1@2012-01-01, 3@2012-01-03, 1@2012-01-06]', tfloat '[1@2012-01-01, 1.5@2012-01-02, 2.5@2012-01-03, 1.5@2012-01-04, 1.5@2012-01-05]'); -- (0,0) (1,0) (2,1) (3,2) (4,2) SELECT frechetDistancePath(tgeompoint '[Point(1 1)@2012-01-01, Point(3 3)@2012-01-03, Point(1 1)@2012-01-05]', tgeompoint '[Point(1.1 1.1)@2012-01-01, Point(2.5 2.5)@2012-01-02, Point(4 4)@2012-01-03, Point(3 3)@2012-01-04, Point(1.5 2)@2012-01-05]'); -- (0,0) (1,1) (2,1) (3,1) (4,2)
Obtener la distancia de distorsión de tiempo dinámica (Dynamic Time Warp o DTW) entre dos valores temporales
dynamicTimeWarp({tnumber, tgeo}, {tnumber, tgeo}): float
Esta función tiene una complejidad de espacio lineal ya que solo dos filas de la matriz de distancia son asignadas en la memoria. Sin embargo, su complejidad de tiempo es cuadrática en el número de instantes de los valores temporales. Por lo tanto, la función requerirá un tiempo considerable para valores temporales con gran número de instantes.
SELECT dynamicTimeWarp(tfloat '[1@2012-01-01, 3@2012-01-03, 1@2012-01-06]', tfloat '[1@2012-01-01, 1.5@2012-01-02, 2.5@2012-01-03, 1.5@2012-01-04, 1.5@2012-01-05]'); -- 2 SELECT round(dynamicTimeWarp(tgeompoint '[Point(1 1)@2012-01-01, Point(3 3)@2012-01-03, Point(1 1)@2012-01-05]', tgeompoint '[Point(1.1 1.1)@2012-01-01, Point(2.5 2.5)@2012-01-02, Point(4 4)@2012-01-03, Point(3 3)@2012-01-04, Point(1.5 2)@2012-01-05]')::numeric, 6); -- 3.380776
btener las parejas de correspondencia entre dos valores temporales con respecto a la distancia de distorsión de tiempo dinámica (Dynamic Time Warp o DTW)
dynamicTimeWarpPath({tnumber, tgeo}, {tnumber, tgeo}): pairs
frechetDistancePath({tnumber, tgeo}, {tnumber, tgeo}): pairs
Esta función requiere ubicar en memoria una matriz de distancias cuyo tamaño es cuadrático en el número de instantes de los valores temporales. Por tanto, la función fallará para valores temporales con gran número de instantes dependiendo de la memoria disponible.
SELECT dynamicTimeWarpPath(tfloat '[1@2012-01-01, 3@2012-01-03, 1@2012-01-06]', tfloat '[1@2012-01-01, 1.5@2012-01-02, 2.5@2012-01-03, 1.5@2012-01-04, 1.5@2012-01-05]'); -- (0,0) (1,0) (2,1) (3,2) (4,2) SELECT dynamicTimeWarpPath(tgeompoint '[Point(1 1)@2012-01-01, Point(3 3)@2012-01-03, Point(1 1)@2012-01-05]', tgeompoint '[Point(1.1 1.1)@2012-01-01, Point(2.5 2.5)@2012-01-02, Point(4 4)@2012-01-03, Point(3 3)@2012-01-04, Point(1.5 2)@2012-01-05]'); -- (0,0) (1,1) (2,1) (3,1) (4,2)