第三章總結
- 請寫出作業“演算法第三章3”中題目“7-4 最低通行費”的動態規劃方程
請按照如下格式書寫動態規劃方程:
(1)狀態表示:
(2)狀態方程:
(3)邊界條件:
(4)時間、空間複雜度分析
動態規劃方程:
(1)狀態表示:
設 dp[i][j] 表示從左上角 (0, 0) 到達網格中 (i, j) 位置的最小費用。
(2)狀態方程:
dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1], dp[i+1][j] (if i < N-1), dp[i][j+1] (if j < N-1))
其中,grid[i][j] 表示網格中 (i, j) 位置的費用。注意,由於不能越界,所以在考慮 dp[i+1][j] 和 dp[i][j+1] 時需要判斷索引是否小於 N-1。
(3)邊界條件:
dp[0][0] = grid[0][0],因為從起點開始沒有額外的費用。
(4)時間、空間複雜度分析:
時間複雜度:O(N^2),因為我們需要遍歷整個網格一次。
空間複雜度:O(N^2),因為我們需要一個二維陣列來儲存每個位置的最小費用。
- 結合本章的學習,總結你對動態規劃法的體會和思考
體會和思考:
動態規劃的核心思想透過將問題分解為更小的子問題,並儲存這些子問題的解來避免重複計算,從而顯著提高演算法的效率,其中每個問題的解都依賴於其子問題的解。動態規劃的關鍵在於如何定義狀態以及狀態之間的轉移關係。在動態規劃中,我們需要定義一個或多個狀態變數來表示問題的當前狀態。而狀態轉移方程描述瞭如何從一個或多個先前狀態轉移到當前狀態,並計算出當前狀態的最優解。
我覺得動態規劃的難點在於如何正確地定義狀態和狀態轉移方程,這通常需要深入理解和分析問題。還要學會識別哪些型別的問題適合用動態規劃解決,並能夠靈活地定義狀態和狀態轉移方程。但是我又覺得動態規劃理解起來還蠻有趣的,看解析理解了題目然後分析問題的時候雖然有點繞,但是理解完覺得很好玩,特別是一些題目列出矩陣然後在讀取和輸出的時候,列動態方程的時候都比較巧妙,