簡體   English   中英

帶負權邊的有向樹上的 Dijkstra 最短路徑算法

[英]Dijkstra's shortest path algorithm on directed tree with negative weight edges

Dijkstra 的最短路徑算法會在具有負權邊的有向樹上返回正確的結果嗎?

在具有負權重的一般圖上,算法會失敗,但由於它是有向樹,所以感覺算法會成功。

從其他答案中,您知道如果您知道圖形是一棵樹,則沒有充分的理由運行 Dijkstra 算法。

但是,如果您確實運行它,即使樹的邊緣權重為負,它也會起作用。

Dijkstra 算法不適用於具有負權重的圖的原因是,負權重允許在已經確定其距離之后找到到頂點的第二條更短的路徑。 在樹中沒有第二條路徑。

在樹中,任何兩個給定節點之間只有一條路徑,因此在樹中搜索“最短”路徑沒有什么意義:當你找到一條路徑時,它是最短的,並且這種搜索不需要考慮權重,所以不需要使用 Dijkstra 算法。 一個簡單的深度優先搜索就可以了。

如果圖不是樹,而是帶負邊的有向無環圖(DAG),那么 Dijkstra 算法就不能用於尋找最短路徑。 以這個反例為例:

在此處輸入圖像描述

如果我們必須尋找從 A 到 C 的最短路徑,Dijkstra 的算法將繼續訪問 B 和 C,當它到達目標時,它將停止進一步尋找,從不考慮從 B 到 C 的邊。

其他應用 Dijkstra 的嘗試

另一個(現已刪除)的答案建議通過向所有權重添加絕對值來使所有邊權重為正,但這不會產生正確的結果:原始圖中的最短路徑是什么,不能保證仍然是最短路徑派生圖。

反例:

在此處輸入圖像描述

在原始圖中,從 A 到 C 的最短路徑經過 B,在調整后的圖中,最短路徑是 AC。

暫無
暫無

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

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