程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 多機調度問題(C語言實現)——貪心算法應用(4)

多機調度問題(C語言實現)——貪心算法應用(4)

編輯:關於C語言

問題描述:
               設有n個獨立的作業,由m台相同的機器進行加工處理。作業i所需的處理時間為t[i]。
               任何作業可以在任何一台機器上面加工處理,但未完工之前不允許中斷處理。任何作業不能   拆分成更小的  作業。
               要求給出一種作業調度方案,使所給的n個作業在盡可能短的時間內由m台機器加工處理完成。


算法分析:
               采用最長處理時間作業優先的貪心選擇策略,可以設計出解多機調度問題較好的近似算法。
               分n<=m(作業數小於機器數),n>m(作業數大於機器數)求解。
               假定有7個獨立作業,所需處理時間分別為{2,14,4,16,6,5,3},由三台機器M1,M2,M3加工。按照貪心算法產生的作業調度如下圖所示,所需總加工時間為17.
                            

 \

[cpp]
#include<stdio.h>  
 
#define N 7 //作業數  
#define M 3 //機器數   
 
int s[M] = {0,0,0};//每台機器當前已分配的作業總耗時   
int main(void)  

    int time[N] = {16,14,6,5,4,3,2};//處理時間按從大到小排序   
    int maxtime = 0; 
    if(M >= N) 
    { 
         maxtime = setwork1(time,N); 
    } 
    else 
    { 
         maxtime = setwork2(time,N);  
    }  
     
    printf("最多耗費時間%d。",maxtime); 
    system("PAUSE"); 

 
 
//機器數大於待分配作業數  
int setwork1(int t[],int n) 

  int i; 
  for(i=0;i<n;i++) 
  { 
     s[i] = t[i]; 
  } 
  int ma = max(s,N); 
  return ma; 

 
//機器數小於待分配作業數   
int setwork2(int t[],int n) 

    int i; 
    int mi = 0; 
    for(i=0;i<n;i++) 
    { 
      mi = min(M); 
      printf("%d,時間和最小的機器號為%d.時間和為%d:\n",i,mi,s[mi]); 
      s[mi] = s[mi]+t[i]; 
     
    } 
    int ma = max(s,M); 
    return ma; 

 
//求出目前處理作業的時間和 最小的機器號  
int min(int m) 

    int min = 0; 
    int i; 
    for(i=1;i<m;i++) 
    { 
        if(s[min] > s[i]) 
        { 
           min = i; 
        } 
    } 
    return min; 
     

//求最終結果(最長處理時間)  
int max(int s[],int num) 

    int max = s[0]; 
    int i; 
    for(i=1;i<num;i++) 
    { 
        if(max < s[i]) 
        { 
           max = s[i]; 
        } 
    } 
     
    return max; 
 
}  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved