分区问题

来自testwiki
跳转到导航 跳转到搜索

Template:Expand language 分区问题Template:Lang-en)是数论计算机科学领域的问题,Template:Sfn目的是把一个多重集S分为S1S2两个子集,要求S1S2这两个集合中所有数的和相等。尽管分区问题属于NP完全问题,但是依然存在伪多项式时间的动态规划解法,而且在很多情况下也存在启发式的解法,能够求出最优解或近似最优解。正是基于这一点,这类问题也被称为“最简单的难题”。[1]Template:Sfn

分区问题存在一个最佳化問題,该问题是将S分为S1S2,要求S1中元素的和与S2中元素的和相差最小。这一问题属于NP困难问题,但在实践中依旧存在高效的解法。[2]

分区问题是以下两个相关问题的特殊情况:

  • 子集和问题:从集合S找到一个子集,使其所有元素的和等于一给定值T(分区问题就是T为S所有元素之和的12时的特殊情况)
  • 多路数字分区:将集合S分为k个子集,要求每个子集的元素之和都相等(分区问题就是k=2时的特殊情况)
  • 但是需要注意的是,三分区问题与分区问题有很大不同,三分区问题要求每个子集中都有3个元素。三分区问题比分区问题更难,甚至连伪多项式时间算法都不存在,除非满足P=NP[3]

实例

现有多重集S=3,1,1,2,2,1,可以被分为S1=1,1,1,2以及S2=2,3,两者元素之和皆为5。

注释

Template:Reflist

参考文献