多机调度

n个作业组成的作业集,可由m台相同机器加工处理。要求给出一种作业调度方案,
使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。作业不能拆分成
更小的子作业;每个作业均可在任何一台机器上加工处理。这个问题是NP完全问
题,还没有有效的解法(求最优解),但是可以用贪心选择策略设计出较好的近似
算法(求次优解)。当n<=m时,只要将作业时间区间分配给作业即可;当n>m时,首
先将n个作业从大到小排序,然后依此顺序将作业分配给空闲的处理机。也就是说
从剩下的作业中,选择需要处理时间最长的,然后依次选择处理时间次长的,直到
所有的作业全部处理完毕,或者机器不能再处理其他作业为止。如果我们每次是将
需要处理时间最短的作业分配给空闲的机器,那么可能就会出现其它所有作业都处
理完了只剩所需时间最长的作业在处理的情况,这样势必效率较低。这里没有讨论

n和m的大小关系,因为这两种情况可合并。

#include 
#include 
#include 
using namespace std;



bool cmp(const int &x, const int &y)//引用之间进行比较
{
	return x > y;//从大到小的排列
}

int main()
{
	int N = 7, m = 3;//N个作业。m个机器
	int speed[7] = { 2,4,3,6,9,5,7 };//每项任务需要的处理时间
	int mintime[7] = { 0 };
	sort(speed, speed + N, cmp);//按任务时间长短排序,由大到小
	for (int i=0;i


你可能感兴趣的:(多机调度)