.. index:: single: Shortest Path Category ; pgr_dagShortestPath - Experimental single: Directed Acyclic Graph Category ; pgr_dagShortestPath - Experimental single: dagShortestPath - Experimental on v3.0
pgr_dagShortestPath — Returns the shortest path for weighted directed
acyclic graphs(DAG).
In particular, the DAG shortest paths algorithm implemented by Boost.Graph.
Availability
Version 4.0.0
- Output columns standardized to |short-generic-result|
Version 3.2.0
- New experimental function.
- pgr_dagShortestPath(Combinations)
Version 3.0.0
- New experimental function.
Shortest Path for Directed Acyclic Graph(DAG) is a graph search algorithm that
solves the shortest path problem for weighted directed acyclic graph, producing
a shortest path from a starting vertex (start_vid) to an ending vertex
(end_vid).
This implementation can only be used with a directed graph with no cycles i.e. directed acyclic graph.
The algorithm relies on topological sorting the dag to impose a linear ordering on the vertices, and thus is more efficient for DAG's than either the Dijkstra or Bellman-Ford algorithm.
- The main characteristics are:
- Process is valid for weighted directed acyclic graphs only. otherwise it will throw warnings.
- Values are returned when there is a path.
- When the starting vertex and ending vertex are the same, there is no path.
- The agg_cost the non included values (v, v) is 0
- When the starting vertex and ending vertex are the different and there is
no path:
- The agg_cost the non included values (u, v) is \infty
- When the starting vertex and ending vertex are the same, there is no path.
- For optimization purposes, any duplicated value in the start_vids or end_vids are ignored.
- The returned values are ordered:
- start_vid ascending
- end_vid ascending
- Running time: O(| start\_vids | * (V + E))
|Boost| Boost Graph Inside
Summary
.. index::
single: dagShortestPath - Experimental on v3.0 ; One to One - Experimental on v3.0
| Example: | From vertex 5 to vertex 11 on a directed graph |
|---|
.. literalinclude:: dagShortestPath.queries :start-after: -- q2 :end-before: -- q3
.. index::
single: dagShortestPath - Experimental ; One to Many - Experimental on v3.0
| Example: | From vertex 5 to vertices \{7, 11\} |
|---|
.. literalinclude:: dagShortestPath.queries :start-after: -- q3 :end-before: -- q4
.. index::
single: dagShortestPath - Experimental on v3.0 ; Many to One - Experimental on v3.0
| Example: | From vertices \{5, 10\} to vertex 11 |
|---|
.. literalinclude:: dagShortestPath.queries :start-after: -- q4 :end-before: -- q5
.. index::
single: dagShortestPath - Experimental on v3.0 ; Many to Many - Experimental on v3.0
| Example: | From vertices \{5, 15\} to vertices \{11, 17\} on an undirected graph |
|---|
.. literalinclude:: dagShortestPath.queries :start-after: -- q5 :end-before: -- q51
.. index::
single: dagShortestPath - Experimental on v3.0 ; Combinations - Experimental on v3.2
| Example: | Using a combinations table on an undirected graph |
|---|
The combinations table:
.. literalinclude:: dijkstraCost.queries
:start-after: -- q51
:end-before: -- q52
The query:
.. literalinclude:: dagShortestPath.queries
:start-after: -- q52
:end-before: -- q6
| Example 1: | Demonstration of repeated values are ignored, and result is sorted. |
|---|
.. literalinclude:: dagShortestPath.queries
:start-after: -- q6
:end-before: -- q7
| Example 2: | Making start_vids the same as end_vids |
|---|
.. literalinclude:: dagShortestPath.queries
:start-after: -- q7
:end-before: -- q8
| Example 3: | Manually assigned vertex combinations. |
|---|
.. literalinclude:: dagShortestPath.queries
:start-after: -- q8
:end-before: -- q9
Indices and tables