Greedy

貪婪演算法

  • 每次只考慮目前最佳的選擇,而且之前選擇的解答不會影響到後面,不斷選取局部的最佳解,合併之後當成解答。
  • 步驟:
    1. 定義貪婪準則,找出小問題的最佳解
    2. 合併所有解成為整體最佳解
  • 不是所有的問題都適用,最好能夠證明貪婪準則可以獲得最佳解

一些成功和失敗的例子

在一條直線上給定 n 個線段的起點和終點 (a, b),問最多能取出多少互不重疊的線段?

有下面幾種貪婪準則:

  1. 將線段從短排到長,每次都選最短的,重疊就不選(下同)
  2. 將線段以起點排序,每次選起點最左邊的
  3. 將線段從起點排序,每次選起點最右邊的

背包問題

JIZZ 有一個背包,背包沒有容量限制,只有重量限制。現在有很多個物品,每個物品都有一個價值和重量,問背包能裝的最大價值是多少?

  1. 物品都可以切割
  2. 物品不能切割
  3. 有無限多個物品可以拿

Exercises

TIOJ

  • 1072 (誰先晚餐)
  • 1440 (誰買早餐)
  • 1861 (priority queue)
  • 1432 (二分搜)
  • 1465 (二分搜)

Uva

  • 11269
  • 10954
  • 1605
  • 311

Greedy

By hfy880916

Greedy

  • 363