调度:将一组整数划分为K个子集

时间:2012-08-08 03:06:10

标签: algorithm math numbers integer scheduling

我正在研究任务调度程序并面临以下问题(处理器之间的任务分配):

有一组N个整数。如何将它们划分为K个不相交的子集,这些子集的总和差别很小?

我正在寻找一种简单的启发式方法,它具有合理的计算复杂度,N = 100-500和K = 10-20。在最优解中不需要(即最小可能的和差),粗略近似就足够了。

提前致谢。

4 个答案:

答案 0 :(得分:2)

构建启发式First FitFirst Fit Decreasing效果很好。

对于First fit Decreasing,首先对尺寸逐渐减小的部件进行排序(在下面的示例中:A,B,C,D),然后将它们逐个放入最佳剩余点(X或Y)。在下面的示例中,忽略2个维度中的1个(例如,忽略CPU)。

First Fit Decreasing on CloudBalancing

答案 1 :(得分:1)

这是你正在寻找的论文,我想:

多路编号分区
Richard E. Korf 计算机科学系
加州大学洛杉矶分校 洛杉矶,加利福尼亚州90095 korf@cs.ucla.edu

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.150.2326&rep=rep1&type=pdf

答案 2 :(得分:1)

即使分成2也是NP完全的。虽然你可以使用伪多项式时间算法。提到on Wikipedia,假设你有数字总和的上限。

答案 3 :(得分:0)

事实证明,简单的greedy algorithm在这种情况下效果很好。