让G (V, E)
成为具有非负权重函数的加权有向图
对于某些非负整数W : E -> {0, 1, 2... W }
,W
。如何修改Dijkstra的算法来计算O(V W + E)
时间内给定源顶点的最短路径。
答案 0 :(得分:2)
标准Dijkstra使用优先级队列并可以处理浮点值。这允许所有权重彼此不同并且意味着没有上限。
但是现在你有整数权重和上限:给定这些额外的约束,你应该能够构建一个更快的算法。实际上,您可以通过使用存储桶(每个权重一个)来存储节点。
完整:
0, 1, 2, 3, ..., W(V-1)
的存储桶,其中W
是最大权重,V
是节点数。存储区k
将包含标有距离k
的所有节点。每个存储桶都可以由向量或节点列表表示。0, 1, 2, ..., WV
,直到找到第一个非空存储桶。此存储桶中的节点位于边界。您需要WV
个桶来说明W=1
但图表是一行的退化情况。在这种情况下,最远的两个节点可以是W(V-1)
。
可以获得更完整的解释here。
答案 1 :(得分:1)