首页 > 代码库 > 多机调度问题

多机调度问题

【问题】

设有n个独立的作业{1,2,3,...,n},由m台相同的机器进行加工处理。作业i所需的处理时间为ti。现约定,任何作业可以在任何一台机器上加工处理,但未完工前不允许中断处理。任何作业不能拆分成更小的子作业。多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。

【算法分析】

这个问题是一个NP完全问题,到目前为止还没有有效的解法。对于这一类问题,用贪心选择策略有时可以设计出较好的近似算法。

采用最长处理时间作业优先的贪心选择策略可以设计出解多机调度问题的较好的近似算法。按此策略,当n≤m时,只要将机器i的[0,ti]时间区间分配给作业i即可。当n>m时,首先将n个作业依其所需的处理时间从大到小排序。然后依此顺序将作业分配给空闲的处理机。

【代码】

【时间复杂度】

当n≤m时,算法Greedy需要O(1)时间。

当n>m时,排序耗时O(nlogn)。初始化堆需要O(m)时间。关于堆的DeleteMin和Insert运算共耗时O(nlogm),因此算法Greedy所需的计算时间为

O(nlogn+nlogm)=O(nlogn)

 

多机调度问题