1. 程式人生 > >動態規劃、分治法與貪心演算法的區別

動態規劃、分治法與貪心演算法的區別

分治法與動態規劃的相同點:
分治法與動態規劃,二者要求原問題具有最有子結構,都是將問題分而治之分解成若干個規模較小的子問題;

不同點:
動態規劃是將原問題分解為多個子問題,通過計算出子問題的結果構造一個最優解動態規劃通過迭代法自底向上求解,動態規劃將分解後的子問題理解為相互間有聯絡,有重疊的部分;
演算法的應用:裝配線,矩陣乘法,最長公共子序列,構造最優的二叉樹
分治法是將原問題分解為多個子問題,利用遞迴對各個子問題獨立求解,最後利用各子問題的解進行合併形成原問題的解分治法將分解後的子問題看成是相互獨立的。

例如:在求解斐波那契數列過程中求解fibonacci(5)求解fibonacci(5)時,得求解fibonacci(4)和fibonacci(3).其中,求解fibonacci(4)時,需要求解fibonacci(3).

在分治法中,求解完fibonacci(4)後還得重新求解fibonacci(3),即使求解fibonacci(4)子問題的時候已經求解過,也就是說,求解了二次子問題fibonacci(3).

貪心演算法:依賴於當前已經做出的所有選擇,採用自頂向下(每一步根據策略得到當前一個最優解,保證每一步都是選擇當前最優的)的解決方法。
貪心演算法的應用:最小生成樹,最短路徑,資料壓縮--哈夫曼編碼

動態規劃例題:
m*n的矩陣,求從左下角點到右上角點所有路徑總數