簡體   English   中英

有向無環圖的最短路徑

[英]Shortest paths for directed acyclic graphs

所以基本上,我有一個n×m的浮點值數組,並且我試圖找到第一行值中的第一個與第m行值中的任何一個之間的最短路徑。 圖中的節點(i, j)節點{(i, j+1), (i-1, j+1), i+1, j+1)}不在邊緣(0 < i < n-1)並且不在最底行(j < m-1) 我正在尋找一種算法來及時解決此特定問題。 我目前的思路是圍繞A *搜索,但請告訴我您的想法。

  • 項目清單

動態解為O(NM)或O(M ^ 2)。 而且它不可能在這之下-這是任何更好解決方案的反例。 假設您要在第一行的最左邊的元素和最后一行的最左邊的元素之間找到一條路徑。 讓我們看一下這種形式的矩陣:

10000000000000
11000000000000
11100000000000
11110000000000
11111000000000
11111100000000
11111110000000
11111111000000
11111110000000
11111100000000
11111000000000
11110000000000
11100000000000
11000000000000
10000000000000

“ 1s”是您在從源元素到目標元素的路徑中可能要經歷的元素。 “ 0”是您無法通過的元素。

“ 1s”的數目為NM / 4階,因此為O(NM)(實際上是Min(NM,M ^ 2),請參見下文)。 因此,讀取此矩陣中每個1的算法的復雜度> = O(NM)。

另一方面,不能讀取所有“ 1”的算法將是錯誤的。

證明 :讓矩陣中的數字為權重。 選擇算法不會讀取的“ 1”。 將其更改為0.5。 該算法對該輸入的操作失敗,因為最佳路徑現在經過了一個從未讀取的元素(因為第一次讀取的所有元素均未更改,因此,這次也將讀取相同的元素,除非它是不確定的,在這種情況下為隨機機會是否有效,這也使其不正確)。

但是,好的O(NM)解決方案對於1000x1000矩陣(不到一秒鍾)應該可以正常工作。 如果僅命中了必須命中的元素,則可以將其優化為Min(M ^ 2,MN)(例如,在我的示例矩陣中,如果寬度增加到10000000,則不必讀取添加的元素)。 同樣,如果高度增加到10000000,則由於沒有超出矩陣的邊界,因此沒有M ^ 2順序讀取。 但是,正如您所說的,這兩個維度都很大,我想這幾乎沒有幫助。

暫無
暫無

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

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