Greedy Algorithm — 貪婪演算法

Joe Chang
Coding Hot Pot
Published in
Dec 15, 2021
photo by @joshappel

貪婪演算法(英語:greedy algorithm),又稱貪心演算法,是一種在每一步選擇中都採取在當前狀態下最好或最佳(即最有利)的選擇,從而希望導致結果是最好或最佳的演算法。(引用自wikipedia)

情境1:小明有個已經養了三年的小豬撲滿裡面,某天他心血來潮把小豬宰了,想把裡面的零錢(一共29580元)全部拿去銀行換成鈔票,但是他的皮夾沒辦法放入太多的鈔票,希望銀行可以換給他最少數量的鈔票,因此在兌換的時候必須優先兌換面額最大的鈔票,因此最理想的狀況會是:

  • 1000元 X 29
  • 500元 X 1
  • 50元 X 1
  • 10元 X3

用js來實作:

情境2:潛入珠寶店的小偷帶了一個後背包可以負重20kg,因為空間有限,所以他只能挑選最有價值的寶石裝進背包,讓他可以最大化今晚的獲利,可以看到下表有所有的寶石的價格和庫存,在挑選寶石除了選最貴的之外還要考量到重量的問題,那麼,就開始來選擇要優先帶走那些寶石吧!

為了方便計算,所以寶石的重量有灌水一下
  1. 先將最貴的一顆鑽石放進背包 (背包剩餘重量14kg)
  2. 接著把一顆紅寶石放進背包(背包剩餘重量9kg)
  3. 藍寶石有2顆我全都要,通通放進背包(背包剩餘重量1kg)
  4. 再放一顆祖母綠就好,可…可惡,居然超重了😢(背包剩餘重量-1kg)
  5. 不甘心的把祖母綠放回去,放進一顆蛋白石(背包剩餘重量0) 大功告成!

本次行動總收益:1000萬x1 + 700萬x1+ 500萬x2 + 100萬x1 = 2800萬!

像是這類可以利益最大化或是最佳解的的問題很常出現在日常生活中,畢竟大多時候人都是以利益最大化為出發點,思考著該怎麼做才會是最有利的,仔細想想,其實以人類的本性來說,無形之中我們應該用過不少次貪婪演算法了吧!😆

--

--

Joe Chang
Coding Hot Pot

前端工程師,唯有非常努力,才能看起來毫不費力