如何在两个数组中找到最小的交换

时间:2015-02-25 15:47:32

标签: arrays algorithm optimization

给出两个正整数数组:A和B具有相同的长度。您可以在A和B之间交换元素。

这是我的问题。

最小化total_number_of_swap(A,B)
|sum(A)-sum(B)| ≤ delta

约束

delta是常数。

e.g。

A={4,2,3} , B={5,6,7} and delta=1

一个解决方案是total_number_of_swap(A,B)=1 (swap(A[2],B[2]))

A'={4,2,7}, B'={5,6,3}  

sum(A)=4+2+7=13, sum(B)=5+6+3=14 

|sum(A)-sum(B)| ≤ 1

如何找到A'和B'。

有人有算法来解决这个问题吗?如果你有,请告诉我,我将非常感谢你。

1 个答案:

答案 0 :(得分:1)

此问题是Partition Problem的扩展。要解决它

  1. 将所有数字放入一组并解决分区问题(NP-Complete)
  2. 由于您知道Step1的最佳解决方案,因此您知道哪个元素应该属于A和B.交换那些错误集合中的元素。 (O(n)=线性)