ACM知識 - 貪心算法和動態規劃的區別與聯繫

聯繫

  1. 都是一種推導算法
  2. 都是分解成子問題來求解,都需要具有最優子結構

 

區別

1、貪心:每一步的最優解一定包含上一步的最優解,上一步之前的最優解則不作保留;

動態規劃:全局最優解中一定包含某個局部最優解,但不一定包含前一個局部最優解,因此需要記錄之前的所有的局部最優解 

2、貪心:如果把所有的子問題看成一棵樹的話,貪心從根出發,每次向下遍歷最優子樹即可(通常這個“最優”都是基於當前情況下顯而易見的“最優”);這樣的話,就不需要知道一個節點的所有子樹情況,於是構不成一棵完整的樹;

動態規劃:動態規劃則自底向上,從葉子向根,構造子問題的解,對每一個子樹的根,求出下面每一個葉子的值,最後得到一棵完整的樹,並且最終選擇其中的最優值作爲自身的值,得到答案

3、根據以上兩條可以知道,貪心不能保證求得的最後解是最佳的,一般複雜度低;而動態規劃本質是窮舉法,可以保證結果是最佳的,複雜度高。

4、針對0-1揹包問題:這個問題應比較選擇該物品和不選擇該物品所導致的最終方案,然後再作出最好選擇,由此就導出許多互相重疊的子問題,所以用動態規劃。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章