基礎演算法 貪心演算法

2021-09-29 09:54:03 字數 835 閱讀 6953

【概述】

貪心演算法是從問題的初始狀態出發,通過若干次的貪心選擇而得到的最優值的一種求解策略,即貪心策略。

簡單來說,貪心策略是一種在每次決策時採取當前意義下最優策略的演算法,做出的選擇至少在某種約束條件下的區域性最優解或較優解,並不一定是全域性的最優解或較優解,但在某些特定的情況下,可以利用貪心演算法來求得其最優解或較優解。

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

當乙個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質,問題的最優子結構性質是該問題可以用動態規劃或者貪心演算法求解的關鍵特徵。

【一般步驟】

建立數學模型來描述問題;

把求解的問題分成若干個子問題;

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

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

簡單來說,就是根據要求,不斷選擇最大/最小的,直到滿足/不滿足條件為止

2.部分揹包問題

問題:n 個物品,第 i 個物品重量為 wi,價值為 vi,

在總重量不超過 c 的情況下讓總價值盡量高,每乙個物品可以取走一部分,

價值與重量按比例計算

貪心策略:本質上在最優選擇問題的基礎上加了價值項,

不能僅考慮重量因素或價值因素,應該綜合考慮兩個因素,

即優先選擇價值和重量比值最大的,

直到重量和為 c,需要注意的是,

由於每個物品只能選擇一部分,

因此一定可以讓總重量恰好為 c,而且除了最後乙個物品以外,

其他物品要麼不選要麼全選

演算法基礎 貪心演算法

貪心演算法是常見的基礎演算法,它在求解問題時總想用當前看來最好的方法去實現,而到了下一步,再用下一步時最好的方法來解決,因此有了貪心的名字。此方法不從整體去考慮,僅是在某種意義上的區域性最優求解。雖然貪心演算法不是對所有的問題都能得到整體最優解,但是面對範圍相當廣泛的很多問題時,能產生整體最優解或是...

演算法基礎 貪心演算法

1.演算法思想 假設乙個問題比較複雜,暫時找不到全域性最優解,那麼我們可以考慮把原問題拆成幾個小問題 分而治之思想 分別求每個小問題的最優解,再把這些 區域性最優解 疊起來,就 當作 整個問題的最優解了。2.基本步驟 3.前提條件 4.問題分類 按序列任務分 按子任務來分解,即每一步都是在前一步的基...

演算法 貪心演算法

把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...