貪心算法之 活動安排

活動安排問題 – 資源爭奪

  • 問題描述
    • 設有 n 個活動的集合 A = {1, 2, … , n}, 其中每個活動都要求使用同一資源,而在同一時間段內只有一個活動能使用資源
    • 要求高效安排一系列爭用公共資源的活動
  • 問題本質
    • 在所給活動活動集合中選出最大相容活動子集 X
  • 實例: 多個部門申請佔用一個資源
部門 物理 數學 化學 外語 生物 音樂 計算機
起始時間 8 9 11 7 10 6 8
結束時間 9 10 12 10 12 8 11
  1. 問題描述

    • 輸入: n(問題規模), s[i](開始時間),f[i](終止時間)
    • 輸出: count(存放活動總數), x[n](邏輯數組:活動被安排爲 1,未被安排爲 0)
    • 策略
      • s[i] (起始時間) ×
      • Δt (活動時間) ×
      • f[i] (結束時間)√

      顯然s[i] 和 Δt 不能作爲衡量標準,而f[i] 可以作爲衡量標準

  2. 算法實現

    • 預處理: f[i] 非遞減序列
    • 貪心選擇
      • 最早完成的活動優先加入相容集合 x

    使剩餘活動可安排時間段極大化,相容活動集最大
    s[i] >= f[j] or s[j] >= f[i]

  3. 設計分析

    • 若輸入的活動已就序
      • 算法實現最大相容集時間: O(n)
    • 若給出的活動爲就序
      • 重排: O(nlogn), 求最大相容集: O(n)
      • T(n) = O(nlogn) + O(n) = O(nlogn)
    • 算法中的3個數組和4個普通變量佔用存儲空間
      • S(n) = O(3n) + O(4) = O(n)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章