松弛操作
單源最短路徑算法中使用了松弛(relaxation)操作。對于每個頂點v∈V,都設置一個屬性d[v],用來描述從源點s到v的最短路徑上權(quán)值的上界,稱為最短路徑估計(shortest-path estimate)。π[v]代表S到v的當前最短路徑中v點之前的一個點的編號,我們用下面的Θ(V)時間的過程來對最短路徑估計和前趨進行初始化。
Code
經(jīng)過初始化以后,對所有v∈V,π[v]=NIL,對v∈V-{s},有d[s]=0以及d[v]=∞。
在松弛一條邊(u,v)的過程中,要測試是否可以通過u,對迄今找到的v的最短路徑進行改進;如果可以改進的話,則更新d[v]和π[v]。一次松 弛操作可以減小最短路徑估計的值d[v],并更新v的前趨域π[v](S到v的當前最短路徑中v點之前的一個點的編號)。下面的偽代碼對邊(u,v)進行 了一步松弛操作。
每個單源最短路徑算法中都會調(diào)用INITIALIZE-SINGLE-SOURCE,然后重復對邊進行松弛的過程。另外,松弛是改變最短路徑和前趨的唯一 方式。各個單源最短路徑算法間區(qū)別在于對每條邊進行松弛操作的次數(shù),以及對邊執(zhí)行松弛操作的次序有所不同。在Dijkstra算法以及關(guān)于有向無回路圖的 最短路徑算法中,對每條邊執(zhí)行一次松弛操作。在Bellman-Ford算法中,每條邊要執(zhí)行多次松弛操作。
浙公網(wǎng)安備 33010602011771號