簡體   English   中英

設計一個在時間O(k(| V | + | E |))運行的單源最短路徑問題的算法

[英]Design an algorithm for the single source shortest path problem that runs in time O(k(|V|+|E|))

假設我們給出了有向圖G = (V, E)具有潛在的正和負邊長,但沒有負循環。 s ∈ V是給定的源頂點。 如果從s到任何其他頂點的最短路徑最多需要k edges如何設計一個在時間O(k(|V | + |E|))中運行的單源最短路徑問題的算法?

這里是O(k(| V | + | E |))方法:

  1. 我們可以使用Bellman-Ford算法進行一些修改
  2. 創建數組D []以存儲從節點s到某個節點u的最短路徑
  3. 最初D [s] = 0,所有其他D [i] = + oo(無窮大)
  4. 現在,在我們遍歷所有邊緣k次並放松它們之后,D [u]在<= k edge之后保持從節點s到u的最短路徑值
  5. 因為任何su最短路徑最多是k個邊緣,所以我們可以在邊緣上的k次迭代之后結束算法

    偽代碼:

    對於頂點中的每個頂點v:
    D [v]:= + oo

    D [s] = 0

    重復k次:
    對於邊緣重量為w的每條邊(u,v):
    如果D [u] + w <D [v]:
    D [v] = D [u] + w

暫無
暫無

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

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