關於貪心演算法

2021-07-06 09:01:29 字數 675 閱讀 2979

關於貪心演算法,有個問題乙個讓我很糾結:貪心演算法並不能保證得到原問題的最優解。

但又要求同時具有貪心選擇性質和最優子結構性質的問題才能用貪心演算法來解,可是一旦乙個問題具有這兩個性質,得到的解就是最優解。然後,我就不明白了,為什麼「貪心演算法並不能保證得到原問題的最優解」。今天終於在另外一本書上看到了相關的說明。

《演算法設計與分析》 張軍等  清華大學出版社

「那麼對於什麼樣的問題,貪心演算法才能保證得到問題的全域性最優解呢?只有當待求解問題同時具有最優子結構性質和貪心選擇性質時,演算法才能保證總能找到全域性最優解,因此如果需要保證演算法的正確性,就應該對乙個待求解問題的兩個性質進行證明。」

1.  最優子結構性質

如果問題的乙個最優解包含其子問題的最優解,那麼就說該問題具有最優子結構性質。由於貪心演算法每一步總是著眼於當前看似最佳的選擇,將當前問題規約為更小的子問題。因此要求問題必須具有最優子結構。

2.   如果問題的乙個全域性最優解能夠通過一系列根據某個貪心策略決定的區域性最優選擇來達到,那麼就說明該問題具有貪心選擇性質。即使乙個問題具有最優子結構性質,若不滿足貪心選擇性質,也不能保證能夠通過貪心選擇得到問題的全域性最優解。如0-1揹包問題就是乙個具有最優子結構性質的問題,但是使用每次將單位重量價值最大的物品放入揹包的貪心選擇策略並不能保證最終得到的解釋問題的全域性最優解。(多機排程和找硬幣問題也不能得到最優解,對許多經典的組合優化問題能夠得到最優解)

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

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

貪心演算法幾個經典例子 關於貪心演算法,你該了解這些!

回溯結束,貪心正式開始,你準備好了麼?貪心的本質是選擇每一階段的區域性最優,從而達到全域性最優 這麼說有點抽象,來舉乙個例子 例如,有一堆鈔票,你可以拿走十張,如果想達到最大的金額,你要怎麼拿?指定每次拿最大的,最終結果就是拿走最大數額的錢。每次拿最大的就是區域性最優,最後拿走最大數額的錢就是推出全...

演算法 貪心演算法

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