簡體   English   中英

無向加權圖中2個頂點之間的最短路徑

[英]shortest path between 2 vertices in undirected weighted graph

我試圖在無向加權圖中找到兩個頂點之間的最短路徑。 還已知權重是小於log(log | V |)的整數,其中| V | 是頂點數量。 使用Bellman-Ford或Dijkstra算法很容易解決,但是有沒有算法可以更快地完成呢?

到目前為止,我一直在考慮使用BFS將權重大於1的邊分成權重為1的邊,但是| V |並不是一個好主意。 數量很多。 不,這不是我的作業,我只是想知道。

思考此問題的一種方法是,使用Dijkstra算法查找無向加權圖中兩個頂點之間的最短路徑,可以縮短運行時間。 因此,在這種情況下,您可以使用二進制堆作為數據結構。 堆是一個完整的二叉樹,具有heap屬性,在最小堆(最大堆)中,每個父節點都比樹中的子節點小(更大)。 在這里,您可以使用最小堆將成本從起始節點存儲到每個節點。

有關堆的更多信息可以在這里找到: https : //courses.csail.mit.edu/6.006/fall10/handouts/recitation10-8.pdf

對於堆,Dijkstra算法的運行時間可以從O(V ^ 2)減少到O(E log E),因為選擇距堆的最小距離為O(log V)(刪除最小距離為O( 1)固定堆需要O(log V)),更新頂點的距離總共需要O(E log V)(固定堆需要O(log V),檢查鄰居和更改成本需要E倍)。

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM