基本思想:
1. 求解最優化問題的演算法包含一系列步驟。
2. 每一步都有一組選擇。
3. 作出當前看來最好的選擇。
4. 希望通過作出區域性優化選擇達到全域性優化選擇。
5. 貪心演算法不一定總產生優化解。
6. 貪心演算法是否產生優化解需嚴格證明。
貪心演算法產生優化解的條件:
1.貪心選擇性:若乙個優化問題的全域性優化解可以通過區域性優化選擇得到。
2. 優化子結構
貪心問題的解決步驟:
1. 分析問題的最優子結構。
2. 設計出乙個遞迴解。
3. 證明在遞迴階段的任一選擇,最優選擇之一總是貪心選擇。那麼,做貪心選擇總是安全的。
4. 證明通過貪心選擇,所有子問題(除乙個以外)都為空。
5. 設計出乙個實現貪心策略的遞迴演算法。
6. 將遞迴演算法轉換成迭代演算法。
優化解決步驟:
1.將優化問題轉化成這樣的乙個問題,即先做出選擇,再解決剩下的乙個子問題。
2. 證明原問題總是有乙個最優解是做貪心選擇得到的,從而說明貪心選擇的安全。
3. 說明在做出貪心選擇後,剩餘的子問題具有這樣的乙個性質。即如果將子問題的最優解和我們所作的貪心選擇聯合起來,可以得出原問題的乙個最優解。
哈夫曼編碼問題:每次選取最小的兩個節點構造哈夫曼樹,並將其和作為新節點加入到節點集合中,重複以上步驟,這也是通過區域性貪心選擇獲得全域性最優解的情況。
部分揹包問題:不同於0-1揹包問題,可以取物品的一部分,所以0-1揹包問題的每乙個物品想象成乙個金錠,部分揹包問題中的一件物品則更像金粉。部分揹包問題通過計算每件物品的單位重量價值來比較選擇優先物品。這就是每次進行貪心選擇,構造全域性最優解,而0-1揹包問題之所以不能使用貪心演算法,再與區域性貪心演算法不能使得揹包被恰好填滿,所以不能保證全域性最優。
貪心演算法例項
問題描述 馬的遍歷問題。在 方格的棋盤上,從任意指定方格出發,為馬尋找一條走遍棋盤每一格並且只經過一次的一條路徑。傳統演算法 首先這是乙個搜尋問題,運用深度優先搜尋進行求解。演算法如下 輸入初始位置座標 x,y 步驟c 如果 c 64 輸出乙個解,返回上一步驟 c x,y c 計算 x,y 的八個方...
貪心演算法例項
貪心演算法 又稱貪婪演算法 是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當...
貪心演算法例項
有一批貨櫃要裝上一艘載重量為c的輪船。其中貨櫃i的重量為w。最優裝題要求確定在裝載體積不受限制的情況下,將盡可能多的貨櫃裝上輪船。該問題可形式化描述為 其中,變數xi 0表示不裝入貨櫃i,xi 1表示裝入貨櫃i。演算法描述 最優裝載問題可用貪心演算法求解,採用重量最輕者先裝的貪心選擇策略,可產生最優...