pgr_johnson

pgr_johnson - 使用 Jhonson 算法返回图中每对节点的最短路径成本之和。.

_images/boost-inside.jpeg

Boost 图内部

可用性

  • 版本 2.2.0

    • 签名变更

    • 不再支持旧签名

  • 版本2.0.0

    • 官方 函数

描述

Johnson算法是计算图中每一对节点的最短路径成本之和的好选择,特别适用于 稀疏图。它使用了Boost的实现,其运行时间为 \(O(V E \log V)\)

主要特点是:

  • 它不返回路径。

  • 返回图中每对节点的最短路径成本之和。

  • 仅在具有正成本的边进行处理。

  • Boost 返回一个 \(V \times V\) 矩阵,其中无穷大值。 表示没有路径的顶点之间的距离。

    • 我们仅以一组 (start_vid, end_vid, agg_cost) 的形式返回非无穷大值。

  • 假设返回的值存储在表中,因此唯一索引将是一对:(start_vid, end_vid)

  • 对于无向图,结果是对称的。

    • (u, v)agg_cost(v, u) 相同。

  • start_vid = end_vid 时,agg_cost = 0。

  • 建议使用不超过 3500 条边的边界框。

签名

总结

pgr johnson(Edges SQL, [directed])

返回 (start_vid, end_vid, agg_cost) 的集合
OR EMPTY SET
示例:

对于有边 \(\{1, 2, 3, 4\}\) 的有向子图。

SELECT * FROM pgr_johnson(
  'SELECT source, target, cost FROM edges
  WHERE id < 5'
) ORDER BY start_vid, end_vid;
 start_vid | end_vid | agg_cost
-----------+---------+----------
         5 |       6 |        1
         5 |       7 |        2
         6 |       7 |        1
(3 rows)

参数

参数

类型

默认

描述

Edges SQL

TEXT

Edges SQL 如下所述。

可选参数

类型

默认

描述

directed

BOOLEAN

true

  • true 时,该图被视为有 有向

  • 如果为 false ,则该图被视为 无向

内部查询

Edges SQL

类型

默认

描述

source

ANY-INTEGER

边的第一个端点顶点的标识符。

target

ANY-INTEGER

边的第二个端点顶点的标识符。

cost

ANY-NUMERICAL

边(source, target)的权重

reverse_cost

ANY-NUMERICAL

-1

边(target, source)的权重

  • 当为负时:边( target, source )不存在,因此它不是图的一部分。

其中:

ANY-INTEGER:

SMALLINT, INTEGER, BIGINT

ANY-NUMERICAL:

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

结果列

(start_vid, end_vid, agg_cost) 的集合

类型

描述

start_vid

BIGINT

起始顶点的标识符。

end_vid

BIGINT

结束顶点的标识符。

agg_cost

FLOAT

start_vidend_vid 的总成本。

另请参阅

索引和表格