代码如下:
#include<stdio.h>
#include<stdlib.h>
int compare(void* a, void* b)//比较函数,用于qsort按处理时间从大到小排序
{
return *(int*)a - *(int*)b;
}
int LPT(int jobs[], int n, int m)//多机调度问题的LPT算法
{
qsort(jobs, n, sizeof(int), compare);//按处理时间从大到小排序作业
int* jobtime = (int*)calloc(m, sizeof(int));//初始化每台机器的处理时间为0
for (int i = 0; i < n; i++)//依次将作业分配给当前处理时间最短的机器
{
int minIndex = 0;
for (int j = 1; j < m; j++)
{
if (jobtime[j] < jobtime[minIndex])
{
minIndex = j;
}
}
jobtime[minIndex] = jobtime[minIndex] + jobs[i];//找到当前处理时间最短的机器,将该作业分配给这台机器,并更新其处理时间。
}
int maxtime = jobtime[0];
for (int i = 1; i < m; i++)//找出最大的处理时间
{
if (jobtime[i] > maxtime)
{
maxtime = jobtime[i];
}
}
free(jobtime);
return maxtime;
}
int main()
{
int jobs[] = { 2, 3, 5, 7, 4, 6 };
int n = sizeof(jobs) / sizeof(jobs[0]);
int m = 3;
int result = LPT(jobs, n, m);
printf("完成所有作业的最短时间是: %d\n", result);
return 0;
}
calloc函数:
用于动态内存分配的标准库函数,位于 <stdlib.h>
头文件中。
函数原型:void *calloc(size_t nmemb, size_t size);