浅谈贪心算法
什么是貪心算法?
維基百科對其的定義如下:
貪心算法(英語:greedy algorithm),又稱貪婪算法,是一種在每一步選擇中都采取在當前狀態下最好或最優(即最有利)的選擇,從而希望導致結果是最好或最優的算法。
貪心算法在有最優子結構的問題中尤為有效。最優子結構的意思是局部最優解能決定全局最優解。簡單地說,問題能夠分解成子問題來解決,子問題的最優解能遞推到最終問題的最優解。
貪心算法與動態規劃的不同在于它對每個子問題的解決方案都做出選擇,不能回退。動態規劃則會保存以前的運算結果,并根據以前的結果對當前進行選擇,有回退功能。
貪心法可以解決一些最優化問題,如:求圖中的最小生成樹、求哈夫曼編碼……對于其他問題,貪心法一般不能得到我們所要求的答案。一旦一個問題可以通過貪心法來解決,那么貪心法一般是解決這個問題的最好辦法。由于貪心法的高效性以及其所求得的答案比較接近最優結果,貪心法也可以用作輔助算法或者直接解決一些要求結果不特別精確的問題。
某種程度上,貪心算法和動態規劃有一定的相似性都是先分解子問題。但動態規劃實質上是窮舉法,只是會省去重復計算,更像是一種途徑和方法而不是一種特殊算法。而貪心算法每次都選擇局部的最優解,并不考慮這個局部最優選擇對全局的影響,最后產生整體最優解或其近似解。
貪心類問題一般需要設置當前最佳情況和總體最佳情況,并根據當前最佳情況不斷更新最佳情況。即設置xx_now,用于對比記錄當前最佳情況改變前后的情況,再設置一個xx_all,比較當前最佳情況和保存下來的總體最佳情況并再次保存下來。
例題見:
最大子序和
貪心之判斷子序列
貪心算法之檸檬水找零
貪心算法之分發餅干
貪心算法之買賣股票的最佳時機 II
總結
- 上一篇: 如何用PPT编制方案 (4)PPT
- 下一篇: oracle 11.2.0.3.4 ps