問題描述:
假設給定n個任務的集合t,每個任務i有啟動時間si和完成時間fi(si問題分析:
要求:在最少的機器上安排完所有任務。
如何選擇貪心策略才能使問題的解為最優解?顯然,開始時間最早的任務需要被先執行,但是最優解要求我們使用的機器最少,因此我們每次選擇時應盡量使用相同的機器。若已使用過的機器上現處於空閒狀態,則應將待執行任務放到該機器上執行。若無空閒機器,則再使用新機器。
**示例o(n^2):
#include
#include
using
namespace std;
struct threadtrd[
1001];
bool
cmp(thread x, thread y)
intmain()
sort
(trd, trd+n, cmp)
; k[ki++
]= trd[0]
.e; rcd[0]
= ki;
for(
int i =
1, t =-1
; i < n; i++)}
if(t !=-1
)else
}for
(int i =
0; i < n; i++
) cout <<
"\n"
<< ki;
return0;
}
最優解證明:
設在上述策略下最後一台選擇的機器為第k臺,i為第乙個在k上執行的任務。則1到k-1臺機器上都有任務正在執行,即i與前1到k-1個任務相衝突,並且1到k-1臺機器上執行的任務之間也是相互衝突的。因此任務集合t中至少有k個任務之間相互衝突,若使用k-1臺機器,則無法同時安排它們執行,因此最少使用k臺機器。
參考文獻《演算法設計與應用》
問題 A 任務排程
題目描述 讀入任務排程序列,輸出n個任務適合的一種排程方式。輸入輸入包含多組測試資料。每組第一行輸入乙個整數n n 100000 表示有n個任務。接下來n行,每行第乙個表示前序任務,括號中的任務為若干個後序任務,表示只有在前序任務完成的情況下,後序任務才能開始。若後序為null則表示無後繼任務。輸出...
任務排程問題
乙個單位時間任務是恰好需要乙個單位時間完成的任務。給定乙個單位時間任務的有限集s。關於s 的乙個時間表用於描述s 中單位時間任務的執行次序。時間表中第1 個任務從時間0 開始執行直至時間1 結束,第2 個任務從時間1 開始執行至時間2 結束,第n個任務從時間n 1 開始執行直至時間n結束。具有截止時...
貪心 加工生產排程(雙機排程貪心問題)
時間限制 1 sec 記憶體限制 64 mb 提交 41 解決 21 提交 狀態 討論版 命題人 外部匯入 題目描述 有n個部件需在a b機器上加工,每個工件都必須經過先a後b兩道工序。已知 部件i在a b機器上的加工時間分別為ai,bi。問 如何安排n個工件的加工順序,才能使得總加工時間最短?輸入...