给定一组n个数,如果n为偶数,如何得到每个n/2个数的两个子集以及每个子集中的数之和尽可能接近的地方?
例子:
集合={1.6,4.0,0.7,2.9,5.0,3.1,5.0,1.0,0.6,5.0}和28.9
子集可以是:
{5.0,5.0,2.9,1.0,0.6}和为14.5和
{5.0,4.0,3.1,1.6,0.7}和14.4
我需要一个算法,伪代码很好。
谢谢!

最佳答案

我看是这样的:有两个列表,空的。a=[],b=[]
对于x(数字列表)中的每个元素,将其附加到最需要它的元素,即其总和小于另一个元素的元素。

x=[1.6, 4.0, 0.7, 2.9, 5.0, 3.1, 5.0, 1.0, 0.6, 5.0]
x.sort()
x.reverse()
print(x)
#[5.0, 5.0, 5.0, 4.0, 3.1, 2.9, 1.6, 1.0, 0.7, 0.6]
b=[];c=[]
for i in a:
    if sum(b) <= sum(c):
        b.append(i)
    else:
        c.append(i)
print(sum(b))
print(sum(c))

#Hope this helps!

编辑:
如果我们希望集合大小相等,那么这可能会成为一个问题使用组合数学需要很长时间,但我看没有其他选择再说一遍,我的知识有限。所以说:
给定一组22,找出一组11,其总和为22的一半,或者尽可能接近。如果离得越近,看看开关元件是否能产生更好的效果。但这和组合数学一样效率低下。
这真是个难题。甚至维基百科也承认这一点:-d:。-(
对不起,我不能再帮你了。

关于algorithm - 如何将一组数字分为两个相等的元素子集,并求和尽可能接近?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49469282/

10-11 07:21
查看更多