多处理机调度问题(NP)

问题描述

有 n 个独立的任务,分配给 m 个相同的处理机进行处理,每个任务所花费的时间为 t[i], i = 1..n,每个任务独立,不可分割,不可中断。问题:这些处理机要处理完这些任务,所需要花费的最短时间是多少?

问题解决

该问题也是NP问题,,也跟上篇博客中的装箱问题类似: 装箱问题,是给定容量的箱子,问最少需要几个箱子可以满足条件。 而多处理机调度问题,则是给定固定数量的处理机,问每个处理机都尽快处理,其中最长需要处理多长时间。类似于给定固定的箱子,但是箱子容量可以变化,问这些相同箱子的最大容量设计为多少时,可以满足条件,且最大容量要尽量小。

最闲适应算法

这类多处理机问题,也是还没有找到比较好的多项式解决方法,目前使用贪心算法,给出比较近似最优解的答案。 1)对任务按照花费时间从长到短进行排序,时间复杂度为 O(n log n) 2)将任务一一分配给 m 个机器中最闲的那个。所谓最闲,是指当前他所要处理的任务总时间和最小。如何快速找到这 m 个机器中任务量最小的那个机器呢? 使用 平衡二叉树、最小堆等都可以完好地解决,时间复杂度为 O(log m)。因此第二步中,总的时间复杂度为 O(n log m)

由于m <= n,(否则就不用这么费力求解了,直接每个处理机任意分配一个任务即可),T(n) = O(n log n) + O(n log m) , 即 T(n) = O(n log n)了。

例题

有7个独立任务,有3台机器完成处理,各个任务的花费时间为{2,14,4,16,6,5,3}, 具体的求解方案如下:

生活中若没有朋友,就像生活中没有阳光一样

多处理机调度问题(NP)

相关文章:

你感兴趣的文章:

标签云: