簡體   English   中英

如何在線性時間內邊緣權重為0或1的有向圖中找到最短路徑?

[英]How to find shortest path in a directed graph that has edge weights either 0 or 1 in linear time?

我正在尋找一種方法來增加用於在未加權有向圖中找到單源最短路徑的BFS方法,並在O(N + M)時間內解決上述問題。 其中N是頂點數,M是邊數

我想到了以下幾點:

  1. 收縮圖表的頂點,它們之間的邊權重為0。 但這絕對是錯誤的,因為我將更改圖形的屬性並向最初沒有的頂點添加新邊。

  2. 將邊權重更改為1和2.然后在長度為2的路徑中創建虛擬頂點,將這些邊轉換為權重1的邊。但這會給出錯誤的答案。

更一般地說,當邊緣權重在線性時間內在0和MAX之間時,如何在有向圖中找到單源最短路徑。 (MAX是最大邊緣重量)

您可以使用bfs進行一些修改:維護deque而不是隊列,如果使用0邊,則在頂層的前面添加頂點,否則添加到deque的背面。(我的意思是0-1情況)

我認為你可以通過頂點收縮來解決這個問題。 這里只是一個提示:

首先形成由0權重邊連接的頂點的連通分量,並在每個分量中選擇一個代表性成員。 這將為您提供合同圖。

然后解決未加權的問題。

真實路徑將由連接代表性成員的“邊緣”(權重1)和連接組件內的頂點的“邊緣內”形成,從輸入的邊緣到輸出的邊緣。 換句話說,您需要能夠找到從任何代表到任何其他代表的路徑。

對不起,但在這種復雜性中,這是不可能的。

您可以查看此表格,了解最短路徑算法的復雜性

當您解釋問題時,您希望保持0和1的權重。如果您能夠承受去除0權重邊緣,則會退化為具有未加權邊緣的最短路徑,這應該是您所需要的復雜度。(廣度優先搜索將是關鍵字然后)

暫無
暫無

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

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