这是我的问题。
有一个由2N个元素组成的未排序数组。所有这些元素都是正整数。 Q:如何将此数组分成两个N个数组,使得两个数组的总和最接近
一种直观的想法是,
- 将此数组排序为a1<a2 < a3< ...< a2N
- 将它们分成两个子数组a1 a3 a5 ... a(2N-1)和[a2,a4,...a2N], 然后在每个数组中交换两个数字,并继续循环,直到找到两个数组之间的最小值。
但是这样做,我们无法确定是否找到了最优解。
这是我的问题。
有一个由2N个元素组成的未排序数组。所有这些元素都是正整数。 Q:如何将此数组分成两个N个数组,使得两个数组的总和最接近
一种直观的想法是,
但是这样做,我们无法确定是否找到了最优解。
Q(0, 0, 0) = true,否则Q(0,_,_)为false。
要得到答案,请计算Q(2N,k,N)的DP表,其中k = ceiling(S/2),ceiling(S/2)-1,...,直到找到一个true值。
请注意,此问题与子集和问题非常接近,使其成为NP难问题。这意味着真正的多项式时间算法(如您的排序建议)将是最优性的近似。当然,对于实际目的来说,这可能完全可以接受。