多机调度问题
2017-01-27 15:20
218 查看
设有n个独立的作业{1,2,…,n},由m台相同的机器进行加工处理。作业i所需的处理时间为ti。
现约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分
成更小的子作业。现要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。
思路:
将n个作业按时间长到时间短排序,把时间最长的作业放入机器,再依次把次长的放入机器,直到
机器都在工作,再取作业放入作业时间最短的机器上,最后工作时间持续最长的机器即为最短的处理时间
代码:
现约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分
成更小的子作业。现要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。
思路:
将n个作业按时间长到时间短排序,把时间最长的作业放入机器,再依次把次长的放入机器,直到
机器都在工作,再取作业放入作业时间最短的机器上,最后工作时间持续最长的机器即为最短的处理时间
代码:
#include<iostream> #include<algorithm> #include<cstring> using namespace std; int a[100],b[100]; bool cmp(const int &x,const int &y) { return x>y; } int main() { int n,m,i; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); cin>>n>>m; for (i=0;i<n;i++) cin>>a[i]; //对n个作业按时间从大到小排序 sort(a,a+n,cmp); for (i=0;i<n;i++) { *min_element(b,b+m) += a[i]; //b数组为机器 } cout<<*max_element(b,b+m); return 0; }