演算法| 高階動態規劃
阿新 • • 發佈:2020-11-30
動態規劃 Dynamic Programming
1. “Simplifying a complicated problem by breaking it down intosimpler sub-problems”
(in a recursive manner)
2. Divide & Conquer + Optimal substructure
分治 + 最優子結構
3. 順推形式: 動態遞推
DP 順推模板 function DP(): dp = [][] # ⼆維情況 for i = 0 .. M { forj = 0 .. N { dp[i][j] = _Function(dp[i’][j’]…) } } return dp[M][N];
關鍵點:
動態規劃 和 遞迴或者分治 沒有根本上的區別(關鍵看有無最優的子結構)
擁有共性:找到重複子問題(找到重複性和重複子問題,然後化繁為簡,庖丁解牛似的把一個大問題分解成各個重複的子問題)
差異性:最優子結構、中途可以淘汰次優解(動態規劃用來處理有所謂中間的重複性以及所謂的最優子結構,在中途可以淘汰次優解)
常見的 DP 題目和狀態方程
爬樓梯問題和硬幣置換問題,有異曲同工之處