Algorithm 寻找唯一问题的算法

Algorithm 寻找唯一问题的算法,algorithm,math,linear-algebra,mathematical-optimization,algebra,Algorithm,Math,Linear Algebra,Mathematical Optimization,Algebra,我有六个数组,每个数组都有一个从1到50的值(不一定是唯一的)。我还得到了一些可以在它们之间分割的项目。每个项的值由其所在的数组定义。数组可以包含无限项或零项,但所有数组中的项之和必须等于给定的原始项数 我想找到数组中项目的最佳配置,其中每个单独数组中的项目值之和彼此尽可能接近 例如,假设我有三个值为10的数组和三个值为20的数组。对于9个项目,每个“20”数组中有一个项目,每个“10”数组中有两个项目,因此每个数组的总和为20,项目总数为9 我不能向数组中添加小数项,而且这些数字很难像那个例子

我有六个数组,每个数组都有一个从1到50的值(不一定是唯一的)。我还得到了一些可以在它们之间分割的项目。每个项的值由其所在的数组定义。数组可以包含无限项或零项,但所有数组中的项之和必须等于给定的原始项数

我想找到数组中项目的最佳配置,其中每个单独数组中的项目值之和彼此尽可能接近

例如,假设我有三个值为10的数组和三个值为20的数组。对于9个项目,每个“20”数组中有一个项目,每个“10”数组中有两个项目,因此每个数组的总和为20,项目总数为9

我不能向数组中添加小数项,而且这些数字很难像那个例子那样完全可除,但总存在一个解决方案,其中和之间的差值最小


我目前正在使用蛮力来解决这个问题,但是大量的项目会影响性能。我觉得这个问题有一个数学答案,但我甚至不知道从哪里开始。

编写一个贪心算法来给出一个近似的解决方案是很容易的。只要始终将下一项添加到具有最小值和的数组中即可

具有最高值的数组应在1项正确范围内

对于数组中具有最高值的每个项目计数,可以重复此练习。正在将第二个最大值的数组设置为1以内

继续遍历所有这些数组,使用6个数组,您将得到
3^5=243
可能的项目排列(注意,最后一个数组中的项目数完全由前5个数组决定)。选择其中最好的,你的组合爆炸就被控制住了


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

编写一个贪心算法来获得近似解是很容易的。只要始终将下一项添加到具有最小值和的数组中即可

具有最高值的数组应在1项正确范围内

对于数组中具有最高值的每个项目计数,可以重复此练习。正在将第二个最大值的数组设置为1以内

继续遍历所有这些数组,使用6个数组,您将得到
3^5=243
可能的项目排列(注意,最后一个数组中的项目数完全由前5个数组决定)。选择其中最好的,你的组合爆炸就被控制住了


(如果您试图最小化最大数组和最小数组之间的值差,并且有固定数量的数组,则此方法应该有效。)

最小和差是指任意两个数组之间的最大差或所有数组对的差之和,或者它是其他的东西?通过求和之间的最小差,你指的是任意两个数组之间的最大差,或者所有数组对的差之和,或者它是其他的东西?