貪心演算法是一種在每一步選擇中都採取在當前狀態下最好或最優(即最有
利)的選擇,從而希望導致結果是全域性最好或最優的演算法。
貪心演算法與動態規劃的不同在於它對每個子問題的解決方案都做出選擇,不能回退。動態規劃則會儲存以前的運算結果,並根據以前的結果對當前進行選擇,有回退功能。
貪心法可以解決一些最優化問題,如:求圖中的最小生成樹、求哈夫曼編碼
等。然而對於工程和生活中的問題,貪心法一般不能得到我們所要求的答
案。一旦乙個問題可以通過貪心法來解決,那麼貪心法一般是解決這個問題的最好辦法。由於貪心法的高效性以及其所求得的答案比較接近最優結果,貪心法也可以用作輔助演算法或者直接解決一些要求結果不特別精確的問題。
coin change 特別版本:
當硬幣可選集合固定:coins = [20, 10, 5, 1](注:整除關係)
求最少可以幾個硬幣拼出總數。 比如 total = 36
非整除關係的硬幣,可選集合:coins = [10, 9, 1],求拼出總數為 18 最少需要幾個硬幣?
適用貪心演算法的場景
簡單地說,問題能夠分解成子問題來解決,子問題的最優解能遞推到最終
問題的最優解。這種子問題最優解稱為最優子結構。
貪心演算法與動態規劃的不同在於它對每個子問題的解決方案都做出選擇,
不能回退。動態規劃則會儲存以前的運算結果,並根據以前的結果對當前
進行選擇,有回退功能。
第16章 貪心演算法
求解最優化問題的演算法通常需要經過一系列的步驟,在每個步驟都面臨多重選擇,動態規劃演算法是通過比較這麼多選擇來得到乙個最優的選擇,而貪心演算法不用比較而是直接選出當時看起來最佳的選擇,通過做出區域性最優的選擇來得到全域性最優解。設計貪心演算法有如下三個步驟 證明貪心選擇是最優解的一部分 證明做出貪心...
演算法課筆記系列(二) 貪心演算法
貪心演算法就是一種非常直觀的演算法,對於乙個問題,只關心它目前最優的解決方案,不考慮未來的發展。但往往,這種只考慮現在的演算法就是最優的演算法。第一步將問題分為可分的一步一步,第二步對每一步進行當前的最優計算,第三部將得到的結果最優,往往是得到的全域性最優的結果。下面還是通過課上講解的幾個例子來深入...
經典貪心演算法 貪心演算法概述
貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...