分治、動態規劃、貪心、回溯演算法特點的自我總結
阿新 • • 發佈:2021-08-20
分治特點
- 分解:
- 使用遞迴的方式將問題的範圍逐漸縮小看作子問題
- 比如
- 一分為二:0~n/2,n/2+1~結尾
- 首尾相互靠近
- 求解:通常被看作最小子問題的求解(注意邊界判斷)
- 合併:子問題的返回值處理
動態規劃特點
- 最優子結構
- 一個問題的最優解包含了其子問題的最優解:第n層子問題需要根據第n-1層子問題的解得出答案
- 子問題被重複求解(重疊的):
- 解原問題的遞迴演算法可反覆解同樣的子問題,而不是總在產生新問題(分治法會產生新問題)
- 需要使用表記錄子問題的解,並在該表中得出最優解(全域性最優解)
貪心
- 最優子結構(與動態規劃一致)
- 區域性最優的選擇策略(與動態規劃的主要區別)
- 最優解可能不止一個
- 重點在於選擇,根據策略做最優的選擇
- 具有度量標準
- 通常會先排好序
回溯
- 樹
- 深度優先
- 解空間:一般是二叉樹畫路徑,取葉子節點,數量為2n
- 滿足條件的所有解在解空間中獲取
- 活/死節點
- 滿足條件的節點是活結點,不滿足的則是死結點
- 當碰到死結點時,需要從該節點返回到上一個節點,選擇另一個節點,若依舊是死的,則返回到上一個節點的父節點
- 限界函式(剪枝)
- 儘可能多和儘可能早地“殺掉”不可能產生最優解的活結點
- 多重迴圈
- 常涉及下標的++(去往子節點)、--(回到父節點)
分支限界
- 與回溯相似,但是廣度優先