Dijkstra 證明

正如uva136題目(題目大意:所有隻由2,3,5因子的乘積的數按小到大排列:1 2 3 4 5 6 8 9......,求第1500個數的大小)一樣

[1][2][3][4][5][6][8],第8個數肯定是由前面7個數中的某一個*2或*3或*5得到的,即爲:5*2或3*3或2*5之一。

Dijkstra同樣如此,不僅由於最短路徑本身就具有最優子結構(最短路徑中的一段路徑一定是最短的),而且還由於Dijkstra算法是計算到源點最短路徑由小到大排列序列的原因。

[0][1][2][3][4][5][6][7][8][9],當0-4號節點的最短距離確定之後(並且訪問每一個節點時,更新後繼節點的距離,所以5號當前值節點是經過0-4號節點中最短的),由於是由小到大的排列,另外一個證明也就不言而喻了,5號節點到源點0的最短距離不可能是經過6-9號節點,因爲6-9號節點當前的距離都比5號大,更不用說再加上6-9號到5號之間的距離。當然6-9號的距離有可能還會變小,但肯定是大於5號當前值的(更新於5號之後)。

總結:爲了能將問題儘量的轉化爲具有子問題特徵,常常按照某一特徵衡量問題的“輩份”,才使得問題容易解決;如字符串越後面的輩份越低,dijkstra中距離越長的輩份越低,等等。

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