需要针对此问题的算法

Hei*_*gor 8 algorithm

有两个长度为N的整数序列A []和B [],都是未排序的.

要求:通过交换A []和B []之间的元素(可以随机交换,而不是使用相同的索引),将{A []}中所有元素的总和与{B中所有元素的总和[]}最小化.

PS:实际上,这是我遇到的面试问题.

非常感谢

小智 6

这将是NP难!我相信你可以从Subset Sum减少到这个.

根据BlueRaja/polygene的评论,我将尝试从Subset Sum中完全减少.

这是一个减少:

子集和问题:给定整数x 1,x 2,...,x n,是否有一些非空子集总和为零?

我们的问题:给定两个大小为k的整数数组,找到两个数组之和的最小可能差异,假设我们可以在数组中的整数中进行混洗,将两个数组视为一个数组.

假设我们的问题有一个多项式时间算法.

说现在给你整数T = {x 1,x 2,...,x n }(multiset)

令S i = x 1 + x 2 + ... + x n + x i.

令T i = {x 1,x 2,...,x i-1,x i + 1,...,x n }(= T - x i)

限定

A i =使用T i形成的阵列

B i = [S i,0,...,0](即一个元素是S i,其余是零).

设m i =由阵列A i和B i的问题找到的最小差异

(我们运行我的问题n次).

声明:当且仅当有一些i时,T的一些非空子集合为零,其中m i = 0.

证明:(wlog)说x 1 + x 2 + .. + x k = 0

然后

A = [x k + 1,...,x n,0,... 0]

B = [X 2,X 3,...,X ķ,S 1,0,..0]

给出最小差值m 1为| x 2 + .. + x k +(x 1 + ... + x n)+ x 1 - (x k + 1 + .. + x n)| = | 2(x 1 + x 2 + .. x k)| = 0.

类似地,可以证明if部分.

实际上,这实际上也跟随(更容易)来自Partition:只需创建全零的新数组.

好吧,我没有犯任何错误.