淺談動態規劃法與貪心法和回溯法的聯絡
今天在建模的時候又回頭看了看自己的演算法課本,真是溫故而知新。這裡,我主要想從樹的角度來探討一下這三類演算法。
首先我想說的是,當你看到一個演算法的時候,腦子裡必須要有一個例項立馬出現,這樣才說明你對這個演算法算是有點掌握,否則看到一個演算法的時候,亂七八糟的演算法一下子都出來了,那麼說明你並沒有很好的理解這些演算法,而是把他們攪在一起了。
那麼看到這三種演算法,你應該有所出現:
貪心法是動態規劃法的特例,如0-1揹包,最小代價生成樹(prim演算法和cruskal演算法),huffman演算法,以及地傑斯特拉演算法。
動態規劃法是一種方法,注意和演算法的區別。如多段圖問題,備忘錄方法,弗洛伊德演算法,最長公共子序列問題
回溯法是比動態規劃法更加一般的演算法,如n皇后,子集和數問題
那麼,這三種有什麼區別呢?
首先,這些方法所要解決的問題,一般都是決策問題。而貪心法一般是來求解最優問題的,而且他們其實都是在對問題的狀態空間樹進行搜尋,在這個狀態空間樹中搜尋最佳的路徑以便求出最優策略。而貪心法是從上到下只進行深度搜尋的,也就是說它是一口氣走到黑的,一口氣吃成胖子的,它的代價取決於子問題的數目,也就是樹的高度,每次在當前問題的狀態上作出的選擇都是1,也就是說,它其實是不進行廣度搜尋的,這也造成了它的一個缺點:它得出的解不一定是最優解,很有可能是近似最優解。而動態規劃法在最優子結構的前提下,從狀態空間樹的葉子節點開始向上進行搜尋,並且在每一步都根據葉子節點的當前問題的狀況作出選擇,從而作出最優決策,所以她的代價就是子問題的個數和可選擇的數目,所以它求出的解一定是最優解。回溯法是從上到下進行深度搜尋,如果深度搜尋沒有進行到底而不滿足決策函式了,那麼不好意思,請回去,然後再從最近的可以岔開的地方選擇另一條路,繼續之前的深度搜尋,如果搜尋到底,那麼再通過for迴圈進行廣度搜尋。所以它也是深度搜尋和廣度搜尋並行的。求出的解也一定是最優解。
相關文章
- 貪心法和動態規劃法的區別動態規劃
- 淺談動態規劃動態規劃
- 動態規劃法動態規劃
- 「演算法思想」分治、動態規劃、回溯、貪心一鍋燉演算法動態規劃
- 關於動態規劃法動態規劃
- 談一談動態規劃和dfs動態規劃
- 淺談貪心與動歸
- 貪心演算法與動態規劃的區別演算法動態規劃
- 動態規劃法(一)從斐波那契數列談起動態規劃
- 淺談動態規劃以及相關的股票問題動態規劃
- 演算法---貪心演算法和動態規劃演算法動態規劃
- “插花問題”的動態規劃法演算法動態規劃演算法
- 插花問題的“動態規劃法”演算法動態規劃演算法
- 貪心法
- 理論+實踐,帶你掌握動態規劃法動態規劃
- 0-1揹包問題 動態規劃法動態規劃
- 動態規劃(dynamic programming)與貪心演算法(greedy algorithm)動態規劃演算法Go
- 順序表應用8:最大子段和之動態規劃法動態規劃
- 回溯法
- 為什麼你學不過動態規劃?告別動態規劃,談談我的經驗動態規劃
- LeetCode:動態規劃+貪心題目整理LeetCode動態規劃
- 圖解Leetcode組合總和系列——回溯(剪枝優化)+動態規劃圖解LeetCode優化動態規劃
- 動態規劃_備忘錄法_矩陣鏈乘問題動態規劃矩陣
- 演算法設計與分析中的幾個核心演算法策略:動態規劃、貪心演算法、回溯演算法和分治演算法演算法動態規劃
- 淺談什麼是動態規劃以及相關的「股票」演算法題動態規劃演算法
- 淺談最長公共子序列引發的經典動態規劃問題動態規劃
- 分治法 && 動態規劃 洛谷P1115 最大子段和動態規劃
- 動態規劃求解最大子段和 (兩種寫法+還原最優解)動態規劃
- 【動態規劃(一)】動態規劃基礎動態規劃
- 動態規劃的理解與案例分析動態規劃
- 淺談摩爾投票法
- 淺談走進企業的“法”與“術”薦
- 淺談城鎮特色夜遊的設計與規劃
- 淺談程式猿的職業規劃
- 資料庫與動態規劃資料庫動態規劃
- 淺談常見的行動硬碟無法識別的解決辦法硬碟
- “最長公共字串子序列”問題的動態規劃法演算法字串動態規劃演算法
- 動態規劃動態規劃