1. 程式人生 > >獨立任務最優排程(動態規劃)

獨立任務最優排程(動態規劃)

題目:

用兩臺處理機AB處理n個作業。設AB處理第k個作業的時間分別為akbk。由於各個作業的特點和機器效能的關係,對某些作業,在A上的處理時間長;而對另一些作業,在B上的處理時間更長。一臺處理機在某個時刻只能處理一個作業,而且作業處理是不可中斷的,每個作業只能被處理一次。現在要找出一個最優排程方案,使得n個作業被這兩臺處理機處理完畢的時間和最少。


演算法思路:

當完成k個作業時,設機器A花費了x時間,機器B花費時間的最小值肯定是x的一個函式。設F[k,x]表示完成k個作業且機器A花費x時間的條件下機器B所花費時間的最小值,那麼F[k,x]=min{F[k1,x]+bk,F[

k1,xak]}。其中F[k1,x]+bk表示第k個作業由機器B來處理,完成前k1個作業時機器A所花費的時間還是x。而F[k1,xak]表示第k個作業由機器A來處理,此時完成前k1個作業機器A花費的時間是xak

    根據F的定義,我們知道F[n,x]表示完成n個作業且機器A花費x時間的條件下機器B所花費時間的最小值。顯然,0xk=0nak,所以對於xi(區間[0,k=0nak]內的任一整數),總有一個F[n,xi]與其對應,那麼min{max{xi,F[n,xi]}}就是最後的結果。由於要處理每個作業k,並且處理每個作業k的時候都要迴圈j=0kaj次,所以演算法的時間複雜度為O

(nk=0nak)

    考慮以下包含6個作業的例子,其中ak={2,5,7,10,5,2},而bk={3,8,4,11,3,4}。下面對前兩個作業進行簡單的分析。

作業1 作業2 作業3 作業4 作業5 作業6
處理機A 2 5 7 10 5 2
處理機B 3 8 4 11 3 4
(1)對於第一個作業,機器A所花費時間x的取值範圍是0xa1。當x<0時,設F[1,x]=x=0時,F[1,0]=3,此時max(0,F[1,0])=3,即機器A花費0時間,機器B花費3時間;x=1時,F[1,1]=3max
(1,F[1,1])=3
x=2時,F[1,2]=0max(2,F[1,2]