划分整数集

时间:2014-12-14 23:01:15

标签: algorithm divide partition-problem

我遇到了如下所述的算法问题解决方案的问题。

我们有一组整数(例如数组)。我们的任务是将它们分成各组(它们不必具有相同数量的元素),这些组的总和彼此相等。我认为原始集合不能分割我们必须回答“不可能分裂”。

例如: 设置A[-7 3 3 1 2 5 14]。答案是[-7 14], [3 3 1], [2 5]

似乎很容易说出什么时候肯定是不可能的。当原始集合的总和不能被3整除时:sum(A) % 3 != 0

你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

这是3-partition problempartition problem变体,不同之处在于经典分区问题将集合拆分为两个集合(而不是三个),其总和彼此相等。这个问题是NP完全的,所以你几乎肯定不会找到它的多项式时间解决方案; 2分区问题有一个伪多项式时间解决方案,但3分区问题没有。

有关如何使2分区算法适应3分区算法的概述,请参阅this answer。有关并行解决方案,另请参阅this paper