ACM 貪心演算法

2021-09-12 13:26:25 字數 1266 閱讀 9301

acm-貪心演算法

在求最優解問題的過程中,依據某種貪心標準,從問題的初始狀態出發,直接去求每一步的最優解,通過若干次的貪心選擇,最終得出整個問題的最優解,這種求解方法就是貪心演算法。

從貪心演算法的定義可以看出,貪心演算法不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解,而由問題自身的特性決定了該題運用貪心演算法可以得到最優解。

如果乙個問題可以同時用幾種方法解決,貪心演算法應該是最好的選擇之一。但貪心演算法不是總是有效。

當乙個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。

運用貪心策略在每一次轉化時都取得了最優解。問題的最優子結構性質是該問題可用(貪心演算法)或(動態規劃)演算法求解的關鍵特徵。

貪心演算法的每一次操作都對結果產生直接影響。

貪心演算法對每個子問題的解決方案都做出選擇,不能回退。

使用貪心演算法求解問題應該考慮如下幾個方面:

(1)候選集合a:為了構造問題的解決方案,有乙個候選集合a作為問題的可能解,即問題的最終解均取自於候選集合a。

(2)解集合s:隨著貪心選擇的進行,解集合s不斷擴充套件,直到構成滿足問題的完整解。

(3)解決函式solution:檢查解集合s是否構成問題的完整解。

(4)選擇函式select:即貪心策略,這是貪心法的關鍵,它指出哪個候選物件最有希望構成問題的解,選擇函式通常和目標函式有關。

(5)可行函式feasible:檢查解集合中加入乙個候選物件是否可行,即解集合擴充套件後是否滿足約束條件。

例:①揹包問題:如果物品不可以分割,稱為0—1揹包問題(動態規劃);如果物品可以分割,則稱為揹包問題(貪心演算法)。使用貪心演算法時總是按照價效比放入揹包。

②最優裝載問題:stable_sort(box, box+n+1, cmp);按照公升序排貨櫃重量,依次排進最輕的,得到最多的貨櫃數。

③刪數問題:即尋找最近的下降點,刪除公升序數列的最後乙個,也是降序數列的第乙個不降序條件:a[i] <= a[i+1]當不滿足時即找到了該數。

④多處最優服務次序問題:先排序,再依次排入空閒視窗。

⑤搬桌子:將每個房間之間的走廊作為乙個統計單位,找到最大的占用次數,即可得到最優解。

⑥均分紙牌:先得到期望值,過濾左右兩邊的合理數,再依次移動紙牌

⑦整數區間:對得到的區間的右邊進行排序,對右邊標記,並右移當前區間指標,直到當前區間不包含標記點,再重複上述操作。

⑧貓糧:同揹包問題相似,找價效比最高的。

⑨釣魚:先列舉要走的湖泊數,得到總淨釣魚時間,或者說淨釣魚次數,再選可釣魚最多的湖釣魚,如果找不到最多的,就從第乙個湖開始,這樣再處理不同方案的最優解。

ACM 貪心演算法

這是大學期間acm校賽時我出的一道題,考貪心演算法,沒有牽涉複雜的資料結構,有題目加源 贏取最多最有價值的禮物 problem description 五一期間到長沙烈士公園玩,走進去之後,發現許多人在圍在一起玩一種遊戲,遊戲規則是 給你m個環,用乙個環可以套住乙個禮物,同時丟擲時要花費一秒鐘的時間...

ACM貪心演算法總結

通過這一段時間對貪心演算法的練習,即通過對落單的數 主元素等的程式設計,我加深了對貪心演算法的理解,更加明白如何通過貪心找到其區域性最優解。注意 貪心演算法不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解。基本思想 通常以把總體分開的方式進行,以依次調整的方式作出相繼的貪心選擇,每...

ACM演算法之貪心演算法

acm演算法之貪心演算法 一般使用貪心演算法要滿足兩個條件 a.貪心選擇性質 可通過做區域性最優 貪心 選擇來達到全域性最優解。貪心選擇性質 這是貪心演算法與動態規劃的區別 b.最優子結構性質 問題的最優解包含了子問題的最優解。貪心演算法的基本思想 找出整體當中每個小的區域性的最優解,並且將所有的這...