單源最短路徑:最短路徑性質的證明

Ho_mu_ra發表於2020-10-09

本節就之前給出的一部分性質進行嚴密的證明,而非通過“顯然”等模糊的語句。

1、三角不等式性質

引理10:設G = ( V,E)為一個帶權重的有向圖,其權重函式 w :E→R,其源節點為s。那麼對於所有邊(u, v)∈E,我們有:

δ(s, v) ≤ δ(s, u) + w(u, v)

證明:假定 p 是從 s 到結點 v 的一條最短路徑,則 p 的權重不會比任何從s 到 v 的其他路徑的權重大,不過我們在此處特指了由s到u再到v的一條路徑。

2、最短路徑估計值的鬆弛效果

引理11:(上界性質)設G = (V,E)為一個帶權重的有向圖,權重函式 w : E→R,其源節點為s,並由Initialize_Single_Source(G, s)初始化,那麼對於所有結點 v ∈V,v.d ≥ δ(s, v),並且該不等式在對圖的邊進行任何次序的鬆弛過程中保持成立,且:v.d取得下界δ(s, v)時,將不再發生變化。

證明:我們使用歸納法。

    1、基礎步驟:在初始化後,對所有結點 v ∈ V,v.d ≥ δ(s, v)顯然成立。因為 v.d = ∞ 意味著所有的結點 v ∈V - {s},v.d ≥ δ(s, v),對於源節點,我們單獨考慮:若 s 在一個權重為負值的環路上,那麼δ(s, s) = -∞,否則為0.這一位置 s. d = 0 ≥ δ(s, s)必然成立。

    2、歸納步驟: 考慮對邊(u, v)的鬆弛操作。根據歸納假設,在鬆弛前,對所有 x ∈ V,我們有x.d ≥ δ(s, v)。而在對邊(u, v)進行鬆弛操作的過程中,唯一可能發生改變的d值僅有v.d,如果該值發生改變,有:

v. d = u. d + w(u, v) ≥ δ(s, u) + w(u ,v) ≥ δ(s, v)(三角不等式)即得到維持。

   3、最終,在v. d = δ(s, v)時,注意它達到其取值的下界後, v.d 無法減小,因為剛剛證明了 v.d ≥ δ(s, v)——而鬆弛操作是對當發現一條權值相對較少的路徑時,才將其更替為v.d。鬆弛操作不增加d值——因此將不會發生變化。

3、推論12(非路徑性質):給定一個帶權重的有向圖G=(V,E),權重函式為 w:E→R,假定從源節點 s ∈V 到給定結點 v ∈ V 之間不存在路徑,則在該圖由Initialize_Single_Source(G, s)演算法進行初始化後,我們有 v.d = δ(s, v) = ∞,並且該等式作為不變式一直維持到圖G所有鬆弛操作結束。

證明:根據上界性質,我們總有v.d ≥ δ(s, v) = ∞(注意,此處δ(s, v) = ∞ 為已知量。)因此 v.d = δ(s, v) = ∞。

 

4、引理13:設G = (V,E)為一個帶權重的有向圖,權重函式w:E→R,且邊(u, v)∈E,那麼在對邊(u, v)進行Relax(u, v, w)後,有v.d ≤ u.d + w(u, v)。

證明:若在鬆弛前,我們有 v.d > u.d + w(u, v),那麼在鬆弛後, v. d = u.d + w(u, v)。

同時,若在鬆弛後,我們有v. d ≤ u. d + w(u, v),那麼鬆弛後,其值仍然不會發生改變。

5、引理14(收斂性質) 設G = (V,E)為一個帶權重的有向圖,權重函式 w:E→ R。設 s ∈V為某個源節點,s -> u→v為圖中的一條最短路徑,其中u, v∈V。假定圖G由Initialize_Single_Source(G, s)初始化,並在其之後進行了一系列的鬆弛操作,其中包括對邊(u, v)的鬆弛操作Relax(u, v, w),若在鬆弛前有u. d = δ(s, u),那麼在鬆弛後,v.d = δ(s, v)。

證明:根據上界性質,u.d = δ(s, u)將不會發生變化。同時,在鬆弛邊(u, v)時,發生:

v. d ≤  u. d + w(u, v) = δ(s, u) + w(u, v) = δ(s, v)(最短路徑的最優子結構),同時再根據上界性質,其也會保持不變。

6、引理15(路徑鬆弛性質):設G = (V,E)為一個帶權重的有向圖,權重函式w:E→R,設 s ∈ V 為某個源節點,考慮從 s 到Vk 的一條最短路徑p = <V0, V1,……, Vk>,若圖由Initialize_Single_Source(G, s)初始化,並進行了一系列的鬆弛操作,其中按順序對邊(V0, V1), (V1, V2),……, (Vk-1, Vk),那麼在進行了這些鬆弛操作後,我們有 Vk. d = δ(s, Vk),並一直保持不變,該性質與對其他邊的鬆弛操作無關。

證明:根據最優子結構和上界性質進行證明:書上還用到了歸納假設法:假設最短路徑p在第i條邊被鬆弛之後,有Vi.d = δ(s, Vi)。

則在基礎步:i = 0時,顯然 V0. d = s. d = δ(s, s) = 0 假設成立,同時s.d將在這之後不會發生變化。

在歸納步:根據最短路徑的最優子結構,從在V0到Vi的最短路徑上,V0到Vi-1也是一條最短路徑。同時我們已經有Vi-1.d =δ(s, Vi-1),同時根據收斂性質,在對邊(Vi-1, Vi)進行鬆弛後,我們有Vi.d = δ(s, Vi),並在這之後不會發生變化。即得到證明。

 

鬆弛操作和最短路徑樹

引理16:設G=(V,E)為一個帶權重的有向圖,權重函式 w:E→R,設 s ∈V為某個源節點,假定G不包含從源節點s可以到達的權重為負值的環路,則在圖G由Initialize_Single_Source(G, s)演算法初始化之後,前驅子圖Gp形成根節點為源節點s的有根樹,並且任何對圖G的邊的任意鬆弛操作將維持該性質不變。

證明:在初始化時,Gp中的唯一結點為 s。引理顯然成立。現在考慮經過一系列鬆弛操作後的前驅子圖Gp。

 

筆者注:以下關於無環路的證明與書上給出的方法不同,是因為我覺得書上的方法不太嚴謹——它相加了狀態不統一的結點的d值,並相消掉。(即對邊鬆弛前後)

 

首先,先證明Gp無環路:假定在鬆弛序列的某個步驟上在圖Gp建立了一個環路 c =<V0, V1, ……, Vk>,其中有V0 = Vk,那麼Vi.p  = Vi-1。同時,假定在對邊(Vk-1, Vk)進行鬆弛操作時建立了該環路。

在這之前,我們需要得知:所有環路上的結點都能從源節點s到達。——在進入環路時,必然V0需要一個前驅結點來到達,從而便能到達整個環路。根據這個資訊,我們有結論:Vi.d < ∞。

之後,我們試圖證明c是一個權重為負值的環路,從而說明環路本身不存在。

在鬆弛邊(Vk-1, Vk)之前,除了Vk-1和Vk,在環路上的其他結點,我們均有:Vi.p = Vi-1。因此,我們考慮對它們的鬆弛操作——在對它們進行鬆弛操作的時候,才會發生p的修改,而此時同時發生的還有對Vi.d的修改,並使得它:

Vi.d = Vi-1. d + w(Vi-1, Vi)。同時,在對這條邊進行鬆弛操作前,我們有:Vi.d > Vi-1.d + w(Vi-1, Vi)。

同樣的,在鬆弛最後一條邊(Vk-1, Vk)前,我們也有:Vk.d > Vk-1.d +w(Vk-1, Vk)。然而,我們考慮在鬆弛邊(Vk-1, Vk)前,從Vk以V0的身份依次經過V1、……最後到達Vk-1的路徑:在之前,由於我們更新了除V0外每個結點的p值,這表明在更新後,我們有:Vk-1.d =Vk-2.d + w(Vk-2, Vk-1) = Vk-3.d+w(Vk-3, Vk-2) + w(Vk-2, Vk - 1) = V0.d + w(V0, V1) + w(V1, V2) + …… + w(Vk-2, Vk - 1)

在鬆弛最後一條邊(Vk-1, Vk)時,我們有 Vk.d > Vk-1.d + w(Vk-1, Vk)。帶入上式,有:

Vk.d > V0.d + w(V0, V1) + w(V1, V2) + ……+ w(Vk-1, Vk)。

其中,Vk.d和V0.d在對邊(Vk, Vk-1)進行鬆弛前相等——因為僅在對邊(u, v)進行鬆弛時它才發生改變。同時,消去該值後,我們右邊所得的便是整個環路的總權重——得到的結果為負值。因此得出矛盾,即環路不存在。

現在我們擁有了圖Gp是一個有向無環圖的結論。為證明其形成一棵根節點為s的有根樹,只需證明對 v ∈Vp,在Gp中存在一條從源節點s到達v的簡答路徑路徑。

證明如下:由於Vp中僅包含具有非空p值的結點,因此,再加上結點s,同時,在圖Gp中,邊Ep中僅包含(v.p, v)——即表示它是由結點的p屬性誘導的邊的集合。因而從源節點發出的邊遞迴,我們便得到一個能包含所有具有非空p值的點的圖。然而,我們可以看到,它僅證明了簡單路徑的存在,並未證明唯一性。現在又需證明其唯一性:

若在圖Gp中,從源節點s到達某個節點v具有兩條簡單路徑,那麼這兩條路徑上必然會在最後迴歸到一條路徑上(當然,也可能是直接回歸到結點v),我們假設迴歸的這個結點為u,那麼我們會顯然的發現bug:u同時具有兩個u.p屬性——這明顯是不可能的。在鬆弛操作中,必然會比較這兩個u.p的d屬性,並選擇其中一個作為u結點唯一的p屬性,並因此得到證明。

有了這麼多基礎,我們終於可以回到最初我們想要證明的東西:在執行了一系列的鬆弛操作後,所有結點都取得了其最後的最短路徑權重,則Gp為一棵最短路徑樹。

 

引理17:(前驅子圖性質)設G = (V,E)為一個帶權重的有向圖,權重函式 w :E→R,設s∈V為源節點,假定圖G不包含從s可以到達的權重為負值的環路。假定呼叫Initialize_Single_Source(G, s)對圖進行初始化,然而對圖G的邊進行任意次序的鬆弛操作。該鬆弛操作序列將針對所有結點v∈V生成的v.d = δ(s, v),則前驅子圖Gp形成一棵根節點為s的最短路徑樹。

證明:我們先回到最短路徑樹的定義:

一棵根節點為s的最短路徑樹是一個有向子圖G' = (V', E'),其中V' ∈ V,E' ∈ E,滿足:

1、V' 是圖G中從源節點 s 可以到達的所有結點的集合。

2、G' 形成一棵根節點為 s 的樹。

3、對於所有結點 v ∈ V',圖G’中從結點 s 到結點 v 的唯一簡單路徑是圖G中從結點 s 到結點 v的一條最短路徑。

對性質1:在上述中,我們已經得知了在集合Vp中的結點的d 是有限值,且它們可被到達。而根據上界定理,δ(s, v) ≤ v.d,因此δ(s, v)有限,從而我們得到它是可從源節點s到達的。

對性質2:可直接由引理16匯出。

對性質3:對結點v來說,其屬性p和d是相關聯——p的選擇為其相對較短路徑上的前驅結點,而若考慮對所有邊進行鬆弛,那麼會選擇比較所有路徑上的最短路徑的前驅結點,即得到證明。

(注:詳細的證明見書394頁)

 

 

 

相關文章