《演算法導論》第24章 單源最短路徑

2021-06-22 02:43:04 字數 858 閱讀 4784

單元最短路徑問題

單源最短路徑問題,試**決從乙個原點到圖中其他所有點的最短路徑問題。此問題的變體有單終點最短路徑問題,單終點最短路徑問題和每對頂點間最短路徑問題。可以相應理解為一對多、多對

一、一對一和多對多的對映關係。

負權值邊和負權迴路

某些權值可以是負的,這些邊稱為是負權值邊。負權迴路指的是構成整個迴路各邊的權值和為負。

若不存在負權迴路,只有負權值邊,那麼最短路徑的定義依然正確;若存在負權迴路,那麼源點到回路上的任意一點都不存在最短路徑,即此時最短路徑無定義。

對於dijkstra演算法,要求所有的邊都是正值。對於bellman-ford演算法,則允許存在負權值邊,但是不能夠有負權迴路。不過,就算存在,b-f演算法也可以檢測出來。

最短路徑的表示

最短路徑可以用最短路徑樹來表示,它類似於廣度優先樹。對每個點都會設定乙個前驅(predecessor)。最短路徑樹並不是唯一的,對於乙個頂點,存在兩條權值相同的路徑時,會相應產生不同的最短路徑樹。

鬆弛技術

這個專業名詞乍看起來很難理解,其實很簡單。就是從源點到任意乙個頂點v的最短距離,即最短路徑的權值,初始化為正無窮大,然後通過一次次的迭代,慢慢逼近。bellman-ford演算法中,要對每條邊執行多次鬆弛操作。dijkstra演算法中,要對每條邊執行一次鬆弛操作。

偽**如下:

relax(u, v, w)

if d[v] > d[u] + w(u, v)

then d[u] = d[u] + w(u, v)

previous[v] = u

《演算法導論》第24章 單源最短路徑

最短路徑的最優子結構 最短路徑的子路徑也是最短路徑。負權重的邊 權重為負數的邊。我的理解 大概知道這個就可以了 環路 最短路徑既不能包含正的環路,也不能包含負的環路。正的環路,我覺得正常人想走最短的路,都不會在那裡打圈,除非路就是圓的 負環路你多繞幾圈,最後權重想變多小變多小,就很沒意思。最短路徑的...

演算法導論筆記 單源最短路徑

本文所貼示的偽 均 演算法導論 本文只是對其中 單源最短路徑 章節的簡單總結,許多數學證明過程已忽略。最短路徑的定義 給定乙個圖g v,e 希望找到從給定源節點s v 到每個結點v v 的最短路徑。單源最短路徑可以用來解決許多其他問題,包括 1 單目的地最短路徑問題 找到從每個結點v到給定目的結點t...

單源最短路徑演算法

簡單介紹 最短路徑演算法是圖演算法中的經典演算法,是用於解決圖中某個頂點到另外乙個頂點所經過路徑的花銷最小 這裡的花銷可能是時間也可能指費用等 dijkstra是用於解決單源最短路徑的經典演算法。圖的儲存方式 鄰接矩陣 在鄰接矩陣中,要獲取某個結點的出度和入讀,是通過掃瞄結點所在臨界矩陣中的行列完成...