日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dijkstra算法的另一种证明

發(fā)布時間:2025/5/22 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dijkstra算法的另一种证明 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

按:今天看Tanenbaum的計算機網(wǎng)絡時講到了Dijkstra算法。關于算法的正確性,《算法導論》給出了嚴格的證明。CLRS的證明基于一個通用的框架,非常清晰。今天只是隨意想想是否有其他證明的方式,結果發(fā)現(xiàn)是有的。雖然這種證明方法可能早已有人用過,不算新鮮。不過自己想了一通就把它放到這里純粹博大家一樂,我盡量寫的簡潔。

首先敘述下算法:

算法維護兩個集合,S(已找到從源點v開始的最短路徑的點)和Q(未找到從v開始的最短路徑的點)。

算法初始時S為空集;Q中,從v到v本身的最短路徑的權值為0,其他點均為正無窮。

在算法的每次迭代中,從Q中選擇一個權值最小的點u,這個權值即為從v到u的最短路徑,并且放入S。同時,遍歷u的每個鄰接點x,如果從v到u的最短路徑加上從u到x的邊的權值小于Q中記錄的x的權值,則更新x的權值。

(由于實在懶得輸入數(shù)學公式,哪些說的不清楚的地方還請參考CLRS。)

算法每次迭代找到一個點的最短路徑直到S=V、Q為空。

?

證明:

使用數(shù)學歸納法,假設在某次迭代(不是第一次迭代)之前,S中的點的權值都是最短路徑,我們證明某次迭代之后從Q中取出的點的權值依然是這個點的最短路徑。

利用反正,假設本次迭代從Q中取出的點u的權值不是最短的,那么存在一條從v到u的路徑小于這個權值。可知這條路徑上u的前趨一定有一個屬于S(因為至少v是屬于S的),假設屬于S的第一個前趨為x,而這條路徑上x的后繼為y。由算法的性質可知,這條路徑從v到y(tǒng)的權值一定是不小于從Q中取出的u的權值的,那么可知剛剛找到的這條從v到u的路徑權值也不小于從Q中取出的u的權值。這與假設矛盾。故u的權值是最短的。

而算法第一次迭代也滿足從Q中取出的店的權值為最優(yōu)這個性質,故算法的正確性得證。

?

總結

以上是生活随笔為你收集整理的Dijkstra算法的另一种证明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。