贪心法 多机调度问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//多机调度问题
/*
贪心法求解多级调度问题的贪心策略师最长处理时间的作业优先,即把处理时间最长的作业分配给最先空闲的机器,这样就可以保证处理时间长的
作业优先处理,从而在整体上获得尽可能短的时间。

按照最长处理时间作业优先的贪心测落,当m>n,时,只要将机器ide [0,ti)时间去见分配给作业j即可,
当m<n时,首先将n个作业从大到小排序,然后依次顺序将作业分配给空闲的处理机
算法伪代码
将数组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<iostream>
using namespace std;
void lowsort(int *t,int *p,int n)//将数组t[n]按从小到大的顺序排序,相应的任务编号数组p[n]也要随之改变
{
int index;
for(int i=0;i<n;i++)
{
index=i;
for(int j=i+1;j<n;j++)
{
if(t[index]<t[j])
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<m;i++)
{
if(d[i]<min)
{
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<m;i++)
{
d[m]=0;
}
for(i=0;i<m;i++)
{
s[i]=p[i];
cout<<"机器"<<i+1<<"做了任务"<<p[i]<<endl;
d[i]=t[i];
}
for(i=m;i<n;i++)
{
int j=find(d,m);//查找数组d[m]中最小值对应的下标
s[j]=s[j]+p[i];
cout<<"机器"<<j+1<<"做了任务"<<p[i]<<endl;
d[j]=d[j]+t[i];
}
}
void main()
int n,m;
cout<<"输入任务数量"<<endl;
cin>>n;
cout<<"输入机器个数"<<endl;
cin>>m;
int *t=new int [n];
int *s=new int [n];
int *d=new int [m];
int *p=new int[n];
cout<<"输入任务编号"<<endl;
for(int k=0;k<n;k++)
cin>>p[k];
cout<<"每件任务所花费的时间"<<endl;
for(int i=0;i<n;i++)
cin>>t[i];
ajust(t,d,p,s,n,m);
}。

相关文档
最新文档