Floyd演算法學習

2022-07-25 02:57:08 字數 545 閱讀 4810

今天做了個題,leetcode1462,對於同乙個圖多次查詢最短路徑,然後用dfs超時了,之後就不會了,看題解是用floyd。但是這個演算法看起來簡單,我想了很久,主要是這個dp的無後效性想了很久,現在差不多明白了,之前怕的後效性指的是,當第k個點作為中繼點將某兩個(設為ij)點鬆弛之後,ik和kj在之後的過程中如果被其他點(設為l)鬆弛,能否保證在這些鬆弛過程中ij之間一直是當前最優的,即點l來時的鬆弛效果能直接傳遞到點ij上,即是無後效性的關鍵。

還是接著之前的情況考慮。當點l來的時候,它必然出現在ik之間或kj之間,不妨讓他出現在ik之間吧。那麼在點l的鬆弛輪次中,對ik是正常的鬆弛結果,而l到j呢?仔細一想可以知道,l到j無非是選擇經過k與否的問題,而這個問題在點k的鬆弛輪次中已經解決。因此也就體現出了無後效性。

也就是說,每乙個新點在開始往路上插之前,都已經被已經進行過插點輪次的點檢驗過是否插了,所以當它往別人的路上插的時候,完全不用考慮能否更新當前路被它分割的其他部分是否最優。因為其他部分是以他為起點或終點而被已出現中繼點分割的路徑,在之前的中繼輪次中已經考慮,這裡相當於記憶化直接使用結果了。

dpyyds。

Floyd 演算法學習筆記

floyd演算法學習筆記 如有錯誤,歡迎各位dalao批評指出。前置芝士 1.鄰接矩陣 floyd要用鄰接矩陣存圖 2.動態規劃思想 最好學過,沒學過也沒有太大影響 我們可以發現,如dijkstra,spfa,bellman ford一類的最短路演算法都是解決單源點最短路問題,也就是確定了起點或者終...

演算法學習 Union Find演算法

union find演算法有它的實際用途。多用於動態連通的應用場景。union find演算法是 給出兩個節點,判斷它們是否連通,如果連通,是不需要給出具體的路徑的 舉兩個例子作為主要表現 1 在網路連線中,當發現沒有連線的兩個節點,可以把他們連線起來,一旦節點都連線起來,又能把多餘的線拆除,這時候...

演算法學習 KM演算法

km演算法 用於求二分圖的最佳完美匹配 即權值最大的完美匹配 如果你也是個剛來學習km演算法的人 大概的用途肯定還是知道的吧 還是直接說重點吧 首先 理解km演算法前 必須有以下3個概念 1.可行頂標 對於乙個賦值二分圖g x,y,e,w x,y 代表二分圖的兩邊頂點標號 e代表邊 w代表邊的權值 ...