【问题标题】:Reduce Subset Sum to Polyomino Packing将子集和化简为 Polyomino Packing
【发布时间】:2015-06-01 13:56:24
【问题描述】:

这是一项家庭作业,因此非常感谢您的帮助。

我应该证明以下问题是NP完全的。提示说你应该将子集和问题简化为这个问题。

给定一组形状,如下所示,以及一个 m-by-n 板,决定是否可以用所有形状完全覆盖板.请注意,这些形状可能不会旋转。

例如,对于一个 3×5 的棋盘和以下棋子,棋盘可以这样覆盖:

现在要注意的重要一点是,我们试图减少的子集和问题应该根据 mn 给出输入长度多项式。

感谢任何使用另一个 NP 完全问题的想法。

【问题讨论】:

  • 您能否说明最初的问题是什么?问题是什么 - 证明回答你是否可以覆盖董事会是 NP 完全的?你不能吗?
  • @shapiro.yaacov 您需要更多说明吗?因为我认为这个问题很清楚。有什么特别想知道的吗?
  • 1.我想知道原来的问题。 2. 试着看一下Wang Tile 问题(不是一个完整的答案,我同意)。 3. 至少对我来说,听起来您将问题描述为“说有可能用所有形状完全覆盖电路板”。所以这是一个展示方式或状态它是/不可能的问题?
  • 这对 Stack Overflow 来说不是一个好问题。
  • @j_random_hacker 我实际上正是这样做的。一个简单的方法是有一个大小为 1*s (和数)的板用于求和,每个数字得到 i 个块,然后尝试用块覆盖板。问题是,这不是多项式归约!

标签: algorithm np-complete subset-sum


【解决方案1】:

最简单的减少来自分区问题。

假设我们有一组正数总和为2n,我们想知道它们的子集总和为n

我们创建一组长度为数字和宽度为 1 的块,然后尝试将它们放入宽度为 2 和长度为n 的矩形中。当且仅当分区问题对于这些数字是可解决的,并且行是分区时,我们才能成功。因此,任何分区问题都可以在线性时间内简化为 polyomino 打包问题。由于分区问题是 NP 完全的,所以我们完成了。

但他们说的是子集总和。如果它们的意思是正数的子集和,那么我们可以使用另一个技巧。假设我们的数字总和为n,我们想知道一个子集是否总和为k。然后我们只需将大小k+1 和大小n-k+1 的问题添加2 个数字,旨在解决分区问题。如果我们成功了,我们额外的 2 个号码就不可能在同一个分区中,所以剩下的就是分区问题的解决方案。由于我们已经将分区问题简化为 polyomino 打包问题,所以我们完成了。

如果他们想要从可以是正数和负数的数字中获得子集总和,那么我看不到他们建议的减少。但由于我已经设法将 2 个著名的 NP 完全问题减少到这个问题,我认为我们很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 2021-07-04
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多