将列表分成两个相等的部分算法

时间:2012-06-01 21:45:13

标签: algorithm np-complete computation-theory partition-problem data-partitioning

  

相关问题:

     

假设我有一个列表,其中包含正好2k个元素。现在,我愿意将它分成两部分,每部分的长度为k,同时尽量使部分的总和尽可能相等。

快速举例: [3, 4, 4, 1, 2, 1]可能会被分为[1, 4, 3] and [1, 2, 4],差额将为1

现在 - 如果部件可以有任意长度,这是Partition problem的变体,我们知道它是弱的NP-Complete.

  

但是将列表分成等份(让我们说它总是k2k)的限制是否会使这个问题在多项式时间内得到解决?任何证明(或证明它仍然是NP)的证据计划?

1 个答案:

答案 0 :(得分:4)

仍然NP完成。通过将PP(您的分区问题的完整变体)减少到QPP(等分区问题)来证明:

获取长度为k的其他k元素的任意列表,所有元素均为零。

我们需要根据PP找到性能最佳的分区。让我们找到一个使用QPP的算法,并忘记所有额外的k零元素。向左移动零不会影响此分区或任何竞争分区,因此这仍然是长度为k的任意列表中性能最佳的无限制分区之一。