貪心演算法 Greedy Algorithm

2021-10-24 18:58:53 字數 1271 閱讀 8215

常見應用場景

貪心演算法(英語:greedy algorithm),又稱貪婪演算法,是一種在每一步選擇中都採取在當前狀態下最好或最優(即最有利)的選擇,也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。比如在旅行推銷員問題中,如果旅行員每次都選擇最近的城市,那這就是一種貪心演算法。

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

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

這是貪心演算法可行的第乙個基本要素,也是貪心演算法與動態規劃演算法的主要區別(貪心演算法與動態規劃的不同在於它對每個子問題的解決方案都做出選擇,不能回退。動態規劃則會儲存以前的運算結果,並根據以前的結果對當前進行選擇,有回退功能。)。

貪心選擇是採用從頂向下、以迭代的方法做出相繼選擇,每做一次貪心選擇就將所求問題簡化為乙個規模更小的子問題。

對於乙個具體問題,要確定它是否具有貪心選擇的性質,我們必須證明每一步所作的貪心選擇最終能得到問題的最優解。

通常可以首先證明問題的乙個整體最優解,是從貪心選擇開始的,而且作了貪心選擇後,原問題簡化為乙個規模更小的類似子問題。

然後,用數學歸納法證明,通過每一步貪心選擇,最終可得到問題的乙個整體最優解。

上述過程可以簡化為:1、建立數學模型來描述問題。

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

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

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

實現該演算法的過程:

從問題的某一初始解出發;while 能朝給定總目標前進一步 do,求出可行解的乙個解元素;

最後,由所有解元素組合成問題的乙個可行解。

1、區間排程問題

2、揹包問題

如上最終的結果並不是最優解,在這個案例中貪婪演算法並無法得出最優解,只能得到近似最優解,也算是該演算法的侷限性之一。

該類問題中需要得到全域性最優解的話可以採取動態規劃演算法。

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...

演算法 貪心演算法

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

演算法 貪心演算法

集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...