5大常用演算法 貪心法

2022-08-29 10:18:23 字數 1623 閱讀 1619

一、基本概念:

所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。

貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須具備無後效性,即某個狀態以後的過程不會影響以前的狀態,只與當前狀態有關。

所以對所採用的貪心策略一定要仔細分析其是否滿足無後效性。

二、貪心演算法的基本思路:

1.建立數學模型來描述問題。

2.把求解的問題分成若干個子問題。

3.對每一子問題求解,得到子問題的區域性最優解。

4.把子問題的解區域性最優解合成原來解問題的乙個解。

三、貪心演算法適用的問題

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

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

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

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

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

利用可行的決策,求出可行解的乙個解元素;

由所有解元素組合成問題的乙個可行解;

五、貪心策略的選擇

因為用貪心演算法只能通過解區域性最優解的策略來達到全域性最優解,因此,一定要注意判斷問題是否適合採用貪心演算法策略,找到的解是否一定是問題的最優解。

六、例題分析

下面是乙個可以試用貪心演算法解的題目,貪心解的確不錯,可惜不是最優解。

[揹包問題]有乙個揹包,揹包容量是m=150。有7個物品,物品可以分割成任意大小。

要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。

物品 a b c d e f g

重量 35 30 60 50 40 10 25

價值 10 40 30 50 35 40 30

分析:目標函式: ∑pi最大

約束條件是裝入的物品總重量不超過揹包容量:∑wi<=m( m=150)

(1)根據貪心的策略,每次挑選價值最大的物品裝入揹包,得到的結果是否最優?

(2)每次挑選所佔重量最小的物品裝入是否能得到最優解?

(3)每次選取單位重量價值最大的物品,成為解本題的策略。

值得注意的是,貪心演算法並不是完全不可以使用,貪心策略一旦經過證明成立後,它就是一種高效的演算法。

貪心演算法還是很常見的演算法之一,這是由於它簡單易行,構造貪心策略不是很困難。

可惜的是,它需要證明後才能真正運用到題目的演算法中。

一般來說,貪心演算法的證明圍繞著:整個問題的最優解一定由在貪心策略中存在的子問題的最優解得來的。

對於例題中的3種貪心策略,都是無法成立(無法被證明)的,解釋如下:

(1)貪心策略:選取價值最大者。反例:

w=30

物品:a b c

重量:28 12 12

價值:30 20 20

根據策略,首先選取物品a,接下來就無法再選取了,可是,選取b、c則更好。

演算法 貪心法

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

演算法 貪心法

感謝華北電力大學王墨玉老師的ppt 基礎知識 應用條件 最優子結構性質 原問題包含了其子問題的最優解 對於乙個問題可能會有不同的量度標準,選擇其中可以獲得最優解的量度標準是貪心法設計的核心問題 例題活動安排問題 可求得最優解 int greedyselector int s,int f,int a ...

演算法 五大演算法之貪心法

貪心法 greedy algorithm 又稱貪心演算法,是一種在每一步選擇中都採取在當前狀態下最好或最優 即最有利 的選擇,從而希望導致結果是最好或最優的演算法。1.基本概念 貪心演算法與動態規劃的不同在於它每對每個子問題的解決方案都做出選擇,不能回退。動態規劃則會儲存以前的運算結果,並根據以前的...