Versiones soportadas: latest (3.8) 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0 main dev
Versiones no soportadas:2.6 2.5 2.4 2.3 2.2

Dijkstra - Familia de funciones

Propuesto

Advertencia

Funciones propuestas para el próximo lanzamineto.

  • No están oficialmente en la versión actual.

  • Es probable que oficialmente formen parte del próximo lanzamiento:

    • Las funciones hacen uso de ANY-INTEGER y ANY-NUMERICAL

    • Es posible que el nombre no cambie. (Pero todavía puede)

    • Es posible que la firma no cambie. (Pero todavía puede)

    • Es posible que la funcionalidad no cambie. (Pero todavía puede)

    • Se han hecho pruebas de pgTap. Pero tal vez necesite más.

    • Es posible que la documentación necesite un refinamiento.

Experimental

Advertencia

Funciones propuestas para el próximo lanzamineto.

  • No están oficialmente en la versión actual.

  • Es probable que oficialmente formen parte del próximo lanzamiento:

    • Las funciones hacen uso de ANY-INTEGER y ANY-NUMERICAL

    • Es posible que el nombre no cambie. (Pero todavía puede)

    • Es posible que la firma no cambie. (Pero todavía puede)

    • Es posible que la funcionalidad no cambie. (Pero todavía puede)

    • Se han hecho pruebas de pgTap. Pero tal vez necesite más.

    • Es posible que la documentación necesite un refinamiento.

La definición de problema (Documentación avanzada)

Dada la siguiente consulta:

pgr_dijkstra(sql,startvid,endvid,directed)

Donde sql={(idi,sourcei,targeti,costi,reverse_costi)}

y

  • source=sourcei,

  • target=targeti,

Los gráficos se definen como sigue:

Grafo dirigido

El gráfico dirigido ponderado, Gd(V,E), se define por:

  • Conjunto de vértices V

    • V=sourcetargetstartvidendvid

  • El conjunto de aristas E

    • E={ {(sourcei,targeti,costi) when cost>=0}if reverse_cost=    {(sourcei,targeti,costi) when cost>=0} {(targeti,sourcei,reverse_costi) when reverse_costi>=0}if reverse_cost

Grafo no dirigido

El grafo ponderado no dirigido Gu(V,E), es definido por:

  • Conjunto de vértices V

    • V=sourcetargetstartvvidendvid

  • El conjunto de aristas E

    • E={ {(sourcei,targeti,costi) when cost>=0} {(targeti,sourcei,costi) when cost>=0} if reverse_cost=    {(sourcei,targeti,costi) when cost>=0} {(targeti,sourcei,costi) when cost>=0} {(targeti,sourcei,reverse_costi) when reverse_costi>=0)} {(sourcei,targeti,reverse_costi) when reverse_costi>=0)} if reverse_cost

El problema

Dado:

  • startvidV a starting vertex

  • endvidV un vértice final

  • G(V,E)={Gd(V,E) if6 directed=trueGu(V,E) if5 directed=false

Entonces:

  • π={(path_seqi,nodei,edgei,costi,agg_costi)}

Donde:
  • path_seqi=i

  • path_seq|π|=|π|

  • nodeiV

  • node1=startvid

  • node|π|=endvid

  • i|π|,(nodei,nodei+1,costi)E

  • edgei={id(nodei,nodei+1,costi)when i|π|1when i=|π|

  • costi=cost(nodei,nodei+1)

  • agg_costi={0when i=1k=1icost(nodek1,nodek)when i1

En otras palabras: El algoritmo devuelve una ruta más corta entre startvid y endvid, si es que existe, en términos de una secuencia de nodos y de aristas,
  • path_seq indica la posición relativa en el camino de node o edge.

  • cost es el coste del borde que se utilizará para ir al siguiente nodo.

  • agg_cost es el costo desde el startvid hasta el nodo.

Si no hay ruta, el conjunto resultante estará vacío.

Ver también

Índices y tablas