C语言多机调度问题---贪心算法
时间: 2023-11-04 18:07:19 浏览: 267
C语言多机调度问题是指将n个作业分配给m台机器,使得完成所有作业的时间最短。这是一个经典的贪心算法问题。在这个问题中,我们需要将n个作业分配给m台机器,使得每台机器的工作时间尽可能平均,从而使得完成所有作业的时间最短。具体实现可以使用两种方法:机器数大于待分配作业数和机器数小于待分配作业数。前者可以直接将每个作业分配给一台机器,后者则需要使用贪心算法,将每个作业分配给当前工作时间最短的机器。
代码实现如下(C语言):
```
#include <stdio.h>
#define N 8 //作业数
#define M 5 //机器数
int s[M] = {0,0,0};//每台机器当前已分配的作业总耗时
int main(void) {
int time[N] = {17,15,11,9,8,5,4,2};//处理时间按从大到小排序
int maxtime = 0;
if(M >= N) {
maxtime = setwork1(time,N);
} else {
maxtime = setwork2(time,N);
}
printf("最多耗费时间%d。",maxtime);
}
//机器数大于待分配作业数
int setwork1(int t[],int n) {
int i;
for(i=0;i<n;i++) {
s[i] = t[i];
}
int ma = max(s,N);
return ma;
}
//机器数小于待分配作业数
int setwork2(int t[],int n) {
int i;
int mi = 0;
for(i=0;i<n;i++) {
mi = min(M);
printf("第%d号作业,时间和最小的机器号为%d.时间和为%d:\n",i,mi,s[mi]);
s[mi] = s[mi]+t[i];
}
int ma = max(s,M);
return ma;
}
//求出目前处理作业的时间和最小的机器号
int min(int m) {
int min = 0;
int i;
for(i=1;i<m;i++) {
if(s[min] > s[i]) {
min = i;
}
}
return min;
}
//求最终结果(最长处理时间)
int max(int s[],int num) {
int max = s[0];
int i;
for(i=1;i<num;i++) {
if(max < s[i]) {
max = s[i];
}
}
return max;
}
```
阅读全文