Dijkstra爲啥不能處理有負權的圖

 爲啥不能處理負權?
  首先我們要清楚一個點:Dijkstra是每次貪心的選擇跟當前鄰接的點,而不會去考慮處鄰接之外的其他點

而如果所有Dijkstra算法適用於不存在負權邊的圖(有無向均可),這個是因爲迪傑斯特拉算法是基於貪心策略,每次都找一個距源點最近的點,然後將該距離定爲這個點到源點的最短路徑;但如果存在負權邊,那麼直接得到的最短路不一定是最短路徑,因爲可能先通過並不是距源點最近的一個次優點,再通過一個負權邊,使得路徑之和更小,這樣就出現了錯誤。如下:

1——>2權值爲5,1——>3權值爲6,3——>2權值爲-2,求1到2的最短路徑時,Dijkstra就會選擇權爲5的1——>2,但實際上1——>3——>2纔是最優的結果。

另外如果包含負環,則意味着最短路徑不存在。因爲只要在負權迴路上不斷兜圈子,所得的最短路長度可以任意小。負數的絕對值越大,該值就越小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章