任務安排問題

2022-02-01 10:41:26 字數 1465 閱讀 5544

問題描述

活動的定義

輸入:s=,f=,n ≤ i ≤ 1

輸出:s的最大相容集合

演算法描述

1. 確定貪心思想

為了可以使得更多的相容活動被包含,每次選fi最小的活動,使得我們能夠選擇更多的活動。

2. 分析貪心選擇性

引理1:設:s=是n個活動的集合,[s,fi]是活動i的起始終止時間,且f1≤f2≤….≤fn,那麼,s的任務安排問題的某個優化解包括活動1.

證明:設a是乙個優化解,按結束時間排序a中活動, 設其第乙個活動為k,第二個活動為j.

3.分析優化子結構

引理2:設:s=是n個活動集合,[si,fi]是活動i的起始終止時間,且f1≤f2≤….≤fn ,設a是s的任務安排問題的乙個優化解且包括活動1,a'=a- 是s'=的排程問題的優化解.

證明:顯然,a'是相容的,僅僅需要證明a'是s'任務安排問題的解決方案中最大的解就可以。

如若不然,則存在乙個s'任務安排問題的最優解b',而s'中的所有活動均與活動1進行相容,那麼可以構造b =ub',而b是s問題的解,且|b|>|a|,那麼a就不是s問題的最優解,矛盾。故而a』是s『任務安排問題的解決方案中最大解。

4.分析演算法正確性

設:s= 是 n 個活動集合,f0 = 0, li是 si = 中具有最小結束時間的活動.設a是s的包含活動1的優化解, 其中 f1≤ …≤fn ,a = u(i=1 : k) 。

證明:

5.設計演算法

根據貪心思想設計演算法。

設f1≤f2≤….≤fn已排序)

greedy-activity-selector(s, f)

n = lenyth(s);

a =

j = 1

for i=2 to n do

if si >= fj

then a = a∪;

j = i;

return a

6.演算法複雜性分析:

時間複雜性:

如果結束時間已經排序,那麼t(n) = o(n)

如果結束時間已經排序,那麼t(n) = o(n) + o(nlogn) = o(nlogn)

任務安排問題 貪心

今天ckp打算去約會。大家都知道ckp是超級大帥哥,所以和他約會的mm也超級多,她們每個人都和ckp訂了乙個約會時間。但是今天ckp剛打算出門的時候才發現,某幾個mm的約會時間有衝突。由於ckp不會分身,還不能和多個mm同時約會,他只能忍痛割愛拒絕掉某些mm。但是ckp這個花心大蘿蔔還是不死心,他想...

任務安排問題 貪心 樸實思路

問題描述 有n個任務1 n。假設 同乙個時間單位你只能處理一項任務 任務i只能在時刻 ri 後開始處理。r1,rn是給定的 任務i需要 pi個時間單位才能完成。p1,pn是給定的 乙個任務可分成多次處理 可停下來等之後繼續處理 設計方案使得 ti最小,ti為任務i被完成的時刻。例 吐槽 這個題的要求...

任務安排 jobs

題目 任務安排 jobs.c cpp pas in out 時限 每個測試點2 秒 問題描述 小y 最近遇到了乙個棘手的問題。她有兩項任務需要完成,其中第一項任務是重複操作1 op1 s1 次,第二項任務是重複操作2 op2 s2 次。為了完成這些任務,小 y 僱傭了n 名工人。其中,第i 個工人完...