貪婪演算法(英語:greedy algorithm),又稱貪心演算法,是一種在每一步選擇中都採取在當前狀態下最好或最佳(即最有利)的選擇,從而希望導致結果是最好或最佳的演算法。(引用自wikipedia)
情境1:小明有個已經養了三年的小豬撲滿裡面,某天他心血來潮把小豬宰了,想把裡面的零錢(一共29580元
)全部拿去銀行換成鈔票,但是他的皮夾沒辦法放入太多的鈔票,希望銀行可以換給他最少數量的鈔票,因此在兌換的時候必須優先兌換面額最大的鈔票,因此最理想的狀況會是:
用js來實作:
const exchange = (num) => {
const money = [1000, 500, 100, 50, 10, 5, 1];
let point = 0;
const record = [0, 0, 0, 0, 0, 0, 0];
while (num > 0) {
if (num >= money[point]) {
num -= money[point];
record[point]++;
} else {
point++;
}
}
return record;
};
exchange(29580);
//輸出[29, 1, 0, 1, 3, 0, 0]
情境2:潛入珠寶店的小偷帶了一個後背包可以負重20kg,因為空間有限,所以他只能挑選最有價值的寶石裝進背包,讓他可以最大化今晚的獲利,可以看到下表有所有的寶石的價格和庫存,在挑選寶石除了選最貴的之外還要考量到重量的問題,那麼,就開始來選擇要優先帶走那些寶石吧!為了方便計算,所以寶石的重量有灌水一下
本次行動總收益:1000萬x1 + 700萬x1+ 500萬x2 + 100萬x1 = 2800萬
!
像是這類可以利益最大化或是最佳解的的問題很常出現在日常生活中,畢竟大多時候人都是以利益最大化為出發點,思考著該怎麼做才會是最有利的,仔細想想,其實以人類的本性來說,無形之中我們應該用過不少次貪婪演算法了吧!