聯繫
- 都是一種推導算法
- 都是分解成子問題來求解,都需要具有最優子結構
區別
1、貪心:每一步的最優解一定包含上一步的最優解,上一步之前的最優解則不作保留;
動態規劃:全局最優解中一定包含某個局部最優解,但不一定包含前一個局部最優解,因此需要記錄之前的所有的局部最優解
2、貪心:如果把所有的子問題看成一棵樹的話,貪心從根出發,每次向下遍歷最優子樹即可(通常這個“最優”都是基於當前情況下顯而易見的“最優”);這樣的話,就不需要知道一個節點的所有子樹情況,於是構不成一棵完整的樹;
動態規劃:動態規劃則自底向上,從葉子向根,構造子問題的解,對每一個子樹的根,求出下面每一個葉子的值,最後得到一棵完整的樹,並且最終選擇其中的最優值作爲自身的值,得到答案
3、根據以上兩條可以知道,貪心不能保證求得的最後解是最佳的,一般複雜度低;而動態規劃本質是窮舉法,可以保證結果是最佳的,複雜度高。
4、針對0-1揹包問題:這個問題應比較選擇該物品和不選擇該物品所導致的最終方案,然後再作出最好選擇,由此就導出許多互相重疊的子問題,所以用動態規劃。