動態規劃 ------最短路徑問題

最短路徑問題是 動態規劃的一個實例。函數

1.最短路徑問題的描述優化

 

 

2.舉個例子來講明:編碼

 

求從 S 到 T 的最短路徑。spa

 

3.思考方式blog

 

 

4.利用動態規劃求解問題im

 

 

 依次 考慮從 C 到 T 的最短距離。d3

考慮從 B 到 C 的最短距離db

考慮從 A  到 B 的最短距離img

考慮從 T 到 A 的最短距離動態規劃

每次都是最短距離。

在整個過程當中,咱們把 咱們的目標問題轉化成了一個個的子問題,在子問題 求 最小值,最後解決了這個問題。

 

4.子問題的界定

 

 

 

5.最短路程之間的依賴關係

 

 

 

每一次計算的時候都是依據前一個子問題。不須要一個一個計算。每次計算均可以直接利用前一個問題的解。

 

6.子問題的優化原則

 

 

6.利用動態規劃求解是須要條件的,一個反例告訴你,動態規劃求解的條件

 

 

 分析: 假如從S 到 T 通過的節點依次是 A B C ,從C 到 T ,模10,咱們選擇 上面的2 . 從 B  到 C,咱們的兩條路分別是 4 和 7 ,模10,咱們選擇 上面的 4 ,那麼,從B到T的最短距離就是 6; 從 A 到 B ,咱們的兩條路分別是 6 和 9,模10,咱們選擇上面的路。

從 S 到 A ,兩條路分別是 8 和 11, 此時 ,模10,咱們選擇下面的 路。這時,路徑就如上圖中藍色的路徑了。

可是,這是最優的路徑嗎?顯然不是,紅色的路線纔是最優的路徑。由於模10後,獲得的結果爲0,比 1 小。

爲何是錯誤的? 

由於 破壞了動態規劃的優化原則,它的問題和它的子問題的優化函數之間沒有依賴關係。好比,咱們考慮最後一段 即 C 到 T的距離,

顯然, 2是最優解,而不是 5 。所以,破壞了優化原則的問題不能使用 動態規劃。

 

 7.動態規劃 小結

 

 

 能夠用於求解組合優化問題。注意 動態規劃的 最優化的原則。

 

 8.代碼

這個問題的簡化版本,編碼實現:從矩陣的(0,0)位置到矩陣的(array.length-1,array[0].length-1)的位置的最小值。

相關文章
相關標籤/搜索