簡體   English   中英

兩個節點之間的最短路徑與從一個節點到所有其他節點的最短路徑

[英]Shortest path between two nodes vs shortest path from one node to all other nodes

我目前正在研究具有非負邊權重的圖中的最短路徑問題。

我知道 Dijkstra 算法可以為我提供單源最短路徑問題的解決方案,即可以找到從一個節點到所有其他節點的最短路徑,但我還沒有找到可以解決先驗更簡單問題的算法:找到兩個節點之間的最短路徑。

直觀地說,我認為可以找到表明“更簡單”問題並不比單源最短路徑問題更簡單的示例,但我正在尋找在簡單(即具有幾個節點)圖。

一些(但不是全部)單源最短路徑算法可以很容易地修改為通過提前停止算法來返回兩個節點之間的最短路徑。 一個簡單的例子是未加權圖中的廣度優先搜索。 例如,要找到從節點 u 到節點 v 的最短路徑,請從 u 開始 BFS。 一旦找到 v,從 u 到 v 的路徑就是最短路徑。 Dijkstra 算法也可以做到這一點:如果您從節點 u 開始運行 Dijkstra 算法,您可以在將 v 從優先級隊列中取出后立即停止算法以獲得那里的最短路徑。

這些方法通常比運行整個算法完成更快。 但是,如果您對查找從一個節點到另一個節點的路徑特別感興趣,您可能需要查看 A* 搜索算法。 這是對 Dijkstra 算法的修改,專門針對從一個節點到另一個節點的問題進行了優化。 它使用啟發式方法來引導搜索到目標,降低搜索其他節點的優先級,因此通常比 Dijkstra 算法快得多。

請注意,並非所有最短路徑算法都可以通過這種方式提前切斷。 例如,當有負邊權重但沒有負循環時,Bellman-Ford 仍然可以計算最短路徑。 但是,它可能會在運行時不斷修改節點距離,直到算法的最后一輪。 盡早切斷搜索可能會返回錯誤的答案。

暫無
暫無

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

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