轉載請注明出處:http://www.cnblogs.com/StartoverX/p/4611544.html
貪心算法在每一步都做出當時看起來最佳的選擇。也就是說,它總是做出局部最優的選擇,寄希望(證明)這樣的選擇能夠導致全局最優解。
貪心算法和動態規划都依賴於最優子結構,也就是一個問題的最優解包含其子問題的最優解。不同的是,動態規划通常需要求解每一個子問題,通過對所有子問題的求解得到最終問題的解。而貪心算法寄希望於通過貪心選擇來改進最優子結構,使得每次選擇后只留下一個子問題,大大簡化了問題的求解過程。所以能夠使用貪心算法的問題都包含着一些特殊的條件,需要細心發覺。貪心算法和動態規划的關系使得我們能夠得出,在每個貪心算法之下,幾乎總有一個更繁瑣的動態規划算法。
貪心算法的步驟:
1.將最優化問題轉化為這樣的形式:對其做出一次選擇后,只剩下一個子問題需要求解。
2.證明做出貪心選擇后,原問題總是存在最優解,即貪心選擇總是安全的。
3.證明做出貪心選擇后,剩余的子問題滿足性質:其最優解與貪心選擇的組合即可得到原問題的最優解,這樣就得到了最優子結構。
舉例:leetcode Jump Game:http://www.cnblogs.com/StartoverX/p/4611518.html