貪心法( greedy algorithm),又稱貪心演算法,是一種在每一步選擇中都採取在當前狀態下最好或最優(即最有利)的選擇,從而希望導致結果是最好或最優的演算法。
1. 基本概念
貪心演算法與動態規劃的不同在於它每對每個子問題的解決方案都做出選擇,不能回退。動態規劃則會儲存以前的運算結果,並根據以前的結果對當前進行選擇,有回退功能。
所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。
貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須具備無後效性,即某個狀態以後的過程不會影響以前的狀態,只與當前狀態有關。所以對所採用的貪心策略一定要仔細分析其是否滿足無後效性。
貪心法可以解決一些最優化問題,如:求圖中的最小生成樹、求哈夫曼編碼……對於其他問題,貪心法一般不能得到我們所要求的答案。一旦乙個問題可以通過貪心法來解決,那麼貪心法一般是解決這個問題的最好辦法。由於貪心法的高效性以及其所求得的答案比較接近最優結果,貪心法也可以用作輔助演算法或者直接解決一些要求結果不特別精確的問題。
2. 適用範圍
貪心策略適用的前提是:區域性最優策略能導致產生全域性最優解。
實際上,貪心演算法適用的情況很少。一般,對乙個問題分析是否適用於貪心演算法,可以先選擇該問題下的幾個實際資料進行分析,就可做出判斷。
3. 貪心法的步驟
1.建立數學模型來描述問題。
2.把求解的問題分成若干個子問題。
3.對每一子問題求解,得到子問題的區域性最優解。
4.把子問題的解區域性最優解合成原來解問題的乙個解。
4. 實現步驟
從問題的某一初始解出發;
while (能朝給定總目標前進一步)
由所有解元素組合成問題的乙個可行解;
5. 典型問題
(1)0-1揹包問題
(2)馬踏棋盤
具體實現參見:
五大演算法之貪心演算法
貪心演算法是指對子問題取最值,從而求得區域性最優解,並以此求得全域性最優解。貪心演算法可以認為是動態規劃的乙個特例,同樣是需要將問題分解為子問題,避免了子問題的重複計算,只不過在子問題的處理上貪心演算法更加簡單直接。貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須具備無後效性,即某個狀...
五大常用演算法之貪心演算法
五大常用演算法之貪心演算法 貪心演算法 貪婪演算法 指的是 在對問題求解過程中,總是做出在當前看來是最好的選擇。不從整體最優上加以考慮,所做出的是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響...
五大演算法三 貪心演算法
一 基本概念 所謂貪心演算法是指,在對問題求解時,總是做出在 當前看來是最好的選擇 也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的 區域性最優解 貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略...