貪婪演算法(Greedy Algorithm) 又稱作貪心法,簡單來說,此演算法是在每一個步驟使用貪心原則,只考慮當前情況的前提下選擇最優解法。其精神在於「只做眼前的最佳解」,它將需求解的問題分解成許多子問題,並且在解決一個個子問題時皆選用當下的最佳解法,並非考慮到全局。所以即使貪婪演算法的宗旨在透過這樣的解決方式,使整個問題能尋求最好的解法。但往往因為未顧及全局只選擇當下最優解,未必在各類型問題上會使最後求得的解法是最好的。貪婪法這樣一步步解決子問題的解法只能在部分求滿足約束條件的問題上較為可行,例如:找零錢問題。以下將進行找零錢問題的範例說明:
範例說明
在日常生活中我們時常會遇到找零錢問題,當我們是情境中的店員並發生以下這種情況時,我們往往會選擇找一個50元、一個10元、一個5元和一個1元,並非找給客人66個1元。
像是這樣的情況套用在程式上,就是因為我們使用了「貪婪演算法」,所以一剛開始根據66元這種數字,我們會先按照50元、10元、5元和1元這種面額升序的前提來找錢給客人,這樣的思維邏輯就是貪婪演算法喔!
優點:
缺點:
參考資料: