演算法筆記最短路徑
在計算最短路徑的算法中,最常見的算法包括Dijkstra算法和廣度優先搜尋(BFS)。以下是對這兩種算法的簡要概述:
- Dijkstra算法:
- Dijkstra算法是一種適用於帶權重的有向圖或無向圖的最短路徑查找算法。
- 算法使用優先佇列數據結構,以每個頂點到起始點的最短路徑長度為基準,優先處理距離起始點最近的頂點。
- 對於每個頂點,都會找到從該頂點到所有其他頂點的最短路徑。
- Dijkstra算法適合處理單個起始點的最短路徑問題。
步驟:
- 初始化一個距離數組,用於存儲從起始點到圖中所有頂點的最短距離。這個數組一般需要設定一個無窮大的值表示該頂點到起點還沒有路徑。
- 從所有的頂點中找出到起始點的最遠的一個點。這就是未來可能需要重新遍歷圖的地方,記錄下這個點的ID,也把它暫時刪除,因為它在這裡並沒有使用到。
- 在這個點的周圍區域進行疊代。這個區域內還有所有在這個頂點直接或者間接可達的其他頂點,對他們來說可能有新的更短的到達起始點的路徑被找到了。那麼開始在這些可達的頂點中找到那些新的、距離小於當前值的就更新起來,形成新的距離表。
- 在這一步的過程中可能產生死循環或者數據重複處理問題,需要對優先佇列和數組更新部分進行檢查和處理。
- 廣度優先搜尋(BFS):
- BFS算法通過模擬樹的層次遍歷方式來進行圖的搜尋。
- BFS算法通常使用佇列數據結構來存儲待處理的節點。
- BFS算法通常適用於查找從起始點到其他所有節點的最短路徑,以及查找任意兩點之間的最短路徑。
以上是兩種常見的最短路徑查找算法的基本概念和步驟,實際套用中需要根據具體的數據結構和問題特點選擇合適的算法。
對於複雜的問題,可能需要結合使用多種算法或者使用圖論庫來進行求解。建議查閱相關資料或書籍來深入學習和理解這些算法的具體實現和套用。