我遇到了如下所述的算法问题解决方案的问题。
我们有一组整数(例如数组)。我们的任务是将它们分成各组(它们不必具有相同数量的元素),这些组的总和彼此相等。我认为原始集合不能分割我们必须回答“不可能分裂”。
例如:
设置A
为[-7 3 3 1 2 5 14]
。答案是[-7 14], [3 3 1], [2 5]
。
似乎很容易说出什么时候肯定是不可能的。当原始集合的总和不能被3整除时:sum(A) % 3 != 0
。
你知道如何解决这个问题吗?
答案 0 :(得分:3)
这是3-partition problem的partition problem变体,不同之处在于经典分区问题将集合拆分为两个集合(而不是三个),其总和彼此相等。这个问题是NP完全的,所以你几乎肯定不会找到它的多项式时间解决方案; 2分区问题有一个伪多项式时间解决方案,但3分区问题没有。
有关如何使2分区算法适应3分区算法的概述,请参阅this answer。有关并行解决方案,另请参阅this paper。