pgr_bdDijkstraCost¶
pgr_bdDijkstraCost
— Returns the shortest path(s)’s cost using Bidirectional Dijkstra algorithm.
Availability:
Version 3.2.0
New proposed function:
pgr_bdDijkstraCost(Combinations)
Version 3.0.0
Official function
Version 2.5.0
New proposed function
Description¶
The main characteristics are:
Process is done only on edges with positive costs.
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\)
Running time (worse case scenario): \(O((V \log V + E))\)
For large graphs where there is a path bewtween the starting vertex and ending vertex:
It is expected to terminate faster than pgr_dijkstra
Signatures¶
Summary
pgr_bdDijkstraCost(Edges SQL, from_vid, to_vid [, directed])
pgr_bdDijkstraCost(Edges SQL, from_vid, to_vids [, directed])
pgr_bdDijkstraCost(Edges SQL, from_vids, to_vid [, directed])
pgr_bdDijkstraCost(Edges SQL, from_vids, to_vids [, directed])
pgr_bdDijkstraCost(Edges SQL, Combinations SQL [, directed]) -- Proposed on v3.2
RETURNS SET OF (start_vid, end_vid, agg_cost)
OR EMPTY SET
Using default
pgr_bdDijkstraCost(Edges SQL, from_vid, to_vid)
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
- Example
From vertex \(2\) to vertex \(3\) on a directed graph
SELECT * FROM pgr_bdDijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
2, 3
);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 5
(1 row)
One to One¶
pgr_bdDijkstraCost(Edges SQL, from_vid, to_vid [, directed])
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
- Example
From vertex \(2\) to vertex \(3\) on an undirected graph
SELECT * FROM pgr_bdDijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
2, 3,
false
);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 1
(1 row)
One to Many¶
pgr_bdDijkstraCost(Edges SQL, from_vid, to_vids [, directed])
RETURNS SET OF (seq, path_seq, end_vid, node, edge, cost, agg_cost)
OR EMPTY SET
- Example
From vertex \(2\) to vertices \(\{3, 11\}\) on a directed graph
SELECT * FROM pgr_bdDijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
2, ARRAY[3, 11]);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 5
2 | 11 | 3
(2 rows)
Many to One¶
pgr_bdDijkstraCost(Edges SQL, from_vids, to_vids [, directed])
RETURNS SET OF (seq, path_seq, start_vid, node, edge, cost, agg_cost)
OR EMPTY SET
- Example
From vertices \(\{2, 7\}\) to vertex \(3\) on a directed graph
SELECT * FROM pgr_bdDijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
ARRAY[2, 7], 3);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 5
7 | 3 | 6
(2 rows)
Many to Many¶
pgr_bdDijkstraCost(Edges SQL, start_vids, end_vids [, directed])
RETURNS SET OF (seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)
OR EMPTY SET
- Example
From vertices \(\{2, 7\}\) to vertices \(\{3, 11\}\) on a directed graph
SELECT * FROM pgr_bdDijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
ARRAY[2, 7], ARRAY[3, 11]);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 5
2 | 11 | 3
7 | 3 | 6
7 | 11 | 4
(4 rows)
Combinations¶
pgr_bdDijkstra(Edges SQL, Combinations SQL [, directed])
RETURNS SET OF (seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)
OR EMPTY SET
- Example
Using a combinations table on a directed graph.
SELECT * FROM pgr_bdDijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
'SELECT * FROM ( VALUES (2, 3), (7, 11) ) AS t(source, target)');
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 5
7 | 11 | 4
(2 rows)
Parameters¶
Parameter |
Type |
Default |
Description |
---|---|---|---|
Edges SQL |
|
Edges query as described below |
|
Combinations SQL |
|
Combinations query as described below |
|
start_vid |
|
Identifier of the starting vertex of the path. |
|
start_vids |
|
Array of identifiers of starting vertices. |
|
end_vid |
|
Identifier of the ending vertex of the path. |
|
end_vids |
|
Array of identifiers of ending vertices. |
|
directed |
|
|
|
Inner queries¶
Edges query¶
Column |
Type |
Default |
Description |
---|---|---|---|
id |
|
Identifier of the edge. |
|
source |
|
Identifier of the first end point vertex of the edge. |
|
target |
|
Identifier of the second end point vertex of the edge. |
|
cost |
|
Weight of the edge (source, target)
|
|
reverse_cost |
|
-1 |
Weight of the edge (target, source),
|
Where:
- ANY-INTEGER
SMALLINT, INTEGER, BIGINT
- ANY-NUMERICAL
SMALLINT, INTEGER, BIGINT, REAL, FLOAT
Combinations query¶
Column |
Type |
Default |
Description |
---|---|---|---|
source |
|
Identifier of the first end point vertex of the edge. |
|
target |
|
Identifier of the second end point vertex of the edge. |
Where:
- ANY-INTEGER
SMALLINT, INTEGER, BIGINT
Result Columns¶
Returns SET OF (start_vid, end_vid, agg_cost)
Column |
Type |
Description |
---|---|---|
start_vid |
|
Identifier of the starting vertex. |
end_vid |
|
Identifier of the ending vertex. |
agg_cost |
|
Aggregate cost from |
See Also¶
The queries use the Sample Data network.
Indices and tables