贪心法 多机调度问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

相关文档
最新文档