貪心 任務排程問題

2021-09-28 00:26:55 字數 939 閱讀 4382

問題描述:

假設給定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個工件的加工順序,才能使得總加工時間最短?輸入...