iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0

到目前為止,我們講過了該怎麼「暴力」枚舉問題、教過了該遞迴實作上的技巧。

不過在遇到某些問題時,你是否曾想過:「感覺只要我每個步驟都採用最佳的策略,好像就能得到最好的結果了?」

例如今天超市多項商品同時推行特價活動,你在有一個固定的預算的情況下,想買到盡可能多的商品,此時你的策略可能會是先購買單價最低的商品,直到該商品購買完畢或預算用完,然後再考慮下一個單價較低的商品。透過這種方式,你每一步都在做當下看起來最合算的選擇,以期最大化購買的商品數量。

這樣的策略看起來很貪心,因此有些演算法若含有與上面例子類似的「貪心」的精神,那它就是一種「貪心演算法」

貪心演算法

貪心算法(英文:greedy algorithm)就是用電腦來模擬一個「貪心」的人怎麼做決定。這個人超級貪心,每做一步都是按照某種標準挑最好的選項。但他只看到眼前,不會想到後面會發生什麼事。

顯然,用貪心法不一定每次都能找到最佳解。所以一般用這種方法的時候,都要確定能證明它是對的。

貪心算法在有「最佳子結構」的問題上特別有用。這個「最佳子結構」就是說,問題可以拆成小問題來解,而這些小問題的最佳解可以用來找出整個問題的最佳解。


上一篇
Day 17 遞獄樂 其二
下一篇
Day 19 無謀的貪心 其二
系列文
CS補完計畫—演算法與資料結構的第三次衝擊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言