寻找一个独特问题的算法

问题描述 投票:0回答:1

我有六个数组,每个数组都有一个从1到50的(不一定是唯一的)值。我还被赋予了一些项目来分割它们。每个项的值由它所在的数组定义。数组可以容纳无限个或零个项目,但所有数组中的项目之和必须等于最初给定的项目数。

我想找到数组中项目的最佳配置,每个单独数组中的项目值之和尽可能地相互接近。

比如说,我有三个数值为10的数组和三个数值为20的数组。对于9个项目,'20'个数组中各放一个,'10'个数组中各放两个,这样每个数组之和为20,总项目数为9。

我无法将小数项加到一个数组中,数字也很难像那个例子一样完全可除,但总存在一个解决方案,即和之间的差异最小。

我目前使用蛮力来解决这个问题,但在项目数较多的情况下,性能会受到影响。我觉得这个问题有一个数学上的答案,但我甚至不知道从哪里开始。

algorithm math linear-algebra mathematical-optimization algebra
1个回答
2
投票

写一个贪婪的算法很容易得出一个近似的解决方案。只要总是将下一个项目加入到数值之和最小的数组中。

最高值的数组应该在1项以内才是正确的。

对于数组中数值最高的项,可以重复练习。 让第二高值的数组在1项以内。

继续完成所有的练习,有6个数组,你就会得到 3^5 = 243 可能的物品排列(注意最后一个数组中的物品数量完全由前5个决定)。 选择其中最好的一个,你的组合爆炸就被控制住了。

(如果你试图最小化最大和最小数组之间的值差,并且有一个固定数量的数组,这种方法应该是可行的。) )

© www.soinside.com 2019 - 2024. All rights reserved.