演算法設計與分析之貪心法

2021-10-11 05:23:34 字數 2586 閱讀 2051

貪心法總是做出在當前看來最好的選擇,一旦做出了選擇,不管將來有什麼結果,這個選擇都不會改變。也就是說貪心法並不從整體最優考慮,它所作出的選擇只是在某種意義上的區域性最優選擇。當然,希望貪心法得到的最終結果也是整體最優的。雖然貪心法不能對所有問題都得到整體最優解,但對許多問題它能產生整體最優解。

幾點說明:

1、問題的求解過程看作是一系列選擇,每次選擇乙個輸入,每次選擇都是當前狀態下的最好選擇(區域性最優解)。每做一次選擇後,所求問題會簡化為乙個規模更小的子問題。從而通過每一步的最優解逐步達到整體的最優解。

2、貪心法也是乙個多階段決策方法。每一步選擇都能構成問題的乙個可行解,同時使目標函式的值增加最快(求max)或增加最慢(求min),這種選擇過程是以某些量度標準(貪心選擇策略)為根據,而量度標準有時可以是目標函式本身,也可以是別的量度。

3、量度標準的選擇是貪心法的關鍵。

貪心法的基本要素是貪心選擇性質和最優子結構性質。乙個問題可用貪心法求得整體最優解,需要證明問題的貪心選擇性和最優子結構性質!

下面分別對貪心法的這兩個基本要素進行介紹:

1、貪心選擇性

所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列區域性最優的選擇,即貪心選擇來達到。

注意點

1、貪心選擇性是貪心演算法可行的第乙個基本要素。

2、貪心選擇性是貪心演算法與動態規劃演算法的主要區別。動態規劃法:先求解出相關子問題的解,再做出選擇;貪心法:先做出區域性選擇,再求解出由該選擇產生的相應子問題的解。動態規劃法通常以自底向上的方式解各子問題,而貪心法則通常以自頂向下的方式進行,以迭代的方式作出相繼的貪心選擇,每做一次貪心選擇就將所求問題簡化為規模更小的子問題。

簡單的說貪心法與動態規劃法的區別是:

貪心法是按一定順序一定的策略,每一步得到乙個結果傳遞到下一步,自頂向下,一步一步地作出貪心選擇;只能解決通過區域性最優的策略能達到全域性最優的問題;

動態規劃法是根據一定的決策,每一步決策出的不是乙個結果,而只是使問題的規模不斷的縮小。

3、確定乙個問題是否具有貪心選擇性質,需要證明問題的乙個整體最優解是從貪心選擇開始的。

2、最優子結構性質

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

注意點

最優子結構性質是可用動態規劃法或貪心法求解的關鍵特徵。

優點

求解速度快、時間複雜性有較低的階。

缺點

通常需要證明演算法的最優性,即能夠求得問題的最優解。

設計步驟

1、確定求解問題的輸入

貪心法求解的問題往往有n個輸入;

2、選擇量度標準

必須選擇量度標準,以便求得可行解;

3、求可行解,並檢驗是否滿足約束條件

求解可行解的過程,以及可行解本身,必須滿足約束條件;

4、設定目標函式

設定目標函式,以便衡量乙個可行解的"優劣";

設計過程中需要考慮的幾個方面

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

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

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

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

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

注意點

1、貪心法設計的關鍵是貪心策略的選擇(量度標準)。

2、選擇的貪心策略要具有無後向性(即,某狀態以後的過程和不會影響以前的狀態,只與當前狀態或以前的狀態有關)。

貪心法的一般過程

1、活動安排問題

2、揹包問題

3、哈夫曼編碼

4、prim演算法

5、kruskal演算法

知識點總結

1、貪心法的原理是:通過區域性最優來達到全域性最優,採用的是逐步構造最優解的方法。

2、貪心法的基本思路:從問題的某乙個初始解出發逐步逼近給定的目標,每一步都做乙個不可回溯的決策,盡可能地求得最好的解。當達到某演算法中的某一步不需要再繼續前進時,演算法停止。

3、兩大要素:貪心選擇性、最優子結構性質

4、貪心選擇的結果不一定是最優結果,其求解問題的方式是"自頂向下"的。

5、貪心法的最優性需要證明。

結語

演算法分析與設計 王秋芬 1 貪心法

每個階段面臨選擇時,貪心法都做出對眼前情況的最優解,不考慮後續影響。每個階段的決策一旦做出,不可以更改,不能回溯 貪心法是根據貪心策略來逐步構造問題的解,策略不同結果不同 貪心法具有高效性和不穩定性,它可以很快得到解,但不一定是最優解。貪心演算法的好壞關鍵在於貪心策略的選擇 貪心法的基本要素 適合的...

演算法設計與分析入門篇 貪心法3

課程排程 題目內容 有 n 個人,要完成 2 門課程。其中第 i 個人學習一門課程所需要的時間是 ti。每個人同一時刻只能修一門課程,每門課程同一時刻只能被乙個人修,中間不能中斷。問所有人都修完 2 門課程,至少需要多少時間。輸入格式 輸入的第一行包含乙個整數 n 1 n 1000000 接下來的一...

演算法 貪心法

動態規劃在某一步決定優化函式的最大或者最小值時候,需要考慮子問題的優化函式值,從中選出最優的結果。貪心法 也是多不判斷,不考慮子問題的計算結果,根據當時情況採取 只顧眼前的 貪心策略決定取捨,工作量少於動態規劃很多,更具效率 可導致區域性最優化而不是全域性優化 n項活動,使用同乙個禮堂問題 si 和...