【問題】
設有n個獨立的作業{1,2,3,...,n},由m台相同的機器進行加工處理。作業i所需的處理時間為ti。現約定,任何作業可以在任何一台機器上加工處理,但未完工前不允許中斷處理。任何作業不能拆分成更小的子作業。多機調度問題要求給出一種作業調度方案,使所給的n個作業在盡可能短的時間內由m台機器加工處理完成。
【算法分析】
這個問題是一個NP完全問題,到目前為止還沒有有效的解法。對於這一類問題,用貪心選擇策略有時可以設計出較好的近似算法。
采用最長處理時間作業優先的貪心選擇策略可以設計出解多機調度問題的較好的近似算法。按此策略,當n≤m時,只要將機器i的[0,ti]時間區間分配給作業i即可。當n>m時,首先將n個作業依其所需的處理時間從大到小排序。然后依此順序將作業分配給空閑的處理機。
【代碼】
【時間復雜度】
當n≤m時,算法Greedy需要O(1)時間。
當n>m時,排序耗時O(nlogn)。初始化堆需要O(m)時間。關於堆的DeleteMin和Insert運算共耗時O(nlogm),因此算法Greedy所需的計算時間為
O(nlogn+nlogm)=O(nlogn)
