經常使用演算法之貪心

2021-09-08 22:28:03 字數 1199 閱讀 9780

一、背景

在軟考的準備中。遇到了演算法。聽過來人收。演算法研究好了就非常easy,研究不好就認為非常難。於是想著對演算法做個總結。由於演算法不只在大題中占有15分,並且在選擇題中相同也會出現。尤其是考複雜度和各種演算法的適用情況,

貪心(目光短淺):就像找男女朋友一樣,不求最好。僅僅求合適(可行解)

二、怎樣知道在某種情況下用貪心是合適的呢?

貪心策略適用的前提是:區域性最優策略能導致產生全域性最優解。

實際上。貪心演算法適用的情況非常少。一般,對乙個問題分析是否適用於貪心演算法,能夠先選擇該問題下的幾個實際資料進行分析,就可做出推斷。

三、貪心演算法實現的基本步驟:

通過乙個候選集合c作為問題的可能解。(終於解均取自於候選集合c)

比如。在找零錢問題中。各種面值的貨幣構成候選集合。

2、解集合(s)

每完畢一次貪心選擇,將乙個解放入s,終於獲得乙個完整解s

檢查解集合s是否構成問題的完整解。

比如,在找零錢問題中。解決函式是已付出的貨幣金額恰好等於應付款。

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

比如,在找零錢問題中,貪心策略就是在候選集合中選擇面值最大的貨幣。

檢查解集合中增加乙個候選物件是否可行。(增加下乙個物件後是不是滿足約束條件)

比如,在找零錢問題中。可行函式是每一步選擇的貨幣和已付出的貨幣相加不超過應付款。 

四、貪心演算法的實現框架

從問題的某一初始解出發;

while (能朝給定總目標前進一步)

由全部解元素組合成問題的乙個可行解;

用c解釋例如以下:

greedy(c)  //c是問題的輸入集合即候選集合  

; //初始解集合為空集

while (not solution(s)) //集合s沒有構成問題的乙個解

; c=c-;

} return s;

}

c 演算法之貪心

一 基本概念 什麼是貪心演算法 貪心演算法 又稱貪婪演算法,greedyalgorithm 是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生...

貪心演算法之prim演算法

演算法思想 首先置s 然後只要s是v的真子集,就做如下的貪心選擇 選擇滿足條件i屬於s,j屬於v s,且edge i j 是最小的邊,就將其頂點j新增到s中,這個過程一直進行到s v時為止,在這個過程中,選取到的所有邊恰好構成g的一顆最小生成樹。include define infinity 500...

ACM演算法之貪心演算法

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