貪心 VS 動態規劃

2021-09-26 22:50:54 字數 525 閱讀 4978

貪心:每一步都是當前這一步的最優解法,但是卻不一定是整個問題的最優子解

動態規劃:每一步不一定是當前這一步的最優解,但是卻一定是整個問題的最優子解

從「最短路徑」問題中,就可以看出,使用動態規劃是正確的

對於動態規劃的進一步的演算法理解,請見這位大佬的部落格:

兩種方法:

自頂向下(又稱記憶化搜尋、備忘錄):基本上對應著遞迴函式實現,從大範圍開始計算,要注意不斷儲存中間結果,避免重複計算

自底向上(遞推):從小範圍遞推計算到大範圍,用陣列儲存

(a)自頂向下的解法:

long long dp[81] = ;/*用於儲存中間結果否則會重複計算很多重複的子問題*/

long long dp(int n)

(b)自底向上的解法:

動態規劃 貪心

區別 動態規劃 全域性最優解中一定包含某個區域性最優解,但不一定包含前乙個區域性最優解,因此需要記錄之前的所有最優解。條件 最優子結構 重疊子問題。方法 自底向上構造子問題的解。例子 子串行最大和問題,滑雪問題 貪心演算法 條件 每一步的最優解一定依賴上一步的最優解。方法 從問題的某乙個初始解出發逐...

小白高階之貪心演算法VS動態規劃

貪心演算法和動態規劃 相同點 要求乙個問題具有最優子結構的性質。不同點 動態規劃每一步都要進行一次選擇,但是選擇依賴於子問題的解 貪心演算法進行選擇時,直接作出在當前問題中看來最優的選擇,而不考慮子問題的解。例如0 1揹包問題就可以用動態規劃解決而不能用貪心演算法,但是分數揹包問題就是用貪心演算法解...

動態規劃和貪心

貪心演算法是種策略,思想。它並沒有固定的模式 比如最簡單的揹包問題 用貪心的思想去做,就可能有很多種方法 價效比最高的 價值最高的 重量最輕的 而你沒辦法確保你所選擇的貪心策略對所有的情況都是絕對最優的 動態規劃的思想是分治 解決沉餘 把乙個複雜的問題分解成一塊一塊的小問題 每乙個小問題中得到最優解...