【问题标题】:SUBSET-SUM, upper bound on number of solutionsSUBSET-SUM,解决方案数量的上限
【发布时间】:2010-01-03 04:59:04
【问题描述】:

您可能知道,SUBSET-SUM 问题被定义为确定一组整数的子集是否与指定的整数相加。 (subset-sum还有另一种定义,即一组整数总和为零,但我们现在使用这个定义)

例如,((1,2,4,5),6)true,因为 (2,4)6。我们说(2,4)"solution"

此外,((1,5,10),7)false,因为参数中没有任何内容与 7 相加

我的问题是,给定SUBSET-SUM 的一组参数数字,可能的解决方案的数量是否存在多项式上限。在第一个示例中,有 (2,4)(1,5)

我们知道,由于SUBSET-SUM 是 NP-complete,因此在 polynomail 时间内决定可能是不可能的。但是我的问题与决策时间无关,我严格询问解决方案列表的大小。

显然,参数数字的幂集的大小可以是解决方案列表大小的上限,但这具有指数增长。我的直觉是应该有一个多项式界限,但我无法证明这一点。

nb我知道这听起来像是一个家庭作业问题,但请相信我,它不是。我正在尝试自学 CS 理论的某些方面,这就是我的想法。

【问题讨论】:

  • 考虑((2 2 2 2 2 2 2 2 2 2) 10)。在这里,有 5 个 2 的 252 种组合,您可以选择得到 10。如果您计算具有相同数字但不同索引的答案相同,那么在这种情况下只有一种解决方案。您会将以上内容算作 252 个解决方案还是仅算 1 个?
  • 1,我应该提到我对独特的解决方案感兴趣
  • 卡普减少是我曾经用来解决这个问题的方法,仍然安排它欢迎迈克和所有人带来它
  • @Joey 我认为您的数字列表也不是一个集合,它必须具有唯一的元素,尽管我认为子集总和可能仍然是一个“困难”(np-complete)问题,即使列表我们正在获取包含重复项的子集;只是想我应该提出那个细微的区别

标签: theory subset-sum


【解决方案1】:

没有;取数字:

(1, 2, 1+2, 4, 8, 4+8, 16, 32, 16+32, ..., 22n, 22n+1, 22n+22n+1)

并询问如何形成总和 1 + 2 + 4 + ... + 22n + 22n+1。 (例如:n = 3 取集合 (1,2,3,4,8,12,16,32,48) 并询问总和为 63 的子集。)

您可以使用 1 和 2 或使用 1+2 形成 1+2。

您可以使用 4 和 8 或使用 4+8 来形成 4+8。

....

您可以使用 22n 和 22n+1 形成 22n + 22n+1或 22n+22n+1.

选项是独立的,因此至少有 3n=3m/3,其中 m 是您的集合的大小。我敢打赌这可以大大加强,但这证明没有多项式界限。

【讨论】:

    【解决方案2】:

    Sperner's Theorem 提供了一个很好的(尽管是非多项式的)上限,至少在集合中的数字严格大于零的情况下(您的问题似乎就是这种情况)。

    具有给定总和的所有子集的族形成 Sperner 族,它是子集的集合,其中该族中的任何子集本身都不是该族中任何其他子集的子集。这是使用元素严格大于零的假设的地方。 Sperner 定理指出,此类 Sperner 族的最大大小由二项式系数n Choose floor(n/2) 给出。

    如果你放弃n 数字不同的假设,很容易看出这个上限无法改进(只需取所有数字 = 1 并让目标总和为 floor(n/2))。我不知道在数字不同的假设下是否可以改进。

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2013-09-04
      • 2012-12-01
      相关资源
      最近更新 更多