1. 程式人生 > 其它 >分治、動態規劃、貪心、回溯演算法特點的自我總結

分治、動態規劃、貪心、回溯演算法特點的自我總結

分治特點

  1. 分解:
    1. 使用遞迴的方式將問題的範圍逐漸縮小看作子問題
    2. 比如
      1. 一分為二:0~n/2,n/2+1~結尾
      2. 首尾相互靠近
  2. 求解:通常被看作最小子問題的求解(注意邊界判斷)
  3. 合併:子問題的返回值處理

動態規劃特點

  1. 最優子結構
    1. 一個問題的最優解包含了其子問題的最優解:第n層子問題需要根據第n-1層子問題的解得出答案
  2. 子問題被重複求解(重疊的):
    1. 解原問題的遞迴演算法可反覆解同樣的子問題,而不是總在產生新問題(分治法會產生新問題)  
    2. 需要使用表記錄子問題的解,並在該表中得出最優解(全域性最優解)

貪心

  1. 最優子結構(與動態規劃一致)
  2. 區域性最優的選擇策略(與動態規劃的主要區別)
    1. 最優解可能不止一個
    2. 重點在於選擇,根據策略做最優的選擇
    3. 具有度量標準
    4. 通常會先排好序

回溯

    1. 深度優先
    2. 解空間:一般是二叉樹畫路徑,取葉子節點,數量為2n
    3. 滿足條件的所有解在解空間中獲取
  1. 活/死節點
    1. 滿足條件的節點是活結點,不滿足的則是死結點
    2. 當碰到死結點時,需要從該節點返回到上一個節點,選擇另一個節點,若依舊是死的,則返回到上一個節點的父節點
  2. 限界函式(剪枝)
    1. 儘可能多和儘可能早地“殺掉”不可能產生最優解的活結點
  3. 多重迴圈
    1. 常涉及下標的++(去往子節點)、--(回到父節點)

分支限界

  1. 與回溯相似,但是廣度優先