回溯批處理作業調度



批處理作業調度

給定n個作業的集合J={J1,J2,…,Jn}。每一個作業有兩項任務分別在兩臺機器上完成。每個作業必須先由機器1處理,再由機器2處理。作業Ji需要機器j的處理時間為tji,i=1,2,…n,j=1,2。對于一個確定的作業調度,設Fji是作業i在機器j上完成處理的時間。則所有作業在機器2上完成處理的時間和f=F21+F22+…+F2n稱為該作業調度的完成時間和。
  批處理作業調度問題要求,對于給定的n個作業,制定最佳的作業調度方案,使其完成時間和最小。
  tji 機器1 機器2
  作業1 2 1
  作業2 3 1
  作業3 2 3
  這3個作業的6種可能的調度方案是1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1;
  它們所相應的完成時間和分別是19,18,20,21,19,19。易見,最佳調度方案是1,3,2,其完成時間和為18。

分析:

首先,題目就很難懂。t代表作業很容易理解,這道題涉及到全排列,若有n個作業,程序中是需要n個作業的全排列形式的,特地溫習了全排列。
  根據全排列出的每一種情況,計算f1和f2。f1是不會閑下來的,處理完第一個作業,接著第二個,第三個。。。。直到最后;f2則不同,當第二個作業在機器一上完成時,并不一定它接著在機器二上加工,可能第一個作業在機器二上耗時特別多,那么作業二還得等作業一完成后,再去到機器二上加工。

#include<stdio.h>
#define n 3   //3個作業
int minTime=10000;    //所有調度中最少的時間 
int sumTime=0;        //某一個調度的時間
int a[n]={0,1,2};         //為n個作業編一個號,便于后期的全排列,a[1]=1意思是:第二個執行的是作業編號為1的作業
int runtime[n][2]={2,1,3,1,2,3};
int besta[n]={0};        //最優的作業編號排列
int f1=0,f2[n]={0};       //分別記錄第一個工作和第二個工作的時間 

void traceback(int t){
    if(t==n){
        if(sumTime<minTime){
            minTime=sumTime;
            for(int i=0;i<n;i++)
                besta[i]=a[i];
        }
        return;
    }
    for(int i=t;i<n;i++){
        int temp=a[t];
        a[t]=a[i];
        a[i]=temp;
        f1+=runtime[a[t]][0];   //第一個工作結束時的時間
        if(t==0)
             f2[t]=f1+runtime[a[t]][1];
        else
            f2[t]=f1>f2[t-1]?(f1+runtime[a[t]][1]):(f2[t-1]+runtime[a[t]][1]);
        sumTime+=f2[t];
        if(sumTime<minTime)
            traceback(t+1);
        sumTime-=f2[t];
        f1-=runtime[a[t]][0]; 
        temp=a[t];
        a[t]=a[i];
        a[i]=temp;   
    } 
}
int main(){
    
    putchar('\n');
    traceback(0);  //t代表第幾個執行的作業
    printf("最少時間:%d\n",minTime);
    for(int i=0;i<n;i++){
        printf("%d\t",besta[i]+1); 
    }
    return 0;
} 
運行截圖
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 個人學習批處理的初衷來源于實際工作;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復涉及到...
    Luckykailiu閱讀 4,760評論 0 11
  • 我們都還年輕 但 所有的后悔 也于事無補 你頹廢 愛你的人 總是耐心對你說 堅強 別放棄 可是說出來總是那么輕巧 ...
    KAXIU閱讀 273評論 0 2
  • 第五集三仙子 “等等,你剛才說啥來著?”巴迪龍的健忘癥又發作了。 小梔子說:“完整的星星,是希望的開始,聚集四道光...
    小竹筍的天空閱讀 276評論 0 0
  • Introducción Muy pocas relaciones comienzan en formas dif...
    熊小jiu閱讀 1,735評論 0 0