定義:通過逐步求區域性最優(當前狀態的最好選擇)來匯出全域性最優(ps:允許的條件下貪心最快)
適用條件:具有最優子結構(乙個問題的最優解包含其子問題的最優解,乙個問題的最優解包含其子問題的最優解)
具有貪心選擇性質(求問題的整體最優解可以通過一系列區域性最優的選擇,即貪心選擇來達到。)
流程:
greedy(a)
; //初始解集合為空集
while (not solution(s)) //集合s沒有構成問題的乙個解
; a = a-;
} return s;
}
(1
)候選集合
a:為了構造問題的解決方案,有乙個候選集合a作為問題的可能解,即問題的最終解均取自於候選集合a。 (2
)解集合
s:隨著貪心選擇的進行,解集合s不斷擴充套件,直到構成滿足問題的完整解。 (3
)解決函式
solution
:檢查解集合s是否構成問題的完整解。 (4
)選擇函式
select
:即貪心策略,這是貪心法的關鍵,它指出哪個候選物件最有希望構成問題的解,選擇函式通常和目標函式有關。 (5
)可行函式
feasible
:檢查解集合中加入乙個候選物件是否可行,即解集合擴充套件後是否滿足約束條件。
例子:
//q1.刪數問題
#include#includeusing namespace std;
main()
if(str.size()>1 && str[0]=='0') str.erase(0,1);//刪除前導0
cout<#includeusing namespace std;
struct baga[1001]; //存放物品的陣列
bool cmp(bag a, bag b)//排序因子(按價效比降序)
//形參n是物品的數量,m是揹包的容量,陣列a是按物品的價效比降序排序
double knapsack(int n,bag a, double m)//注意這裡的bag a是傳址呼叫
貪心 學習理解記錄
本篇是在學習理解貪心的過程中留下的理解和記錄,主要是通過幾個題目來理解貪心的思路 只顧眼前,但是卻能得到最優解,讓眼前的浪費是最小的 不能保證是唯一的最優解但是一定是最優解之一 直觀地表示就是只考慮區域性,每次都拿最合適的乙個,最後得到的就一定是最優解,但是如果出現多種限制條件的話就需要綜合考慮 題...
學習記錄2
pv操作同步過程 對訊號燈狀態進行改變,p呼叫一次 1,v呼叫一次 1。p操作 p s 是乙個原語操作,p操作執行 s 若s為負數,呼叫p s 的程序被阻塞,放到等待佇列q中。p s v操作 v s 剛好與p s 操作相反,v操作執行 s 若s為大於0,繼續執行 s 0,從訊號燈等待佇列移出乙個程序...
學習記錄2
1 如果電腦螢幕顯示異常 安裝360顯示卡驅動 3 win10虛擬機器未聯網,橋接模式沒有作用,勾選nta模式,用於共享主機的ip位址並重新啟動電腦 4 安裝cad如果安裝不成功,安裝路徑資料夾名稱可以修改為英文 5 虛擬機器安裝win10非常卡,將虛擬機器執行記憶體調大,由1gb調整為4gb 6 ...