是Dominosa NP-Hard吗?


26

Dominosa是一个相对较新的益智游戏。在 网格上播放。在游戏开始之前,将多米诺骨牌 放置在网格上(构成完美的平铺) )。在下一步中,将隐藏多米诺骨牌,仅保留数字。游戏的目的是恢复多米诺骨牌的原始排列。您可以在这里玩游戏:http : //www.puzzle-dominosa.com/0 0 0 1 ... Ñ Ñ (n+1)×(n+2)(0,0),(0,1),,(n,n)

规则:

规则很简单。您必须找到网格上所有多米诺骨牌的位置。多米诺骨牌是一对数字。每对中只能有一个。

我有一些多项式算法可以解决难题的一小部分。我还可以证明典型的Dominosa网格至少具有解决方案。2n2+o(n)

是Dominosa NP-Hard吗?


“这个难题很容易解决成SAT或ILP问题。” 为了证明NP的完整性,您是否要反过来吗?
丹尼斯·孟

1
@DennisMeng问题中提到的减少点是要确定问题出在NP。因此,剩下的就是证明它是NP困难的。顺便说一句,不需要减少就可以看到问题出在NP。多米诺骨牌的排列本身就是可解性的多项式大小证明。

我假设NP完整性有问题的问题是给定数字排列,它是否来自多米诺骨牌排列。如果问题是实际展示多米诺骨牌的排列(如果存在),那么该问题不是决策问题,并且“ NP完成”没有任何意义。

@AndreasBlass一个人也可以考虑更大的问题:给定从到的多米诺骨牌的元素子集,并用标记为到个顶点的图确定是否可以用给定的多米诺骨牌覆盖它。如果此问题出在P中,则有一种P时间算法可以恢复原始切片,因为您可以尝试删除边并在P时间中测试是否可以完成网格。1 n G 2 k 1 nk1nG2k1n

1
根据G. Nordh的论文,即广义多Skolem序列的NP-完全性,以下类似的问题是NP-完全性。实例:图形,将边缘划分成不相交的集合:与,使得具有相同标签的份额的任何两个边缘的顶点。问题:是否存在具有的子集,使得M中没有两个边共享同一顶点,并且每个中M最多包含一个边吗?ë 1ë 2E m| | | V | / 2 | E i | 2 = 1 ... 中号Ë | M | = | V | / 2 E ii = 1G=(V,E)E1,E2,...,Em,|m||V|/2|Ei|2, i=1,,mME|M|=|V|/2Ei, i=1,,m
Yoav bar sinai

Answers:


9

注意:这是我其他答案的延续和修订。

减少问题

回顾决策问题:

是否有一个完美的拼贴覆盖一个给定的网格,其中包含唯一的拼贴?n(n+1)×(n+2)n

因此,对于网格,我们只能使用变量。n(n+1)×(n+2)n

但:

  • 我们的约简需要很多唯一变量,远不。O(n)
  • 此外,我们的电线是开放式的,从而导致:
    • 我们怎么知道我们可以平铺开放区域?

为了解决第一个问题,我们人为地使游戏板更大。本质上,我们使等于我们实际需要的变量数量,然后创建一个大小为的网格,并将该网格放置在左下角。这将导致二次爆破。n + 1 × n + 2 n(n+1)×(n+2)

对于第二个问题,我们必须重新考虑一下小工具。

证明我们可以根据规则成功平铺板子的其余部分似乎有些艰巨。因此,我们从一种实际用于生成大小游戏板的策略开始:(n+1)×(n+2)

首先,我们生成一组所有可能的图块。所有这些瓷砖都必须放在板上。然后,我们移除瓷砖,并留下它们的正方形。

但是,我们的小工具不能保证会放置特定的瓷砖。放置的瓷砖取决于状态。因此,无论选择哪种状态,我们都必须仔细修改小工具以确保将删除特定的图块。

那让我们来看一下我们的小工具。

线和子句门有问题是出于两个原因。

  1. 我们不知道导线或子句门周围的正方形是否可以正确平铺;毕竟,有些导线可以向左推动,另一些导线可以向右推动,并且平铺剩余的空白正方形变得不平凡。我们将这个问题称为“流量”问题。
  2. 无法知道要从图块集中删除哪些图块。在一种状态下,将在线或子句门中对一组正方形进行平铺,在另一种状态下,将对一组完全不同的正方形进行平铺。

解决这些问题:

  • 首先,我们生成一组所有可能的图块。所有这些瓷砖都必须放在板上。当我们将它们放置在板上时,我们将从套装中移除瓷砖。尽管我们可能最初并不知道,但是由于我们尚未完全描述该公式,因此可以根据需要在增加时添加所有新的图块可能性。我们必须从此集合中删除的所有图块都必须是可放置的(至少,如果公式是可满足的,则要保证是可放置的)。我们称从瓷砖组中取下一块瓷砖,以从瓷砖组中“排出”瓷砖,以履行我们将其放置在游戏板上的义务。ñnn
  • 无论选择哪种状态,我们都必须精心设计小工具以确保将删除特定的图块。
  • 我们必须关闭小工具,以免它们根据其状态在整个板上推开瓷砖。而是它们的所有状态都只能占用一个明确定义的区域。
    • 另外,必须保证其所有状态能够占据明确定义的区域。这保证了满意的平铺,但不保证会发生特定的平铺。这与制作Dominosa游戏的方式相同:
      • 首先,将图块生成为一个集合。
      • 然后将瓷砖以随机配置放下,
      • 放置每个图块时,会将其从图块集中删除。
      • 然后将瓷砖从板上移开,留下正方形。
      • 这并不保证选择预期的配置,
      • 相反,它保证能够选择预期的配置,因此存在解决方案。我们可以在这里做同样的事情。
  • 在放置了配方的所有小工具之后,默认情况下不是放置唯一的正方形(即在所有“空白”上),而是确保空白是具有一个均匀尺寸的矩形区域,或者将空白分解为带有一个偶数维,我们只需将空白区域与图块集中的其余图块平铺即可。
  • 放置场景中的所有图块之后,我们知道所有内容都是可放置的。
    • 由于小工具之间的关系的性质,有些瓷砖显然可以放置,例如墙内的瓷砖,而只有当公式满足要求时,其他瓷砖才可以放置。
  • 然后,我们移除瓷砖,并留下它们的正方形。

那让我们来看一下我们的小工具。

强制小工具

我们可以通过确保每个构建块都不能与自己配对来构建任意数量的构建块。

例如,假设我们要强制使用磁贴,以便可以将用作积木。(请注意,是一个任意变量,我们希望将其强制成对使用,而不必像以前使用的值那样强制使用构造块)1 1 1(1,1)111

为了确保我们的 -building-block储备,我们将其放置在进行以下配置:我们将保留号码放置,我们将其称为像壁挂(形状像)那样靠在墙上;靠墙,中间第二排一个。然后,我们将放置另外两个数字,我们将它们称为和;这些是此小工具所独有的。我们将它们放在左右顶部。1 1 1 3 231 1(1,1)13231

如下图所示,共享的黑色边框是游戏板的底部,从左至右进行了描述。

  • 小工具的配置。此小工具在每个和都是唯一的。323
  • 平铺中心的3种可能状态。1

在此处输入图片说明

执行完此操作后,我们可以保证可以用一组特定的图块对小工具进行平铺,同时保证我们的小工具必须强制使用对。(1,1)

  • 我们知道必须发生,因为下中间所有3种可能的平铺状态都平铺为,如右图所示。1 1 1 (1,1)1(1,1)
  • 剩余的图块可以按和进行平铺,覆盖小工具。因此,我们可以从全局图块集中删除这些图块。如下图所示。1 3 (1,2)(1,3)

描述,从左至右:

  • 左,上:左状态,左,下:剩余方块的有效平铺。
  • 中间,顶部:中间状态,中间,底部:剩余正方形的有效平铺。
  • 右上方:右状态,右下方:剩余正方形的有效拼贴。

在此处输入图片说明

请注意,并非强制平铺其余正方形,因为它们可以与附近的邻居平铺而不是,但由于它是所有状态下游戏板的有效平铺,我们可以将其从平铺集中移除,并假设它们将以这种方式平铺。由于我们知道存在有效的可能平铺,因此如果公式可满足,我们至少有一个游戏板可能平铺。尽管不能保证以这种方式将它们平铺,但可以保证拼贴将被强制使用。1 1 1(1,1)

注意:如果您对此不满意,或者对“能够平铺”与“被迫平铺”的区别感到困惑,则可以用相同的方式在小工具周围放置一堵墙我们在下面为子句小工具创建墙。3 × 23×23×2

此小工具未关闭,因为它不需要关闭(但您可以,如果需要)。它不是必需的,因为它具有可行的配置,我们可以从平铺集中删除它。尽管可以进行其他配置,但这不会影响问题的可满足性。

保证将以下图块平铺(因此可以从图块集中删除): (1,1)

下面瓦片保证是能够被平铺(因此可以从瓦片集合中移除): (1,2),(1,3)

如果您选择用墙壁关闭此小工具,则也将是保证被覆盖。(1,2),(1,3)

新的Wire和Clause门

由于流动的问题以及排空瓷砖集的问题,我们需要重新设计导线。

解决流动问题的一种方法是使导线成为电路,而不仅仅是简单的左右状态。也就是说,它将是圆形而不是直线,因此,如果将圆的顶部向右推,则将底部推向左。这样解决了流动问题。

按照这条路线,我们可以更改wire和子句门来解决这两个问题。

保留和˚FTF

让我们介绍两个新的普世价值,和。这两个值是通用的。网格中的实际值,例如平方值和(根据约定,我们保留作为墙的构造块),或您选择的任何值。它们分别代表真与假。˚F 2 3 1TF231

我们强迫储备瓦片,,,如下:下图,说明从左到右:TTFF(T,F)(T,T)(F,F)

  • 我们使用与强制所有磁贴相同的方案,将用作。此小工具在每个和都是唯一的。Ť 1 23(1,1)T123
  • 我们使用与强制任何磁贴相同的方案,将用作每个和在此小工具中是唯一的。˚F 1 23(1,1)F123
  • 我们用同样的方式,强迫一瓦,使用为在中心,在的其他位置使用。这会强制平铺。和可以使用进行平铺,因此我们将其从平铺集中删除。此小工具在每个和都是唯一的。˚F 1 Ť˚FŤ23Ť 23(1,1)F1T(F,T)23T23

在此处输入图片说明

线

每条导线将以一个值开头和结尾,我们将其称为,这是导线唯一的。对于导线参与的每个子句,导线将具有两个导线值和,它们对于每个导线都是唯一的,并参与同一子句。下图,说明从左到右。X X 'Axx

  • 参与一个子句的导线。导线的高度为,长度为,其中是导线参与的子句数。导线在左侧用两个正方形填充,并且右边两个。当然,它的四周都被一堵墙包围着,用蓝色轮廓表示。请注意,对于此连接线是唯一的,并且仅在该连接线及其参与的子句中使用。2 * p + 3 p 1 22p+3pA1

在此处输入图片说明

下面说明的是两种状态,从左到右进行描述。

  • 在真实状态下参与一个子句的导线。当正方形与正方形配对,而正方形与正方形配对时,导线被认为是正确的。在另一种状态下,如果平铺反转,则认为它是错误的。请注意,一旦选择了磁贴,将如何强制平铺:之前已经被强制执行,因此其余磁贴必须为水平。Ť X '˚F Ť˚FxTxFA(T,F)
  • 同一根导线处于假状态。

在此处输入图片说明

当参与更多的子句时,会有更多的值 和,即导线参与的每个子句一对。它们交替位于顶部和底部,就像将每个对分开的和平方。X 'Ť ˚F X X 'xxTFx,x

在此处输入图片说明

两个对应的状态。

在此处输入图片说明

该小工具已关闭,因此没有“流量问题”。

请注意,无论在哪种状态下,无论状态如何,我们都将收集以下图块: ,, 。Ť˚F(A,A)(A,T)(A,F)

但是,有些不确定的地方,我们不确定。在一种状态下,我们可以删除,而在另一种状态下,我们可以删除从瓦集,所以该瓷砖可以我们实际删除?答案是:子句门具有相同的问题,但是具有相反的一组图块。它将始终收集剩余的,相对的和未收集的图块,这将在下一部分中看到。由于这些都与子句门配对,因此我们可以将它们都删除。1 ˚F1 'Ť2 ˚F2 'Ť(1,T),(1,F),(2,T),(2,F)...(1,F),(1,T),(2,F),(2,T)...

条款

接下来,我们将创建新子句门的第一次迭代。它由 ×小工具组成,被墙壁包围。在小工具内部,我们在顶部中心放置一个,在下角放置两个正方形;一个在左下角,另一个在右下角。其余的正方形将是代表三个不同导线的导线变量的值。让我们将它们称为和。所述将被迫对与导线-变量之一,并且剩余的线变量将与配对值。下图为从左到右的说明。˚F Ť 一个b Ç ˚F Ť2×3FTa,b,cFT

  • 左:新子句门的第一次迭代的配置。
  • 平铺的三种可能状态。F

在此处输入图片说明

这三种状态导致三种可能的平铺。下图,从左到右的描述。

  • 左,上:向左平铺,左,下:平铺其余正方形。F
  • 中间,顶部:向右平铺,中间,底部:拼接其余正方形。F
  • 右上方:向下平铺,右下方:平铺其余正方形。F

在此处输入图片说明

由于将与子句中的一个线变量配对,因此该wire-variable将不再与该线中配对;从而迫使电线正确。相反,用进行平铺的其余线变量将被迫在其导线中以进行平铺。这与子句的约束完全相同。F T F 1 -in- 3 - S A TFF TF1-in-3-SAT

请注意,和是线变量,但它们各自可以引用或有线变量;使用本质上是否定电线变量。Ç X X 'X 'a,b,cxxx

另外一项:为了履行了解可以从图块集中删除哪些图块的义务,我们必须对该条款“加倍和相反”。我的意思是,再制作 x 小工具,另外个变量表示和。让我们称它们为和。这些必须是和的取反变量线值。这个小工具是不同的,因为它将在中间有一个,另外两个3 一个b Ç 一个'b 'ç '一个b Ç 3 × 2 Ť ˚FŤX ŤX '˚FX ˚F3×23a,b,ca,b,ca,b,c3×2TF拐角处的值;与到目前为止描述的小工具完全相反。通过将这样的子句“加倍”,我们重新添加了与上述小工具相同的约束。但是,我们还会释放 (对于每个变量(以及和,因为它们毕竟是线变量)。如下图所示,描述从左到右。一个 b Ç (T,x),(T,x),(F,x),(F,x)a,b,c

  • “双重和相反”子句。底部是上述子句;顶部是新描述的对立条款。新子句具有完全相同的逻辑约束。它是bottom子句的对立面。这些组合的小工具和导线一起将(对于参与该子句的每个电线变量而言)。(T,x),(F,x),(T,x),(F,x)
  • 最左图中间的蓝线是为了便于查看;实际上,可以在不允许任何其他状态的情况下将其删除。

在此处输入图片说明

因此,让我们以一个示例为例,以证明所有瓷砖都按承诺排放了。如下图所示,描述从左到右。

  • 参与单个条款的电线图;为子句选择状态。在这里,我们使用,而和在此子句中代表其他线值。一个b 1=bab
  • 对于子句中的给定状态,值被强制与相邻的配对。Ť1T
  • 这将导致导线被强制为真值(可以看出,导线的正变量被强制与配对,而负变量被强制与配对,如上所述) )。˚FTF
  • 这迫使相反的子句(子句的上部)中的与子句中的配对。现在,如果您查看电线,则可以保证电线中的每个瓷砖都被放电:既可以在电线本身中放电,也可以在相应的子句小工具中放电。在这种状态下,我们有,,,,,和。1T(A,A)(A,T)(A,F)(1,T)(1,F)(1,F)(1,T)

在此处输入图片说明

尝试其他状态时,我们得到以下插图,描述从左到右。

  • 子句处于另一种状态,以两种方式之一平铺。(1,T
  • 因此,被压在电线上,(1,F
  • 引导其余的导线相应地平铺,并将导线的值设置为false。
  • 最后,在子句-小工具的对换句/上部段,必须瓦片,因为取在线。在这种状态下,我们有,,,,,和。这些是与其他状态下排出的砖块相同的砖块(1,F)(1,T)(A,A)(A,T)(A,F)(1,T)(1,F)(1,F)(1,T)

在此处输入图片说明

因此,在任何一种状态下,我们都会排出相同的瓷砖。因此,如果有令人满意的分配,则导线和子句一起可以成功地排出特定的瓷砖。

该小工具已关闭,因此不会出现流量问题。 保证子句小工具和Wire小工具始终释放相同的图块对值,因此即使我们不知道它将以哪种方式进行图块化,我们也可以将其释放。

现在,我们所有的小工具都符合标准。

公式

在最终的公式中,我们创建三行小工具,每行均由水平墙隔开。

  • 在底部,我们放置了两块砖高的强制小工具。我们需要一个强制小工具作为构建块,以及和。我们将强制小工具彼此紧邻放置。TF
  • 在中间一排,我们将电线小工具水平放置,这是两块瓷砖高。电线配件应相互垂直隔开。
  • 在第一行中,放置子句小工具,这些小工具高4格。子句小工具应通过垂直墙彼此隔开。

随后是插图,每个图上方都有说明。单击图像可获得全分辨率。页面底部列出了用于重现/生成图像的源代码。

以公式为例,我们有一个令人满意的结果解决方案作为见证人。Φ(x)=(x1,¬x2,x3)(x2,¬x3,x4)(x1,x2,¬x4)(¬x1,x2,x3,¬x4)

首先,我们从水平墙分开小工具的行开始。我们显示了正方形,以及被迫在墙内平铺的对。

在此处输入图片说明

接下来,我们展示这些小工具。蓝色轮廓代表小工具的边框;强制小工具为蓝色虚线,因为它们不会被墙壁包围。请注意,小工具子句中间的线没有被墙包围;它是为了便于查看;如上所述,删除该行不允许该子句中出现更多状态,但是我们在此演示中显示了蓝线。注意:在适用的情况下,我们使用平方名称来赋予数字语义可读性。每个名称代表一个数值。

在此处输入图片说明

在这里,我们填充垂直墙。

在此处输入图片说明

在这里,我们填写见证人解决方案;即,如果使用SAT解决方案来生成它,则为切片解决方案。

在此处输入图片说明

接下来,我们对填充区域进行平铺;到目前为止,电路板的其余部分(根据需要)与一样大。因此,我们将图块集中的其余对放电。此处的虚线表示有效但非强制的平铺;可能有另一种方式来平铺这些内容。在这里,我们显示左下角。n

在此处输入图片说明

在这里,我们使用有效的平铺图填充剩余的正方形。

在此处输入图片说明

在这里,我们显示了网格的右下角。

在此处输入图片说明

在这里,我们显示了网格的右上角。请注意垂直砖不再适合;因此,如有必要,我们会水平平铺第一行。

在此处输入图片说明

最后是左上角。

在此处输入图片说明

通过TeX一次生成整个游戏板会失败,并会出现pdflatex的内存不足错误,因此,如果要查看它,则必须生成剪辑并将它们修补在一起。确保检出笔记本查看器


TikZ来源

游戏生成器:

  • graphtex.py

    使用pdflatex,pdfcairo(poppler)和rsvg-convert(libsvg)将TeX转换为svg

  • 多米诺萨

    包含转换逻辑,游戏解决方案验证和绘图逻辑

  • dominosa_demo.py

    可执行演示文件,生成上面答案中使用的图像。将图像转储到当前工作目录。

  • dominosa_demo.ipynb

    一个ipython演示程序,生成上面答案中使用的图像。


1
这真是奇妙,非常感谢您。–
Yoav bar

2
请告诉我您有一个arXiv版本。它可能是更合理的这个平台包括一个草图,并链接到全文。
拉斐尔

22

DOMINOSA是NP-hard


玩游戏是一个优化问题;找到有效的多米诺骨牌,使其覆盖所有正方形。此问题的决策版本是:

是否有一个完美的拼贴覆盖一个给定的网格,其中包含唯一的拼贴?(n+1)×(n+2)n

显然,优化问题,即实际找到游戏解决方案的问题至少与决策问题同等或更难。

我们将公式转换为相应的网格,仅该公式具有可满足的赋值时才可以覆盖。此外,覆盖物实际上可以用于恢复令人满意的分配。1-3-in-SAT

因此,如果提出的构造是正确的,并且可以在DTM上用多项式时间求解一个博弈,那么它将暗示。这意味着是NP-hard。P=NPDOMINOSA

从到1-3-in-SATDOMINOSA

介绍

大多数问题/变量与有很好的对应关系。并行考虑这些问题可能很重要;因为它们彼此相关,所以一个问题中的几乎任何事物都可以与另一个问题相关。3-SATCIRCUITSAT

CIRCUITSAT具有一个平面变体,对其进行了,称为。这种转换非常优雅,基本上可以让您进行平面的嵌入,找到其余的交叉导线,并使用“小工具”通过平面的“门”让导线交叉(小工具的集合,包括输入和输出导线) 。PLANAR-CIRCUITSAT

方便地,大多数变体也减少了平面变体,平面变体与,并且非常相关;容易从一个还原到另一个,并且易于推理。因此,每当涉及到可能难以解决NP的平面问题时,我都会考虑的平面变体以及它们在。3-SATPLANAR-CIRCUITSAT3-SATPLANAR-CIRCUITSAT

平面变体非常重要,因为它们有助于减少平面/几何问题,例如Euclidean TSP(偶然发现和学习的极少见的变体)。因此,有和一个平行的来帮助减少这种情况。PLANAR-3-SATPLANAR-CIRCUITSAT

重要的是要知道其他变体,因为其中一些变体较弱。也就是说,看似“更轻松”,但仍然是NP完整的。乍一看,它们似乎更容易解决-并且更加简单-但它们仍然是 NP完整的。NP完整,但更简单;因此,在许多情况下,更容易减少排放量。3-SAT

例如,存在。对于某些问题,您可以轻松地制作一个精确的小工具,同时制作“至少1 in 3”,例如标准的用途是不明显的,并且可以用于巨大的结构。1-in-3-SAT1-in-33-SAT

另一个示例是。当您具有无法轻易否定值的构造时,单调会使事情变得简单得多。MONOTONE-1-in-3-SAT

更令人惊奇的是具有一个平面变体:!因此,这使事情变得容易得多。您不必交叉“电线”(请记住,中有类似的东西),请相信我,虽然交叉的小工具很有趣,但是它们往往非常不明显且困难。MONOTONE-1-in-3-SATPLANAR-MONOTONE-1-in-3-SATCIRCUITSAT

PROBLEMMONOTONEPLANAR1-in-3NP-hard3-SATNoNoNoYesMONOTONE-3-SATYesNoNoNo1PLANAR-3-SATNoYesNoYes21-in-3-SATNoNoYesYes3PLANAR1-in-3-SATNoYesYesYes4MONOTONE-1-in-3-SATYesNoYesYes5PLANAR-MONOTONE-3-SATYesYesNoYes!6PLANAR-MONOTONE-1-in-3-SATYesYesYesYes7
  1. 纯文字消除
  2. 舍费尔二分法定理
  3. 相容代表问题
  4. 最小重量三角剖分是NP-Hard
  5. 舍费尔二分法定理
  6. 寻找完美的自动分区非常困难
  7. 平面中的最佳二元空间分区

从简化开始的一种方法是尝试找到类似于电线的“小工具”,以及类似于变体之一的子句的小工具。值得一提的是,许多变体都是平面的,我们可能无需交叉导线就可以逃脱。3-SAT

什么是“小工具”?小工具是问题中的某种构造,作为构建门/电线/子句的构建块很有用。某些小工具将具有一组受限的状态。例如,可以将具有两种状态的小工具用作变量;一种状态是“ true”,另一种状态是“ false”。具有两个状态(可以是“长”),可以弯曲和分裂的小工具可用作导线-如果它可以与变量交互,并且被约束为将变量的状态扩展到另一个位置。具有三种状态的小工具可以用作子句;如果可以通过它的三个状态中的每一个约束它来约束“三个之一”。同样,人们可能想要各种各样的逻辑门,例如非小工具,或小工具,异或小工具等。

积木

  • 首先,让我们在板上保留一个数字,例如。我们将用作其他所有内容的构建块。11
  • 我们将使用一个拐角来确保永远无法连接到另一个,除非必须在该拐角处。11
  • 下面(在三个图中)是角落,以及我们在其中放置的方式。1
  • 在所有图中,我们将使用指示所有网格中的唯一值。
  • 实际上,在用重要值覆盖它们之前,我们将用值覆盖网格。因此,默认情况下,所有内容都用值覆盖。

在此处输入图片说明

如您所见,通过放置,必须在此配置中用完对。它必须使用虚线平铺之一。现在永远不可能在董事会的其他地方发生,这就是我们所需要的。3   1(1,1) (1,1)

还有其他方法可以保留数字,既可以将其中的保留在墙上,也可以将它们中的个保留在十字架上,而无处可取。只要强制使用,任何方法都可以。45(1,1)

一堵墙

现在,能够在整个地方而不只是在网格的侧面制作“墙”和“角”将非常有用。看看如果我们将一对成对排列在一起会发生什么?一个人别无选择,只能与邻居配对,形成宽度为的“墙” 。4

下图,从左到右:

  1. 成对的 s。1
  2. -square 的唯一可能平铺。1
  3. (几乎)该行中所有 s 的唯一可能平铺。1
  4. 为强调而画的墙线。

在此处输入图片说明

初步尝试

现在,通过彼此相对放置两个“墙壁”,并在墙壁之间留出的空间,也许我们可以拿出一个类似“电线”的小工具。1

仅显示墙壁边界,这是我们在下图中得到的(从左到右):

  • 将两堵墙彼此相对放置。
  • 将唯一数字放入其中。
  • 最右边的两个:导线的两种可能状态。

在此处输入图片说明

怎么运行的:

管子/电线上不能有任何孔,因此,如果将瓷砖向上移动,则必须沿管子将它们全部向上移动。如果将它们调低,它将“吸”掉所有这些。因此,我们可以从电线的一侧发送“信号”到另一侧;换句话说,传播一个值。

因此,现在我们可以将值传播到很远的地方了!

其余限制包括:

  • 我们不能弯曲电线,
  • 我们不能拆线,
  • 我们不能交叉电线,
  • 我们可能会遇到烦人的布局问题,因为我们必须注意线长奇偶校验。

弯曲电线,第1部分:下面的墙

下一个问题是,我们需要能够弯曲电线,而不仅仅是笔直...

所以。我们将弯曲部分分为两部分:上部和下部。首先是下部。忽略弯头的上部,我们稍后再做。

下图显示了弯曲的问题;导线的顶部是“松散的”,似乎很难使墙壁旋转90度。

左到右:

  • 导线的顶部是“松散的”。
  • 如果我们尝试弯曲它会怎样?我们希望连线位于蓝线之间。同样,忽略弯头的上部,我们稍后再做。
  • 如您所见,的顶部是松散的,它们可以沿着墙或通过电线平铺!不好1

在此处输入图片说明

一种解决方案如下:

  • 在折弯附近选择一个对。取那个平方的值,让我们将其命名为;这意味着该数字在整个网格中是唯一的,就像,并且在此折弯处重复使用一次。由于此与配对,因此无法再次与配对。因此,我们将其放在最右边的顶部。现在,我们可以清楚地看到,剩下的唯一配对选项在其右侧,因此它将固化墙。(x,1)xqx1111

下图,从左到右的描述:

  • 有问题的情况。
  • 选择一个正方形,令为折弯中任何正方形的平方值(当然不是 s)。q1
  • 最右上图块的两次切换;这次只有其中一个有效。1

在此处输入图片说明

但是,我们如何确定这个不会破坏线路?在下面,您可以看到导线的状态,并且不会妨碍它。qq

从左到右:

  • 目前的建设。
  • 最右边的两个数字:导线的状态;从经验上讲,它们并不受的引入的影响。q

在此处输入图片说明

现在,我们仍然在顶部放一个;最左最上层的。11

我们将做同样的事情;选择一对已经在弯砖中配对的,然后将放在最左上角的。(r,1)r1

下图从左到右:

  • 我们目前的建筑。
  • 问题:最左上-可以与导线中的数字墙壁配对;我们希望与一对壁上。1
  • 选择一个,并在最左边的顶部使用相同的数字。r1

在此处输入图片说明

然后我们终于弯腰了。下图,说明,从左到右:

  • 左:我们为折弯准备的最终结构。
  • 右:如何将导线连接到左侧。

在此处输入图片说明

弯曲电线,第2部分:上方墙

用于制作折弯顶部角的墙要简单得多。您只需将垂直墙与水平墙对齐即可。下图,从左到右的描述:

  • 我们要制作的电线弯曲。
  • 将墙的垂直部分放下。
  • 平铺垂直墙的正方形。
  • 水平墙的放置和平铺;它可以碰到垂直墙,并形成一个角。

在此处输入图片说明

现在您应该确信我们可以放置和弯曲电线。但是,我们仍然无法拆分或交叉导线,稍后再介绍。

其余限制包括:

  • 我们不能弯曲电线,
  • 我们不能拆线,
  • 我们不能交叉电线,
  • 我们可能会遇到烦人的布局问题,因为我们必须注意线长奇偶校验。

有价值的电线

现在我们有了电线,如果有一条有价值的电线,那就很高兴了,在那里我们可以看到电线的价值,就像电路板上的LED一样。因此,我们要做的是拿一根长度为的导线,并引入一个名为正方形,我们将其命名为,另一个名为Square的我们将其称为。这些对于每个有价值的线材部分都是唯一的。只有两次,它们只能在单根价值的电线内重复使用。它们成对放置,彼此相邻的两个正方形,以及彼此相邻的两个正方形,并带有一个7TFTF将它们分开的正方形。如下图所示,描述从左到右:

  • 左:一根电线。
  • 右:正方形配置。

在此处输入图片说明

那么,如何判断导线是真还是假?好吧,电线有两种状态。在这些状态的每个状态下,或中的一个将在同一图块中配对;配对的值是导线的值。下图,从左至右描述:TF

  • 左,右:导线的两种状态;
  • 左:导线的值为true,因为方块共享一个图块T
  • 正确:由于方块共享一个图块,因此Wire的值为false 。F

在此处输入图片说明

现在,我们可以使用命名变量,将变量放到网格上。我们可以连接两条有价电线并强制它们具有相同的值,或者如果我们以奇数长度连接它们,则强制它们具有不同的值;并使用电线,我们可以在整个网格上进行长距离传输。使用导线,我们可以在各处传播命名变量的值。3-SAT

其余限制包括:

  • 我们不能拆线,
  • 我们不能交叉电线,
  • 我们可能会遇到烦人的布局问题,因为我们必须注意线长奇偶校验。

非门

不栅极是不必要的,因为它是隐式的:简单地使用截止接一个导线长度,我们可以否定线的值。

子句门

现在,我可以演示一个简单的子句小工具;它将连接到根电线,并迫使其中一根处于“拉动”状态,并迫使另一根处于“推动”状态。我们可以使用它,这恰好是三分之一的关系;我们将奇数线状态设置为“ true”,将其他两个线状态设置为“ false”,然后进行设置。3

下图,说明从左至右:

  • 子句小工具的连线布局。它带有“加号”符号;一处连接3条电线。
  • 用独特的方块填充导线。
  • 中心广场的三个州。这些状态中的每一个都将一根导线“拉”入中心(闸门的基本点)。就像子句一样。1-in-3-SAT

在此处输入图片说明

现在让我们看一下不同的状态。下图,从左到右的描述:

  • 左导线拉入中心;其他两个被推出。
  • 底部金属丝被拉入中心。其他两个被推出。
  • 右下方的电线被拉到中间;其他两个被推出。

在此处输入图片说明

现在,如果将具有正确长度奇偶校验(偶数或奇数长度)的电线连接到此门的末端,则只有其中一根可能是正确的,而另外两根可能是错误的(取决于您是否奇怪地连接,您可以将其概括为位)。因此,我们可以将值连接到 CNF子句中。31-in-3

其余限制包括:

  • 我们不能拆线,
  • 我们不能交叉电线,
  • 我们可能会遇到烦人的布局问题,因为我们必须注意线长奇偶校验。

分开电线

要拆分电线,我们首先将两根电线彼此相邻排列。接下来,作为视觉辅助,我们用两个正方形标记每根电线,一个正方形彼此相邻。这将使我们看到导线何时为“ true”:当导线在单个图块中的两个正方形时,则为true,否则为false。每根导线应具有自己的一对对,因此我们将命名一对和另一对。然后,我们引入三个新的命名唯一值,TTTT1T2a,b,c。我们将这三个放置在彼此相邻的位置,并在每条线上放置一次。但是,在一根线上,在平方与对之间保持单个平方。在另一条线上,在正方形之间放置两个正方形。a,b,cTa,b,c

下图,从左到右的描述:

  • 电线布局。请注意,墙壁有点厚,因此出于说明目的,将导线拉得更近一些;实际上,它们之间的距离较远。
  • 平方值;顶部的值,下面的连接器。Ta,b,c

在此处输入图片说明

这是迫使电线不要不同。如果被平铺在一根导线上,则第二根导线不能被一一分开,因为那将意味着被平铺在导线上。第二根导线,因此将被平铺两次。下图,从左到右的描述:a,ba,ba,b

  • 左导线的示例状态,值为true。
  • 第二根导线状态不良;它试图被赋予不同的价值,但随后得到了重复的对。
  • 第二根导线的状态良好,现在它们的值相同,并且没有重复的线对。

在此处输入图片说明

如果您尝试其他两种可能的状态,您会发现它也适用于那些状态,并且可以双向工作。因此,这两条线现在是相同的。我们已经成功地将电线分开了。我们可以使用任意一组新的来随意分割导线。a,b,c

其余限制包括:

  • 我们不能拆线,
  • 我们不能交叉电线,
  • 我们可能会遇到烦人的布局问题,因为我们必须注意线长奇偶校验。

无线电线!

好吧,令我高兴的是,拆线竟然是无绳的!也就是说,在上面的插图中,我将电线彼此相邻放置,但是没有理由这么做!我们可以将电线放置在网格上的任何位置,并且仍然可以说是“纠缠”。这为我们节省了很多麻烦:

  • 我们甚至不必担心导线交叉。这使我们减少了非平面变体3-SAT
  • 我们必须做任何烦人的布局,将电线移到其位置,这很容易!就像无绳电话一样!自由!
  • 我们不必担心线长奇偶校验/一对一的布局。
  • 我们可以将尺寸缩小到最小。每个变量将获得一组长电线,并且电线上有许多无线连接。这些连接将连接到子句门,这些子句门将位于网格中自己的位置。该子句现在仅由子句小工具和从其中伸出的三根无绳电线组成。

其余限制包括:

  • 我们不能交叉电线,
  • 我们可能会遇到烦人的布局问题,因为我们必须注意线长奇偶校验。

减少,第一次尝试

令为布尔公式。Φ(x)=iCi1-in-3-SAT

  • 对于每个,在网格底部附近,按行布置一条长导线。xjx
  • 对于每个,在网格顶部创建一个子句门;您可以随意布置它们;最好将其填满一个正方形区域,但是您也可以将其布置成一排。CiΦ(x)
  • 对于参与子句每个变量,将无绳电线放在子句门的电线引脚之一上;将每个连接的另一个放置到相应的可变导线/行上。否定的术语应将与子句的无绳连接距离更远,更改导线长度奇偶校验,并取反值。xjCi3a,b,c

它可能是什么样的:

  • 图:一个子句,直接连接到无绳电线。从这里开始,“热点”就是我们象征。这些热点将分别连接到网格中的变量。a,b,c

在此处输入图片说明

这是网格的外观:

  • 图:最终的游戏板。变量在底部排成一行。这些条款分布在顶部。这种布局产生二次爆炸。更智能的布局可以避免二次爆破。

在此处输入图片说明

最后一分钟的详细信息

回顾决策问题:

是否有一个完美的拼贴覆盖一个给定的网格,其中包含唯一的拼贴?(n+1)×(n+2)n

因此,对于网格,我们只能使用变量。但是我们的约简需要很多唯一变量,远不。有几种方法可以解决此问题。(n+1)×(n+2)nO(n)

  • 一种方法是在两个轴上平方网格的大小。因此,现在我们的网格只是,这意味着我们所有的唯一数字都可以由限制。然后,我们必须填补电网的其余部分,再利用我们独特的数字,但非常小心不要把任何数字,我们相邻,其他在我们的电网,毗邻其余的填充空间的每一个,其他的网格。有几种创造性的方法可以做到这一点,我将其作为练习。显然,这种方法会引起二次爆炸。O(|x|×|Φ(x)|)O(n)n
  • 另一种更简洁,更复杂的方法是使块多样化。不仅可以使用一个构建块,还可以使用构建块,然后可以重用它们配对的数字。这种方法使我们避免二次爆破。1O(n)

图源


很好的减少!只是出于好奇:您如何证明缺失的线对(在将电线-墙体-小工具放置在板上之后)可以(在多项式时间内)打包成矩形(n + 1)x(n + 2)网格?我曾想过类似的简化,但是没有弄清楚如何证明“未使用的”对可以排列在一个(可能更大的)矩形中(游戏规则规定,每个带有图块在一个有效dominosa板使用)a ib i = 1 .. n[ai,bi]ai,bi=1..n

我将所有这些注释移到我的答案中,并在下一个大修订中使其更加全面。
Realz Slaw 2013年

好的,我等一下!
2013年

@RealzSlaw,非常感谢!我仍然没有时间阅读本文,但看起来非常不错。
Yoav bar sinai

@RealzSlaw,有没有办法直接与您联系?
Yoav bar sinai
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.