2
假設我們想在邊緣權重爲 範圍內的整數的圖上運行Dijkstra算法,其中W是一個相對較小的數。如何在O((|V|+|E|)logW)
中找到從頂點s
到t
的最短路徑?Dijkstra在邊緣權值有限的圖上的算法
我從S. Dasgupta,C. Papadimitriou和U. Vazirani的算法中遇到了這個問題。我可以證明,如果我們像以前一樣實現Dijkstra算法,那麼在每次迭代時,優先級隊列中節點的距離範圍將在W
之內。但是,由於優先級隊列沒有將具有相同權重的元素放入同一個桶中的屬性,因此此觀察不會直接導致解決問題。
任何人都可以給我一些提示,如何進一步使有界範圍W
爲我工作?
謝謝!
嗯,可能通過計數/基數排序,優先級隊列的排序可能會更快。現在更新(刪除+插入)元素現在可以更快,因爲隊列可以是數組數組(或數組的排序映射) – Karussell 2013-04-30 09:22:40
在講座[Courses.MIT]中給出解決方案(_Bounded Integer Edge Weights_問題) (http://courses.csail.mit.edu/6.006/spring11/rec/rec16.pdf)。此外,它的時間複雜度是線性的$ O(| V | + | E |)$。 – hengxin 2013-11-25 06:58:33