贪心法 多机调度问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//多机调度问题
/*
贪心法求解多级调度问题的贪心策略师最长处理时间的作业优先,即把处理时间最长的作业分配给最先空闲的机器,这样就可以保证处理时间长的
作业优先处理,从而在整体上获得尽可能短的时间。按照最长处理时间作业优先的贪心测落,当m>n,时,只要将机器ide [0,ti)时间去见分配给作业j即可,
当m 算法伪代码 将数组t[n]从大到小排序,对应的作业序号存储在数组p[n]中; 将数组d[m]初始化为零 3:for(i0;i<=m;i++) 3.1:s[i]={p[i]}:将m个作业分配给m个机器 3.2 d[i]=t[i]; for(i=m+1;i<=n;i++) 4.1 j=数组d[m]中最小值对应的下标;//j为最先空闲的机器序号 4.2 s[j]=s[j]+{p[i]};//将作业分配给最先空闲的的机器j 4.3 d[j]=d[j]+d[t];//机器j将在d[j]后空闲 */ #include using namespace std; void lowsort(int *t,int *p,int n)//将数组t[n]按从小到大的顺序排序,相应的任务编号数组p[n]也要随之改变 { int index; for(int i=0;i { index=i; for(int j=i+1;j { if(t[index] index=j; } if(index!=i) { int temp; temp=t[index]; t[index]=t[i]; t[i]=temp; temp=p[i]; p[i]=p[index]; p[index]=temp; } } int find(int *d,int m) { int min=d[0]; int k; for(int i=0;i { if(d[i] { min=d[i]; k=i; } } return k; } void ajust(int *t,int *d,int *p,int *s,int n,int m) { lowsort(t,p,n); for(int i=0;i { d[m]=0; } for(i=0;i { s[i]=p[i]; cout<<"机器"< d[i]=t[i]; } for(i=m;i { int j=find(d,m);//查找数组d[m]中最小值对应的下标 s[j]=s[j]+p[i]; cout<<"机器"< d[j]=d[j]+t[i]; } } void main() int n,m; cout<<"输入任务数量"< cin>>n; cout<<"输入机器个数"< cin>>m; int *t=new int [n]; int *s=new int [n]; int *d=new int [m]; int *p=new int[n]; cout<<"输入任务编号"< for(int k=0;k cin>>p[k]; cout<<"每件任务所花费的时间"< for(int i=0;i cin>>t[i]; ajust(t,d,p,s,n,m); }