版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38151011/article/details/84501495
题目为:
假定有7个独立作业,所需处理时间分别为{2,14,4,16,6,5,3},由三台机器M1,M2,M3加工。按照贪心算法产生的作业调度,求处理机所需要的最短作业时间?
思路:本题目可以分为两种情况进行考虑:
(1)机器数大于作业数:即用作业数数量的机器同时进行工作,而作业时间最长的那个即为处理机所需要的最短作业时间。
(2)机器数小于作业数:用for循环总是找出空闲的机器,然后将机器上的作业时间进行累加,最后累加的时间最长的即为所求处理机所需最短作业时间。
C语言代码实现如下:
//free[100] ={0} 代表处理机空闲的台数
#include <stdio.h>
int main()
{
int t,n,m,tim[10000];
printf("请输入需要执行的数据组数:\n");
scanf("%d",&t);
while(t--)
{
int i,j,free[100]={0},max,k,t,min,p;
printf("请输入作业数和机器数:\n");
scanf("%d%d",&n,&m);
printf("请输入作业执行时间的相关数据:\n");
for(i=0;i<n;i++)
scanf("%d",&tim[i]);
for(i=0;i<n;i++) //对时间进行从大到小的排序(我用的冒泡排序)
{
for(j=i+1;j<n;j++)
{
if(tim[i]<tim[j])
{
t=tim[i];
tim[i]=tim[j];
tim[j]=t;
}
}
p=tim[0];//用于记录最大的那个作业的时间
}
/*for(i=0;i<n;i++)
{
printf("%d ",tim[i]);
}
printf("\n"); */
if(n<=m) //当机器数目大于作业数时,直接输出最大时间,极为所需最少时间
{
printf("所需最少时间为:%d\n",p);
continue;
}
else //机器数目小于作业数时
{
for(i=0;i<n;i++) //思路:总是把任务交给当前最空闲的机器
{
min=free[0];
for(k=0,j=1;j<m;j++)
if(free[j]<min)
{
min=free[j];
k=j;
}
free[k]+=tim[i];
// printf("%d ",free[k]);
}
}
max=free[0];
for(i=1;i<m;i++)
if(free[i]>max)
max=free[i];
printf("所需最少时间为:%d\n",max);
}
return 0;
}