给定一个整数列表
编辑:为了澄清,我正在寻找确切的分区
为了推广,如何将一个包含
l
,如何将其划分为两个列表a
和b
,使得d(a,b) = abs(sum(a) - sum(b))
最小。我知道这个问题是NP完全的,因此我正在寻找一种假多项式时间算法,即O(c*n)
,其中c = sum(l map abs)
。我查看了维基百科,但那里的算法是将其划分为精确的半数,这是我要寻找的一个特例...编辑:为了澄清,我正在寻找确切的分区
a
和b
,而不仅仅是最小差异d(a, b)
的结果。为了推广,如何将一个包含
n
个数字的列表分成k
个组g1、g2 ...gk
,使得(max(S) - min(S)).abs
尽可能小,其中S = [sum(g1), sum(g2), ... sum(gk)]
是总和的列表。