多机调度

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

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

#include <cstdio>#include <algorithm>#include <iostream>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<N;i++){//找最小的元素,把处理时间加到里面(分派任务)  //把N 个任务分给这m台机器*min_element(mintime, mintime + m) += speed[i];//选择机器里面的运行时间最小的,再往里填任务}//输出添加后的时间当中最大的那个,就是处理所有事件需要的总时间。cout << "需要处理的时间是:"<<*max_element(mintime, mintime + m)<<" 小时" << endl;system("pause");return 0;}


原创粉丝点击