1. 程式人生 > >貪心演算法和動態規劃演算法比較

貪心演算法和動態規劃演算法比較

動態規劃和貪心演算法都是一種遞推演算法 均用區域性最優解來推導全域性最優解

不同點:

貪心演算法:

1.貪心演算法中,作出的每步貪心決策都無法改變,因為貪心策略是由上一步的最優解推導下一步的最優解,而上一部之前的最優解則不作保留。
2.由(1)中的介紹,可以知道貪心法正確的條件是:每一步的最優解一定包含上一步的最優解。

典型的貪心演算法:給定一個二維陣列,每一行取一個數求和,要求和最大,只需要求出每一行的最大值即可。要求A最大,只需求B最大,要求B最大,只需要求C最大,問題可以順藤摸瓜不斷的轉換成最終的子問題,全域性最優是有最終的區域性最優轉化而成的。

動態規劃演算法:

1.全域性最優解中一定包含某個區域性最優解,但不一定包含前一個區域性最優解,因此需要記錄之前的所有最優解
2.動態規劃的關鍵是狀態轉移方程,即如何由以求出的區域性最優解來推導全域性最優解
3.邊界條件:即最簡單的,可以直接得出的區域性最優解

典型的動態規劃問題:0-1揹包問題,給定n種物品(每種物品只有一種,只有放入和不放入兩種狀態)和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為C。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?這種問題只能求出所有的組合,然後取價值最大的情況。