G(V,E)是加權,針對具有非負權重函數W圖表:電子 - > {0,1,2,3,4 ... W}其中W是任何非負整數。我想修改Dijkstra算法計算從給定的源點s爲O的最短路徑((V + E)登錄W)的時間。Dijkstra算法來計算從給定的源點s爲O的最短路徑((V + E)日誌W)時間
1
A
回答
0
讓我們標準的Dijkstra算法優先級隊列,並且改變它一點點:
我們必須從一個int(距離)的矢量的地圖,以保持與所有的頂點給定的距離。
我們會從第一向量流行元素,以獲得在每次迭代當前頂點和刪除鍵,如果矢量變空。
,當我們把它添加到隊列中,我們會推一個元素到相應的載體。
有在地圖上的任何一點至多W + 1
不同的密鑰。爲什麼?讓v
是當前頂點和d[v]
是它的距離。所有小於d[v]
的密鑰都被刪除。任何未發現的頂點不在地圖中。對於任何發現的頂點u
d[u] <= d[v] + max_edge_lenght = d[v] + W
。因此,地圖中的任何鍵必須位於[d[v], d[v] + W]
範圍內。
地圖的大小爲O(W)
,所以每個作品在O(log W)
時間(推送/彈出矢量元素爲O(1)
)。
當然,只有當W
相對較小時纔有用(否則,您可以使用標準的O((V + E) log V)
實現)。
相關問題
- 1. 使用Dijkstra算法的最短路徑
- 2. Dijkstra算法尋找最短路徑
- 3. Dijkstra的最短路徑算法修改
- 4. Dijkstra找到最短路徑的算法?
- 5. AFP Dijkstra的最短路徑算法
- 6. dijkstra的最短路徑算法回溯?
- 7. Dijkstra的算法最短路徑
- 8. Dijkstra的最短路徑算法問題
- 9. sna:修改Dijkstra算法(最短路徑)
- 10. Dijkstra算法計算N條最短路徑
- 11. 增量Dijkstra或最短路徑算法?
- 12. 修改Dijkstra算法得到最短路徑兩個節點
- 13. 的最短路徑指數來,我被要求找出一種圖形,其總的最短路徑(使用Dijkstra算法)數量的節點(Dijkstra算法)
- 14. 爲什麼拓撲排序找到最短路徑O(V + E)
- 15. 如何限制最短路徑 - dijkstra算法的最大代價?
- 16. Dijkstra的算法 - 只有負成本的DAG最短路徑
- 17. 有沒有算法來計算最短的樹(不是路徑)?
- 18. 尋找最短路徑數的算法
- 19. 使用紅/黑樹實現Dijkstra的最短路徑算法?
- 20. Dijkstra的最短路徑算法是行不通的
- 21. 確認爲O Dijkstras算法(V + E)
- 22. 最短路徑tsp算法
- 23. Dijkstra std :: priority_queue的最短路徑算法性能vs std :: set
- 24. 使用Dijkstra算法的2d數組中的最短路徑?
- 25. Dijkstra的最短路徑算法拉爾斯·沃格爾
- 26. 從完整圖計算最短路徑
- 27. 的Dijkstra最短路徑算法無限循環
- 28. 如何返回n最佳最短路徑(dijkstra算法)
- 29. Dijkstra的算法不會生成最短路徑?
- 30. 我們如何知道Dijkstra算法是最好的單源最短路徑算法?
使用'優先queue'用'民heap'這使得以最小的重量的邊緣。 –