题目:已知有n个独立的作业j1,j2.......,jn由m台相同的机器进行加工处理。作业i所需的处理时间为t1,t2........,ti。现约定,任何作业ji可以在任何一台机器上处理,但未完成钱不允许间断、划分。
试用贪心算法设计一种调度方案,把n项作业分配到m台机器上完成,所需时间T=MAX{Ti}(1<=i<=m),其中Ti为分配给各机器的的处理作业时间之和。
/***************************************************************/
c语言代码如下:
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int b[30],c[50]; //数组b存放机器对应作业时间,数组c存放作业时间数
int x,y; //x为输入机器数,y为输入作业数
int i; //循环变量
printf("请输入机器数和作业数:\n");
scanf("%d%d",&x,&y);
printf("请分别输入作业长度:\n");
for(i=0;i<y;i++)
{
scanf("%d",&c[i]);
}
for(i=0;i<x;i++)
{
b[i]=0;
}
sort(c,c+y);
for(i=0;i<y;i++)
{
b[i%x]+=c[i];
printf("第%d号机器加入作业时间长为%d\n",i%x+1,c[i]);
}
sort(b,b+x);
printf("最短时间为:\n");
printf("%d",b[x-1]);
}
/*******************************************************************************/
运行结果:
分析
贪心算法并不是寻找最优解,只是寻找近似解,就像隔夜的金子不如到手的铜,先找到一个近似的解,然后在考虑最优解