让 G(V,E)
成为一个带有非负权重函数的加权有向图,
W:E -> {0,1,2 ... W}
,其中 W
为非负整数。如何修改 Dijkstra 算法以在 O(VW + E)
时间内计算给定源顶点 s 的最短路径。
让 G(V,E)
成为一个带有非负权重函数的加权有向图,
W:E -> {0,1,2 ... W}
,其中 W
为非负整数。如何修改 Dijkstra 算法以在 O(VW + E)
时间内计算给定源顶点 s 的最短路径。
0, 1, 2, 3, ..., W(V-1)
的桶,其中 W
是最大权重,V
是节点数量。 桶 k
包含所有标记为距离 k
的节点。每个桶可以由节点向量或列表表示。
2. 顺序检查桶 0, 1, 2, ..., WV
,直到找到第一个非空桶。该桶中的节点在前沿。
3. 对于该桶中的每个节点,将其标记为其真实距离,然后从桶中删除。
4. 现在重复步骤(2-4)(尽管在第2步开始扫描您刚刚清空的桶),直到所有桶都为空。WV
桶来处理退化情况,即当 W=1
但图形是一条直线时。在这种情况下,两个节点之间最远的距离是 W(V-1)
。