什麼是貪婪演算法

在每個階段選擇當下看起來最好的一個選項、且事後不再檢討,以此組成解的演算法設計方法。快速又單純,但只有在問題具有特殊性質時才能得到最佳解,例如像日本硬幣這樣的硬幣組合,或求最小生成樹的 Kruskal 演算法。

日文名稱: 貪欲法

「貪婪演算法」出現在1領域的2道練習題中(資料結構與演算法等)。

這個名詞所屬的領域: 資料結構與演算法

練習貪婪演算法的題目

以1圓、4圓、6圓3種硬幣支付8圓。以從大硬幣開始盡量使用的貪婪演算法決定時的枚數,與最少枚數的關係,下列何者正確?

  1. A貪婪演算法也能得到最少的2枚
  2. B貪婪演算法為3枚,無法得到最少的2枚
  3. C貪婪演算法為3枚,這就是最少枚數
查看答案與解析

正確答案:B. 貪婪演算法為3枚,無法得到最少的2枚

貪婪演算法先使用1枚6圓,剩下的2圓以2枚1圓支付,共3枚。但若使用2枚4圓,只需2枚。如此可見,貪婪演算法只是累積當下看起來最好的選擇,視硬幣的組合而定,可能不是最佳解。以動態規劃從小金額開始依序建立「支付0圓到8圓各金額所需的最少枚數」的表,就一定能求出最少枚數。另外,像日本硬幣1、5、10、50、100、500圓這樣的組合,貪婪演算法總能得到最少枚數。

解析中的「貪婪演算法」

出現「貪婪演算法」的題目(2題)

  1. 以1圓、4圓、6圓3種硬幣支付8圓。以從大硬幣開始盡量使用的貪婪演算法決定時的枚數,與最少枚數的關係,下列何者正確?
  2. 從(重量, 價值)為 (2, 3)、(3, 4)、(4, 5)、(5, 6) 的4件物品中選擇,放入容量為8的背包。每件物品只有1個,且不能分割。在重量合計8以下的條件下,價值合計的最大值為多少?

相關名詞

動態規劃 二元堆積 二元搜尋樹 二分搜尋 佇列 時間複雜度(大O符號) 堆疊 深度優先搜尋 遞迴 廣度優先搜尋

前往名詞解釋列表