将数字均匀分配到组中的最佳策略

时间:2013-03-06 21:58:43

标签: algorithm branch load-balancing

您有两个整数A = {1,3,60,24}和B = {14,54,3}的列表,订单和列表长度未确定。 将A中的数字放入B中的最佳策略是什么,以便B中的结果方差尽可能平衡。如果没有可用空间,您不必将A中的所有数字都放入B中。但如果有空位,你必须加上号码

我正在考虑应用Branch and Bound,但是,我不知道如何找到修剪条件,例如计算子问题的方差(未完全填充)来判断要切割哪个分支?

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

从A和B之间的差异创建列表c,C [i] = A [i] -B [i]。然后你应该找到它们之和的所有元素接近于零。它就像这样{{ 3}}。 但在这个问题中你有一个负数。你必须找到一个子集,它们的总和接近零。 我认为这是NP完全问题。

答案 1 :(得分:0)

您所描述的问题是分区问题(http://en.wikipedia.org/wiki/Partition_problem)。找到最佳解决方案是NP-complete,但是对于大多数情况,有许多近似值几乎是完美的。

事实上,你所描述的算法就是操场上孩子们选择团队的方式。如果集合中的数字具有相似的数量级,则该贪婪算法表现得非常好。当然,这不是最好的解决方案,但考虑到问题是NP完全的问题,它很简单,因为它很简单。

美国科学家的这篇文章给出了一个很好的问题分析,你应该仔细阅读它:最简单的难题(http://www.americanscientist.org/issues/pub/2002/3/the-easiest-hard-problem)。