1. 程式人生 > >程式設計思想 - 五大常用演算法詳解

程式設計思想 - 五大常用演算法詳解

https://www.cnblogs.com/brucemengbm/p/6875340.html

https://blog.csdn.net/changyuanchn/article/details/51476281

https://www.cnblogs.com/chuninggao/p/7295793.html

分治法

  • 基本思想
    • 將一個問題,分解為多個子問題,遞迴的去解決子問題,最終合併為問題的解
  • 適用情況
    1. 問題分解為小問題後容易解決
    2. 問題可以分解為小問題,即最優子結構
    3. 分解後的小問題解可以合併為原問題的解
    4. 小問題之間互相獨立
  • 例項
    1. 二分查詢
    2. 快速排序
    3. 合併排序
    4. 大整數乘法
    5. 迴圈賽日程表
動態劃分演算法
  • 基本思想
    • 將問題分解為多個子問題(階段),按順序求解,前一個問題的解為後一個問題提供資訊
  • 適用情況
    1. 最優化原理:問題的最優解所包含的子問題的解也是最優的,即最優子結構
    2. 無後效性:某個狀態一旦確定,就不受以後決策的影響
    3. 有重疊子問題
  • 說明
    • 遞推關係是從次小的問題開始到較大問題的轉化,往往可以用遞迴來實現,可以利用之前產生的子問題的解來減少重複的計算
回溯法
  • 基本思想
    • 選優搜尋法,走不通就退回重選,按照深度優先搜尋的策略,從根節點出發,深度搜索解空間
  • 步驟
    • 確定解空間
    • 確定節點的擴充套件搜尋規則
    • 深度優先方式搜尋解空間,用剪枝法避免無效搜尋
分支界限法
  • 基本思想
    • 與回溯法類似,也是在解空間裡搜尋解得演算法,不同點是,回溯法尋找所有解,分支界限法搜尋一個解或者最優解
    • 分支:廣度優先策略或者最小耗費(最大效益)優先
    • 分支搜尋方式:FIFO、LIFO、優先佇列式、分支界限搜尋演算法
貪心演算法
  • 基本思想
    • 不從總體最優考慮,僅考慮區域性最優解,問題必須具備後無效性
  • 步驟
    • 將問題分解為多個子問題
    • 得到問題的區域性最優解
    • 合併子問題的區域性最優解
  • 適用情況
    1. 區域性最優策略能導致全域性最優解
    2. 子問題後無效性


參照:

https://blog.csdn.net/beyond59241/article/details/50728614