Dijkstra在边缘权重有限的图形上的算法

时间:2013-04-29 06:01:37

标签: algorithm dijkstra

假设我们想在一个边缘权重为整数的图形上运行Dijkstra算法 范围{1,2,...,W},其中W是一个相对较小的数字。如何找到s中从顶点tO((|V|+|E|)logW)的最短路径?

我从S. Dasgupta,C。Papadimitriou和U. Vazirani的书Algorithms中遇到了这个问题。我可以证明,如果我们像以前一样实现Dijkstra算法,那么在每次迭代时,优先级队列中节点的距离范围将在W之内。但是,由于优先级队列没有将具有相同权重的元素放入同一个存储桶的属性,因此这种观察并不能直接解决问题。

有人能给我一些提示,告诉我如何更进一步让有界范围W为我工作吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的优先级队列中可以包含多少个不同的数字?

<强>解决方案 请注意,在提取大小为X的节点后(现在放松..) 它可以达到的最大尺寸是X + W. 所有其他数字都大于X(因为你从队列中取得了分数) 所以你在队列中只有O(W)个不同的数字,所以你可以把它当作二进制堆使用,然后每一步都需要O(logW),所有这些都将是: (V + E)logW