pgr_dijkstraCost`¶
pgr_dijkstraCost
- Total cost of the shortest path using Dijkstra
algorithm.
可用性
版本 3.1.0
新 拟议 的签名:
pgr_dijkstraCost
(组合)
版本 2.2.0
官方 新函数
描述¶
The pgr_dijkstraCost
function sumarizes of the cost of the shortest path
using Dijkstra Algorithm.
Dijkstra算法,由荷兰计算机科学家Edsger Dijkstra于1956年提出。它是一种图搜索算法,解决具有非负边路径成本的图的最短路径问题,产生从起始顶点到结束顶点的最短路径。 该实现可以与有向图和无向图一起使用。
仅在具有正成本的边进行处理。
成本列上的负值被解释为边不存在。
当存在路径时返回值。
当没有路径时:
当起始顶点和结束顶点相同时。
未包含值 \((v, v)\) 的 aggregate cost 为 \(0\)
当起始顶点和结束顶点不同且不存在路径时:
未包含值 \((u, v)\) 的 aggregate cost 是 \(\infty\)
出于优化目的,起始顶点或结束顶点中的任何重复值都将被忽略。
运行时间: \(O(| start\ vids | * (V \log V + E))\)
它不返回路径。
返回所请求的每对节点组合的最短路径的成本总和。
假设返回的值存储在表中,因此唯一索引将是一对:
(start_vid, end_vid)
。根据函数及其参数,结果可能是对称的。
\((u, v)\) 的 总成本 与 \((v, u)\) 的相同。
起始或结束顶点标识符中的任何重复值都将被忽略。
返回值是有序的:
start_vid
升序end_vid
升序
签名¶
总结
directed
])directed
])directed
])directed
])(start_vid, end_vid, agg_cost)
的集合一对一¶
pgr_dijkstraCost(Edges SQL, start vid, end vid, [directed
])
(start_vid, end_vid, agg_cost)
的集合- 示例:
在 有向 图上从顶点 \(6\) 到顶点 \(10\)
SELECT * FROM pgr_dijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edges',
6, 10, true);
start_vid | end_vid | agg_cost
-----------+---------+----------
6 | 10 | 5
(1 row)
一对多¶
pgr_dijkstraCost(Edges SQL, start vid, end vids, [directed
])
(start_vid, end_vid, agg_cost)
的集合- 示例:
在 有向 图上从顶点 \(6\) 到顶点 \(\{10, 17\}\)
SELECT * FROM pgr_dijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edges',
6, ARRAY[10, 17]);
start_vid | end_vid | agg_cost
-----------+---------+----------
6 | 10 | 5
6 | 17 | 4
(2 rows)
多对一¶
pgr_dijkstraCost(Edges SQL, start vid, end vid, [directed
])
(start_vid, end_vid, agg_cost)
的集合- 示例:
在 有向 图上从顶点 \(\{6, 1\}\) 到顶点 \(17\)
SELECT * FROM pgr_dijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edges',
ARRAY[6, 1], 17);
start_vid | end_vid | agg_cost
-----------+---------+----------
1 | 17 | 5
6 | 17 | 4
(2 rows)
多对多¶
pgr_dijkstraCost(Edges SQL, start vids, end vids, [directed
])
(start_vid, end_vid, agg_cost)
的集合- 示例:
在 无向 图上从顶点 \(\{6, 1\}\) 到顶点 \(\{10, 17\}\)
SELECT * FROM pgr_dijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edges',
ARRAY[6, 1], ARRAY[10, 17],
directed => false);
start_vid | end_vid | agg_cost
-----------+---------+----------
1 | 10 | 4
1 | 17 | 5
6 | 10 | 1
6 | 17 | 4
(4 rows)
组合¶
pgr_dijkstraCost(Edges SQL, Combinations SQL, [directed
])
(start_vid, end_vid, agg_cost)
的集合- 示例:
在 无向 图上使用组合表
组合表:
SELECT source, target FROM combinations;
source | target
--------+--------
5 | 6
5 | 10
6 | 5
6 | 15
6 | 14
(5 rows)
查询:
SELECT * FROM pgr_dijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edges',
'SELECT source, target FROM combinations',
false);
start_vid | end_vid | agg_cost
-----------+---------+----------
5 | 6 | 1
5 | 10 | 2
6 | 5 | 1
6 | 15 | 2
(4 rows)
参数¶
列 |
类型 |
描述 |
---|---|---|
|
Edges SQL 如下所述 |
|
|
Combinations SQL 如下所述 |
|
start vid |
|
路径起始顶点的标识符。 |
start vids |
|
起始顶点的标识符数组。 |
end vid |
|
路径结束顶点的标识符。 |
end vids |
|
结束顶点的标识符数组。 |
可选参数¶
列 |
类型 |
默认 |
描述 |
---|---|---|---|
|
|
|
|
内部查询¶
Edges SQL¶
列 |
类型 |
默认 |
描述 |
---|---|---|---|
|
ANY-INTEGER |
边的标识符。 |
|
|
ANY-INTEGER |
边的第一个端点顶点的标识符。 |
|
|
ANY-INTEGER |
边的第二个端点顶点的标识符。 |
|
|
ANY-NUMERICAL |
边( |
|
|
ANY-NUMERICAL |
-1 |
边(
|
其中:
- ANY-INTEGER:
SMALLINT
,INTEGER
,BIGINT
- ANY-NUMERICAL:
SMALLINT
,INTEGER
,BIGINT
,REAL
,FLOAT
分量 SQL¶
参数 |
类型 |
描述 |
---|---|---|
|
ANY-INTEGER |
出发顶点的标识符。 |
|
ANY-INTEGER |
到达顶点的标识符。 |
其中:
- ANY-INTEGER:
SMALLINT
,INTEGER
,BIGINT
结果列¶
(start_vid, end_vid, agg_cost)
的集合
列 |
类型 |
描述 |
---|---|---|
|
|
起始顶点的标识符。 |
|
|
结束顶点的标识符。 |
|
|
从 |
其他示例¶
- 示例1:
演示中重复的值被忽略,且结果被排序。
SELECT * FROM pgr_dijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edges',
ARRAY[7, 10, 15, 10, 10, 15], ARRAY[10, 7, 10, 15]);
start_vid | end_vid | agg_cost
-----------+---------+----------
7 | 10 | 4
7 | 15 | 3
10 | 7 | 2
10 | 15 | 3
15 | 7 | 3
15 | 10 | 1
(6 rows)
- 示例2:
使 start_vids 与 end_vids 相同
SELECT * FROM pgr_dijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edges',
ARRAY[7, 10, 15], ARRAY[7, 10, 15]);
start_vid | end_vid | agg_cost
-----------+---------+----------
7 | 10 | 4
7 | 15 | 3
10 | 7 | 2
10 | 15 | 3
15 | 7 | 3
15 | 10 | 1
(6 rows)
- 示例3:
手动指定的顶点组合。
SELECT * FROM pgr_dijkstraCost(
'SELECT id, source, target, cost, reverse_cost FROM edges',
'SELECT * FROM (VALUES (6, 10), (6, 7), (12, 10)) AS combinations (source, target)');
start_vid | end_vid | agg_cost
-----------+---------+----------
6 | 7 | 1
6 | 10 | 5
12 | 10 | 4
(3 rows)
另请参阅¶
索引和表格