貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。
用貪心法設計演算法的特點是一步一步地進行,常以當前情況為基礎根據某個優化測度作最優選擇,而不考慮各種可能的整體情況,它省去了為找最優解要窮盡所有可能而必須耗費的大量時間,它採用自頂向下,以迭代
的方法做出相繼的貪心選擇,每做一次貪心選擇就將所求問題簡化為乙個規模更小的子問題,通過每一步貪心選擇,可得到問題的乙個最優解,雖然每一步上都要保證能獲得區域性最優解,但由此產生的全域性解有時不一定是最優的,所以貪心法不需要回溯。
注意:對於乙個給定的問題,往往可能有好幾種量度標準。初看起來,這些量度標準似乎都是可取的,但實際上,用其中的大多數量度標準作貪婪處理所得到該量度意義下的最優解並不是問題的最優解,而是次優解。因此,選擇能產生問題最優解的最優量度標準是使用貪婪演算法的核心。
經典的求最小生成樹的prim演算法和kruskal演算法、計算強連通子圖的dijkstra演算法、構造huffman樹的演算法都是漂亮的貪心演算法
⒈建立數學模型來描述問題。
⒉把求解的問題分成若干個子問題。
⒊對每一子問題求解,得到子問題的區域性最優解。
⒋把子問題的解區域性最優解合成原來解問題的乙個解。
實現該演算法的過程:
從問題的某一初始解出發;
while 能朝給定總目標前進一步 do
求出可行解的乙個解元素;
由所有解元素組合成問題的乙個可行解。
馬踏棋盤的貪心演算法
【問題描述】
馬的遍歷問題。在8×8方格的棋盤上,從任意指定方格出發,為馬尋找一條走遍棋盤每一格並且只經過一次的一條最短路徑。
【貪心演算法】
其實馬踏棋盤的問題很早就有人提出,且早在2023年,j.c.warnsdorff就提出了乙個有名的演算法。在每個結點對其子結點進行選取時,優先選擇『出口』最小的進行搜尋,『出口』的意思是在這些子結點中它們的可行子結點的個數,也就是『孫子』結點越少的越優先跳,為什麼要這樣選取,這是一種區域性調整最優的做法,如果優先選擇出口多的子結點,那出口少的子結點就會越來越多,很可能出現『死』結點(顧名思義就是沒有出口又沒有跳過的結點),這樣對下面的搜尋純粹是徒勞,這樣會浪費很多無用的時間,反過來如果每次都優先選擇出口少的結點跳,那出口少的結點就會越來越少,這樣跳成功的機會就更大一些。
五大常用演算法 貪心演算法
一 基本概念 所謂貪心演算法是指,在對問題求解時,總是做出在 當前看來是最好的選擇 也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的 區域性最優解 貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略...
五大常用演算法 貪心演算法
貪心演算法是指 在每一步求解的步驟中,它要求 貪婪 的選擇最佳操作,並希望通過一系列的最優選擇,能夠產生乙個問題的 全域性的 最優解。貪心演算法每一步必須滿足一下條件 1 可行的 即它必須滿足問題的約束。2 區域性最優 他是當前步驟中所有可行選擇中最佳的區域性選擇。3 不可取消 即選擇一旦做出,在演...
貪心演算法適用條件 五大常用演算法之三 貪心演算法
一 基本概念 所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須...