DominosaはNPハードですか?


26

Dominosaは比較的新しいパズルゲームです。(n+1)×(n+2) グリッドで再生されます。ゲームが始まる前に、ドミノの骨 (0,0),(0,1),,(n,n) (完璧なタイリングを構成する)グリッド上に配置されています。次のステップでは、ドミノのボーンが非表示になり、数字のみが表示されます。ゲームの目的は、ドミノの骨の元の配置を回復することです。ここでゲームをプレイできます:http://www.puzzle-dominosa.com/

ルール:

ルールは簡単です。グリッド上のすべてのドミノの場所を見つける必要があります。ドミノは数字のペアです。各ペアは1つしか持てません。

パズルの比較的小さな部分を解決する多項式アルゴリズムがいくつかあります。また、典型的なDominosaグリッドには少なくとも2n2+o(n)ソリューション。

DominosaはNPハードですか?


「パズルは、SATまたはILPの問題に簡単に縮小できる可能性があります。」NP完全性を証明するために、他の方法を望んでいませんか?
デニス

1
@DennisMeng質問で言及された削減のポイントは、問題がNPにあることを証明することです。そのため、NPが難しいことを証明するだけです。ちなみに、問題がNPにあることを確認するために削減する必要はありません。ドミノの配置は、それ自体が可解性の多項式サイズの証です。

私は、NP完全性が問題になっている問題は、数字の配列が与えられた場合、ドミノの配列に起因するものであると仮定しています。問題が実際にドミノの配置を示すことである場合(存在する場合)、その問題は決定問題ではなく、「NP完了」は意味をなしません。

@AndreasBlassまた、より大きな問題を考慮することができます:1からnまでのドミノのk要素のサブセットを考える1n、グラフGを有する2k頂点は、標識された1n、与えられたドミノでそれをカバーすることが可能であるかどうかを決定します。この問題がPにある場合、エッジを削除してグリッドを完成できるかどうかをP時間でテストできるため、元のタイルを復元するP時間アルゴリズムがあります。

1
G. Nordhの一般化されたマルチスコーレムシーケンスのNP完全性と呼ばれる論文によると、次の同様の問題はNP完全です。例:AグラフG=(V,E)、互いに素なセットにエッジのパーティション:E1,E2,...,Em,|m||V|/2 with |Ei|2, i=1,,m同じラベルを持つ2つのエッジが頂点を共有しないようにします。QUESTION:サブセットがありますME ii = 1 m|M|=|V|/2 M内の2つのエッジが共通の頂点を共有しないように、Mはそれぞれから多くても1つの縁部に含むようにEi, i=1,,m
Yoavバーシナイ

回答:


9

注:これは、他の回答の続きと改訂です。

削減の問題

決定の問題を思い出してください。

与えられた(n+1)×(n+2)グリッドをnユニークなタイルで覆う完璧なタイルはありますか?

そのため、(n+1)×(n+2)グリッドでは、n変数のみを使用できます。

しかし:

  • 削減には、On よりもはるかに多くの一意の変数が必要です。O(n)
  • さらに、当社のワイヤはオープンエンドであり、次のことにつながります。
    • 空き領域をタイル化できることをどのようにして知るのですか?

最初の問題を解決するために、ゲームボードを人為的にはるかに大きくしています。基本的に、nを実際に必要な変数の数に等しくしてから、サイズのグリッドを作成します左下隅に配置します。これにより、二次爆発が発生します。(n+1)×(n+2)

2番目の問題については、ガジェットを少し再考する必要があります。

ルールに従ってボードの残りの部分を正常にタイリングできることを証明するのは、少々気難しいかもしれません。そこで、実際にサイズのゲームボードを生成するのに使用するのと同じ戦略から始めます(n+1)×(n+2)

最初に、すべての可能なタイルのセットを生成します。これらのタイルはすべてボードに配置する必要があります。次に、タイルを削除し、正方形を残します。

ただし、ガジェットは特定のタイルセットが配置されることを保証しません。配置されるタイルは状態によって異なります。我々は慎重にするガジェットを変更する必要がありますので、保証、特定のタイルを、状態が選択されているに関係なく削除されます。

それでは、ガジェットを見ていきましょう。

ワイヤーと節ゲートは2つの理由で問題があります。

  1. ワイヤまたは節ゲートを囲む正方形が正しくタイル表示できることはわかりません。結局、一部のワイヤは左に、他のワイヤは右に押すことができ、残りの空白の正方形を並べることは簡単ではなくなります。この問題を「フロー」問題と呼びます。
  2. どのタイルがタイルセットから削除されるか知る方法はありません。ある状態では、ワイヤーまたは節ゲート内の1組の正方形がタイル状になり、別の状態では、まったく異なる正方形のセットがタイル状になります。

これらの問題を解決するには:

  • 最初に、可能なすべてのタイルのセットを生成します。これらのタイルはすべてボードに配置する必要があります。ボードに配置したら、セットからタイルを削除します。最初は知らないかもしれないけどんが、定式化をまだ完全に説明していないので、必要に応じて nをインクリメントしながら新しいタイルの可能性をすべて追加できます。このセットから削除するすべてのタイルは、配置可能であることが保証されている必要があります(少なくとも、式が満たされる場合は、配置可能であることが保証されている必要があります)。ゲームボードに配置する義務を果たすために、タイルセットからタイルを削除して、タイルセットからタイルを「放電」します。nn
  • どの状態が選択されても、特定のタイルが削除されることを保証するために、ガジェットを慎重に設計する必要があります。
  • ガジェットを閉じて、状態に応じてボード全体にタイルを押し込まないようにする必要があります。むしろ、すべての州は特定の明確に定義された領域のみを占有しなければなりません。
    • あるいは、すべての州が明確に定義された領域を占有できること保証する必要あります。これにより、満足のいくタイリングが保証されますが、特定のタイリングが発生することは保証されません。これは、Dominosaゲームの作成方法と同じです。
      • 最初に、タイルがセットに生成されます。
      • 次に、タイルはランダムな構成で配置され、
      • 各タイルが配置されると、タイルセットから削除されます。
      • その後、タイルがボードから削除され、正方形が残ります。
      • これは、意図した構成選択れることを保証するものではありません。
      • むしろ、意図した構成を選択できることを保証するため、ソリューションが存在します。ここでも同じことができます。
  • 独自のを配置する代わりに、製剤のすべてのガジェットを配置した後、デフォルトで正方形、つまりすべての「空白」に、空白が1次元の長方形の領域であることを確認するか、空白を1次元の長方形に分割します、タイルセット内の残りのタイルで空白を並べるだけです。
  • セットからすべてのタイルを配置すると、すべてが配置可能であることがわかります。
    • 壁のタイルなど、明らかに配置可能なタイルもあれば、ガジェット間の関係の性質上、式が満たされる場合にのみ配置可能なタイルもあります。
  • 次に、タイルを削除し、正方形を残します。

それでは、ガジェットを見ていきましょう。

強制的なガジェット

それぞれが自分自身とペアリングできないようにすることで、任意の数のビルディングブロックを作成できます。

たとえば、私たちが強制的にしたいとしましょうので、我々が使用できることを、タイルを1 ⋆をビルディングブロックとして。(音符、1 我々は自身にペアとして強制する任意の変数であり、必ずしもビルディングブロック我々は、使用される1(1,1)111以前の値)

私たちのことを保証するために、 -buildingブロック埋蔵1 11、我々は次のような構成で底壁に対してそれを配置します:我々は、予約番号を配置します、私たちはそれを呼びましょう 1 ANのような壁にアップタック⊥のような形); 壁に3つ、中央の2列目に1つ。その後、我々は、他の2つの数値を置く私たちはそれらを呼び出すようになる 2 3。これらはこのガジェットに固有のものです。私たちは、左右の上にこれらを置く 1 (1,1)13231

以下に示すように、共有の黒い境界線はゲームボードの下部にあり、左から右への説明です。

  • ガジェットの構成。各3ここでは、このガジェットに固有のものです。23
  • 中心タイリングの3つの可能な状態の1

ここに画像の説明を入力してください

これを実行した後、私たちは私たちのガジェットがあることを保証することができますすることができます私たちのガジェットがいることを保証しながら、タイルの特定のセットでタイル状にする必要があります強制のペアを。(1,1)

  • 私たちは、それは知っているが低いために、中央のすべての3つの可能なタイル張りの状態、行われなければならない1 として、タイル1 1 (1,1)1(1,1)の上に、右図に示すように、。
  • 残りのタイルができるようにタイル張りされる及び1 3 ガジェットを覆います。したがって、これらのタイルをグローバルタイルセットから削除できます。以下に説明します。(1,2)(1,3)

説明、左から右:

  • 左、上:左の状態、左、下:残りの正方形の有効なタイル。
  • 中央、上:中央の状態、中央、下:残りの正方形の有効なタイル。
  • 右、上:右の状態、右、下:残りの正方形の有効なタイル。

ここに画像の説明を入力してください

注、残りの正方形のタイル張りがされていないことを強制、彼らは近くの隣人の代わりとタイルすることができますので、それはすべての状態でゲームボードの有効なタイル張りであるため、しかし、我々はからそれらを削除することができますタイルセット、およびそれらがまさにその方法でタイル張りされると仮定します。有効な可能性のあるタイリングがあることがわかっているため、式が満足できる場合、ゲームボードの少なくとも1つの可能性のあるタイリングがあります。これらは、このようにタイル張りされるという保証はありませんが、という保証はあり1 1 タイルが強制されますが。1(1,1)

注:これに満足していない場合、または「タイル化が可能」と「タイル化を強制」の違いに困惑している場合は、ガジェットの周りに壁を配置するだけで済みます。作る3 × 2節-ガジェットについては、以下の壁を。3×23×2

このガジェットは閉じている必要はありません(閉じていてもかまいません)。実行可能な構成があり、タイルセットから削除できるため、その必要はありません。別の構成を行うことは可能かもしれませんが、これは問題の充足可能性には影響しません。

以下のタイルは(したがってタイルセットから削除することができます)タイル張りされることが保証されています (1,1)

次のタイルはタイル化できることが保証されています(したがって、タイルセットから削除できます)。 (1,2),(1,3)

このガジェットを壁で閉じることを選択した場合、1213もカバーされることが保証されます。

新しいワイヤーおよび節ゲート

フローの問題とタイルセットを空にするため、ワイヤを少し再設計する必要があります。

フローの問題を解決する1つの方法は、単純な左右の状態ではなく、ワイヤを回路にすることです。つまり、線ではなく円形になるため、円の上部を右に押すと、下部が左に押されます。これにより、フローの問題が解決されます。

このルートに従って、ワイヤと節ゲートを変更して、両方の問題を解決できます。

予約するFをTF

2つの新しい普遍的な価値を紹介しましょう。 Fを。これら2つの値は普遍的です。グリッド内の実際の値(平方値 2および 3など)(慣例により、 1TF231を壁のビルディングブロックとしてているため)など)、または任意の値。それらはそれぞれ真と偽を表します。

タイルを強制的に予約TFFFします。下の図、左から右への説明:TTFF

  • 我々は、任意の強制と同じスキームを使用する、タイルを使用してTのよう11T。各 2 3123ここでは、このガジェットに固有のものです。
  • 私たちは、任意の強制と同じスキームを使用する使用して、タイルをFを通り1 23ここでは、このガジェットに固有のものです。11F123
  • 私たちは、強制と同じスキームを使用する使用して、タイルをFを通り1 11F1中心に、及び使用アップタックの他の場所に。これはFTを強制的にタイル化します。23でタイルすることができますTFT23我々はタイルセットからそれらを削除して、。各 2 3ここでは、このガジェットに固有のものです。T23

ここに画像の説明を入力してください

ワイヤー

各ワイヤは、開始値と終了します、私たちはそれを呼び出してみましょうA線にユニークです。各句ワイヤ参加中のために、ワイヤは、2ワイヤ値を有する、及びX '、各ワイヤに固有である、と同じ句に参加します。以下の図と、左から右への説明。バツバツ

  • 1つの節に参加するワイヤ。ワイヤの高さはで、長さは2 p + 3です。ここで、pはワイヤが関与する節の数です。ワイヤには、左側に2つA⋆正方形、右側に2つの正方形が埋め込まれます。もちろん、すべての側面が青い輪郭で示された壁に囲まれています。なお、1 この線にユニークで、かつワイヤのみに使用され、句はそれがに参加しています。22p+3pA1

ここに画像の説明を入力してください

以下に、2つの状態、左から右への説明を示します。

  • 真の状態で、1つの節に参加するワイヤ。ワイヤはときに、真であると考えられる正方形をして対になっているTの正方形、およびX '正方形をして対になっているFの正方形。タイルが逆になっている他の状態では偽と見なされます。タイリングを一度に強制されるか注意A タイルが選択されている:TFバツTバツFATFすでにので、タイルの残りの部分は水平でなければならない、それ以前に強制されています。
  • 偽状態の同じワイヤ。

ここに画像の説明を入力してください

複数の節に参加したときに、そこより多くの価値ある 、及びX '、各句の一対。彼らは、頂部及び底部に代替されると、としてないで、ワイヤ参加TFそれぞれ分離正方形XをX ペア。バツバツTFバツバツ

ここに画像の説明を入力してください

2つの対応する状態。

ここに画像の説明を入力してください

このガジェットは閉じられているため、「フローの問題」はありません。

注いずれかの状態では、我々は次のタイルを収集する方法、無の状態を問題では: A TA FAAATAF

ただし、いくつかのタイルがありますが、それらは不明です。一方の状態では、除去することができるタイルセットから、別の状態では、削除することができながら、 1 F 1 ' T 21T1F2T2Fタイルセットから、どのタイルを実際に削除できますか?答えは次のとおりです。句ゲートにも同じ問題がありますが、タイルの反対のセットがあります。次のセクションで説明するように、残りの反対の未収集のタイルを常に収集します。これらはそれぞれ節ゲートとペアになっているため、両方を削除できます。(1,F),(1,T),(2,F),(2T)

次に、新しい節ゲートの最初の反復を作成します。壁で囲まれたガジェットで構成されています。ガジェット内に、Fを1つ配置します2×3Fを中央上部に配置し、2つの正方形を下隅に配置します。1つは左下に、もう1つは右下にあります。残りの正方形は、3つの異なるワイヤのワイヤ変数を表す値になります。私たちはこれらの呼びましょうA B およびC 。のTabcワイヤの変数の一つと対に強制され、残りのワイヤの変数はと対であろう Tの値。下の図、左から右の説明。FT

  • 左:新しい句ゲートの最初の反復の構成。
  • タイリングの3つの可能な状態。F

ここに画像の説明を入力してください

これらの3つの状態は、3つのタイリングにつながります。以下の図、左から右への説明。

  • 左、上タイル左、左、下:残りの正方形のタイル。F
  • 中央、上右にタイル、中央、下:残りの正方形をタイルします。F
  • 右、上タイルダウン、右、下:残りの正方形のタイル。F

ここに画像の説明を入力してください

F以来F節内のワイヤー変数の1つとペアになる、そのワイヤー変数はワイヤー内のとペアにできなくなります。したがって、ワイヤをtrueに強制します。逆に、Tでタイリングする残りのワイヤー変数は、ワイヤー内でFでタイリングされます。これは、1 - in - 3 - S A T句とまったく同じ制約です。F TF1-に-3-SAT

メモ、B 及びC ワイヤ変数であるが、これらはそれぞれ参照することができ、X またはX 'ワイヤ変数。を使用してabcバツバツことは、本質的にワイヤ変数を無効にすることです。バツ

さらに、どのタイルをタイルセットから削除できるかを知る義務を果たすには、この条項を「二重かつ反正」にする必要があります。私はこれで何を意味するか、別のようにすることですで、ガジェットを3つの追加の否定表す変数⋆をB およびC 。私たちはこれら呼ぶことにしましょうA "B "およびC "。これらがなければならないの否定可変ワイヤ値であり3×23abcabcおよび C 。この 3 × 2ガジェットは異なり中心に Tがあり2つの FTX 'FX FXabc3×2TFコーナーの値。これまで説明した句ガジェットの正反対。このように句を「二重化」することにより、上記のガジェットと同じ制約を再度追加します。しかし、我々はまた、すべての組み合わせ放電 タイルセットから、各変数に対する(したがってためB 及び C 同様に、それらはすべて後であるため、ワイヤの変数)。以下に、説明を左から右に示します。TバツTバツFバツFバツabc

  • 「二重の反正」条項。下部のセクションは上記の条項です。上部のセクションは、新たに記述された反対の条項です。新しい句には、まったく同じ論理的制約があります。それは下の条項の反対です。一緒に、これらの組み合わせガジェットワイヤ放電の組合せの全てタイルセットから、用条項に参加する各ワイヤー変数。TバツFバツTバツFバツ
  • 左端の図の中央にある青い線は、見やすくするためのものです。実際には、これ以上状態を許可せずに削除できます。

ここに画像の説明を入力してください

そこで、例を挙げて、すべてのタイルが約束どおりに放電されることを示しましょう。以下に、左から右への説明を示します。

  • 単一の条項に参加しているワイヤーの図。句の状態が選択されます。ここで、我々が使用している、つつ及びB この句に他のワイヤの値を表しています。1=bab
  • 句で指定された状態のために、値が隣接して対にすることを余儀なくされているT1T
  • これにより、ワイヤは強制的に真値になります(ワイヤの正の変数はとペアになり、負の変数はFとペアになります)。TF
  • これにより、反正の句(句の上部セクション)のが、句内でTとペアになります。ワイヤを見ると、ワイヤ内のすべてのタイルが放電されることが保証されています。ワイヤ自体または対応する節ガジェットで放電されています。この状態で、我々は、タイル、有するA A A TA F1 T1TAAATAF1T。、1 'F、および1 'T1F1F(1,T)

ここに画像の説明を入力してください

他の状態を試すと、下の図の説明が左から右に表示されます。

  • 句は、タイリング、他の状態である 2つの方法のいずれかで。(1,T
  • したがって、ワイヤ上強制され、(1,F
  • ワイヤの残りの部分を対応するタイルに導き、ワイヤをfalseとして評価します。
  • 最後に、句・ガジェットのcontrapositive /上部に、マストタイルため1 'Tはワイヤに取り込まれます。この状態では、我々は、タイルを持っているA A(1,F)(1,T)A TA F1 T1 Fを(A,A)(A,T)(A,F)(1,T)1 'F、および1 'Tこれらは、他の状態と同じように放出されたタイルです。(1,F)(1,F)(1,T)

ここに画像の説明を入力してください

したがって、どちらの状態でも、同じタイルを放電します。したがって、ワイヤと句は、満足のいく割り当てがある場合に、特定のタイルを正常に放電します。

このガジェットは閉じられているため、フローの問題は発生しません。 節ガジェットとワイヤガジェットは、常に同じタイルペア値を放電することが保証されているため、どの方法でタイル化するかわからなくても放電できます。

これで、すべてのガジェットが基準を満たしました。

処方

最終的な定式化では、それぞれが水平の壁で区切られた3行のガジェットを作成します。

  • 下部には、2枚のタイルである強制ガジェットを配置します。ビルディングブロック、およびFの組み合わせ用の強制ガジェットが必要です。強制ガジェットを互いに直接隣接して配置します。TF
  • 中央の行に、2つの高さのワイヤーガジェットを水平に配置します。ワイヤーガジェットは、垂直の壁で互いに分離する必要があります。
  • 一番上の行には、4タイルの高さの節ガジェットを配置します。節ガジェットは、垂直の壁で互いに分離する必要があります。

各図の上に説明が続きます。フル解像度の画像をクリックします。画像を再現/生成するためのソースコードは、ページの下部にリストされています。

式を用いて、一例として、我々は溶液を満足する¬ X 1はxは2XΦ(バツ=バツ1¬バツ2バツ3バツ2¬バツ3バツ4バツ1バツ2¬バツ4¬バツ1バツ2バツ3¬バツ4 証人として。

まず、ガジェットの行を分離する水平の壁から始めます。正方形と、壁の中にタイルを張るペアを示します。

ここに画像の説明を入力してください

次に、ガジェットを表示します。青いアウトラインは、ガジェットの境界を表します。フォーシングガジェットは壁で囲まれていないため、破線で青く表示されます。句ガジェットの中央の線は壁で囲まれていないことに注意してください。見やすくするためにあります。上記で説明したように、この行を削除しても、句内でこれ以上状態が発生することはありませんが、このデモでは青い線を示しています。注:必要に応じて、数字にセマンティックな読みやすさを与えるために正方形名を使用します。各名前は数値を表します。

ここに画像の説明を入力してください

ここで、垂直の壁を埋めます。

ここに画像の説明を入力してください

ここで、証人のソリューションを記入します。つまり、SATソリューションを使用して生成する場合、これはタイルソリューションです。

ここに画像の説明を入力してください

次に、フィラーエリアをタイルします。残りのボード、必要な大きさ、nこれまでのタイル化にはが必要です。したがって、タイルセットの残りのペアを放電します。ここの破線は、有効だが強制されていないタイリングを表しています。これらを並べる別の方法があるかもしれません。ここでは、左下隅を示しています。

ここに画像の説明を入力してください

ここで、残りの四角に簡単な有効なタイルを入力します。

ここに画像の説明を入力してください

ここでは、グリッドの右下隅を示しています。

ここに画像の説明を入力してください

ここでは、グリッドの右上隅を示しています。垂直タイルが収まらないことに注意してください。必要に応じて、上の行を水平に並べます。

ここに画像の説明を入力してください

そして最後に、左上隅。

ここに画像の説明を入力してください

TeXを介してゲームボード全体を一度に生成すると、pdflatexのメモリ不足エラーで失敗するため、見たい場合は、クリップを生成してパッチを適用する必要があります。ノートブックビューアを必ずチェックしてください。


TikZソース

ゲームジェネレーター:

  • graphtex.py

    pdflatex、pdfcairo(poppler)、およびrsvg-convert(libsvg)を使用してTeXをsvgに変換します

  • dominosa.py

    変換ロジック、ゲームソリューションの検証、描画ロジックが含まれています

  • dominosa_demo.py

    上記の回答で使用される画像を生成する実行可能なデモ。現在の作業ディレクトリに画像をダンプします。

  • dominosa_demo.ipynb

    上記の回答で使用される画像を生成するipythonデモ。


1
これはspactacularです..そんなにありがとう
ヨアフバーシナイ

2
そのarXivバージョンがあることを教えてください。それはあり、このプラットフォームは、完全な紙にラフスケッチやリンクが含まれるようにするために、より合理的です。
ラファエル

22

はNPハードDOMNOSA


ゲームのプレイは最適化の問題です。すべての正方形をカバーするような有効なドミノタイルを見つけます。この問題の決定バージョンは次のとおりです。

与えられたグリッドをn個のユニークなタイルで覆う完璧なタイルはありますか?n+1×n+2n

明らかに、最適化の問題、つまり実際にゲームの解決策を見つける問題は、少なくとも決定の問題と同じかそれよりも難しいです。

1-3-に-SAT式を充足割り当てがあります。さらに、カバーを実際に使用して、満足のいく割り当てを回復できます。

P=NPDOMNOSA

1-3-に-SATDOMNOSA

前書き

3-SATCIRCうんTSAT

CRCうんTSATPLANAR-CRCうんTSAT

3-SATPLANAR-CRCうんTSAT3-SATPLANAR-CRCうんTSAT

PLANAR-3-SATPLANAR-CRCうんTSATな削減を支援するために、あります。

3-SAT

1-に-3-SAT1-に-33-SAT使用するすることは非自明であり、巨大な構造になります。

MONOTONE-1-に-3-SATです。モノトーンは、値を簡単に否定できない構造を持っている場合、物事を非常に単純にします。

MONOTONE-1-に-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ハードです
  5. シェーファーの二分法定理
  6. 完全な自動パーティションを見つけることはNP困難です
  7. 平面内の最適なバイナリ空間パーティション

3-SAT

「ガジェット」とは何ですか?ガジェットは問題の一部の構成であり、ゲート/ワイヤ/節を構築するためのビルディングブロックとして役立ちます。一部のガジェットには、制限された状態のセットがあります。たとえば、2つの状態を持つガジェットを変数として使用できます。1つの状態は「true」で、もう1つの状態は「false」です。「長く」、曲げ、分割できる2つの状態を持つガジェットは、ワイヤとして役立ちます。変数と相互作用し、変数の状態を別の場所に拡張するように制約される場合。正確に3つの状態を持つガジェットは、おそらく句として使用できます。3つの状態のそれぞれを介して「3つのうちの1つ」のワイヤを制約するために使用できる場合。同様に、非ガジェット、ORガジェット、XORガジェットなど、あらゆる種類の論理ゲートが必要になる場合があります。

ビルディングブロック

  • 11他のすべてのためのビルディングブロックを。
  • 11にます。ただし、このコーナーは必要な場合を除きます。
  • 下(3つの図)はコーナーであり、を配置する方法1そこにです。
  • を使用しますを、すべての図のすべてのグリッドで一意の値を示します。

ここに画像の説明を入力してください

3   1(1,1) (1,1)

45(1,1)

4

以下の画像、左から右:

  1. 1
  2. 1
  3. 1
  4. 強調のために描かれた壁線。

ここに画像の説明を入力してください

ワイヤーでの最初の試み

1

壁の境界のみを表示します。これは下の図で得られます(左から右):

  • 2つの壁を互いに反対側に配置します。
  • 固有の番号を内部に配置します。
  • 右端2つ:ワイヤの2つの可能な状態。

ここに画像の説明を入力してください

使い方:

チューブ/ワイヤに穴を開けることはできません。したがって、タイルを上に移動する場合は、チューブに沿ってタイルをすべて上に移動する必要があります。それらが下にシフトされると、それらはすべて「吸い込まれ」ます。したがって、ワイヤの一方から他方に「信号」を送信できます。つまり、値を伝播します。

したがって、今では長距離にわたって値を伝播できます!

残りの制限は次のとおりです。

  • ワイヤーを曲げることはできませんが、
  • ワイヤーを分割することはできません。
  • ワイヤーを横切ることはできません。
  • 配線長のパリティに注意する必要があるため、迷惑なレイアウトの問題が発生する可能性があります。

ワイヤーの曲げ、パート1:下の壁

次の問題は、まっすぐ進むだけでなく、ワイヤーを曲げることができる必要があることです...

そう。曲げ部分を2つの部分に分けます。上部と下部。まず下の部分。ベンドの上部を無視します。後で行います。

以下の図は、曲げに関する問題を示しています。ワイヤーの上部が「ゆるい」ため、鋭い90度に曲がる壁を作るのは難しいようです。

左から右へ:

  • ワイヤの上部は「緩い」です。
  • 曲げようとするとどうなりますか。青い線の間に配線する必要があります。再び、が、ベンドの上部無視します。後で行います。
  • 1

ここに画像の説明を入力してください

1つの解決策は次のとおりです。

  • (x,1)xqx1111

下の図、左から右への説明:

  • 問題のある状況。
  • q1秒が)。
  • 1

ここに画像の説明を入力してください

qqそれを妨げることはありません。

左から右へ:

  • 現在の構造。
  • q

ここに画像の説明を入力してください

11

(r,1)r1

下の図、左から右:

  • 現在の建設。
  • 1
  • r1

ここに画像の説明を入力してください

そして、最終的に下曲げが得られます。以下の図、説明、左から右:

  • 左:ベンドの最終構造。
  • 右:ワイヤを左に続ける方法。

ここに画像の説明を入力してください

ワイヤーの曲げ、パート2:上の壁

ベンドの上部コーナーを作成する壁は、はるかに単純です。垂直の壁を水平の壁に簡単に合わせます。下の図、左から右への説明:

  • 私たちが作りたいワイヤーベンド。
  • 壁の正方形の垂直断面を下に置きます。
  • 垂直壁の正方形のタイル。
  • 水平壁の配置とタイル張り; それは垂直の壁に会い、角を形成することができます。

ここに画像の説明を入力してください

これで、ワイヤを配置して曲げることができると確信できるはずです。ただし、ワイヤを分割またはクロスすることはできません。詳細については、後で説明します。

残りの制限は次のとおりです。

  • ワイヤーを曲げることはできませんが、
  • ワイヤーを分割することはできません。
  • ワイヤーを横切ることはできません。
  • 配線長のパリティに注意する必要があるため、迷惑なレイアウトの問題が発生する可能性があります。

大切なワイヤー

7TFTFそれらを区切る正方形。以下に、左から右に説明を示します。

  • 左:ワイヤー。
  • 右:二乗構成。

ここに画像の説明を入力してください

TF

  • 左、右:価値のあるワイヤの2つの状態。
  • T
  • F

ここに画像の説明を入力してください

3-SATを接続して同じ値にするか、奇数の長さで接続する場合は、異なる値にすることができます。ワイヤを使用して、グリッド全体でこの長距離を行うことができます。ワイヤを使用して、名前付き変数の値を場所全体に伝播できます。

残りの制限は次のとおりです。

  • ワイヤーを分割することはできません。
  • ワイヤーを横切ることはできません。
  • 配線長のパリティに注意する必要があるため、迷惑なレイアウトの問題が発生する可能性があります。

ゲートなし

A ではない-ゲート単に我々は、ワイヤの値を無効にすることができ、オフずつ配線長を使用して:それは暗黙的であるように不要です。

節の門

これで、簡単な句のガジェットをデモンストレーションできます。接続します3本のワイヤに、そのうちの1本を強制的に「プル」状態にし、他の2本を「プッシュ」状態にします。これを使用できます。これは、正確に3分の1の関係です。奇数のワイヤ状態を「true」を意味するように設定し、他の2つのワイヤ状態を「false」を意味するように設定します。

以下の図、左から右への説明:

  • 条項ガジェットのワイヤーレイアウト。「プラス」記号を作成します。1つのスポットで3本のワイヤを結合します。
  • 1-in-3-SAT

ここに画像の説明を入力してください

それでは、さまざまな状態を見てみましょう。下の図、左から右への説明:

  • 左のワイヤーは中央に引き込まれています。他の2つは押し出されます。
  • 下部のワイヤは中央に引き込まれます。他の2つは押し出されます。
  • 右下のワイヤは中央に引き込まれています。他の2つは押し出されます。

ここに画像の説明を入力してください

31-in-3

残りの制限は次のとおりです。

  • ワイヤーを分割することはできません。
  • ワイヤーを横切ることはできません。
  • 配線長のパリティに注意する必要があるため、迷惑なレイアウトの問題が発生する可能性があります。

ワイヤーの分割

TTTT1T2a,b,ca,b,cTa,b,c

下の図、左から右への説明:

  • ワイヤーレイアウト。壁は少し太いので、説明のためにワイヤを近づけて描いています。実際には、それらは少し離れています。
  • Ta,b,c

ここに画像の説明を入力してください

a,ba,ba,b

  • trueと評価された左のワイヤの状態の例。
  • 2番目のワイヤの不良状態。異なる値を付けようとしますが、重複するペアを取得します。
  • 2番目のワイヤの状態は良好で、現在は同じ値であり、重複するペアはありません。

ここに画像の説明を入力してください

a,b,c

残りの制限は次のとおりです。

  • ワイヤーを分割することはできません。
  • ワイヤーを横切ることはできません。
  • 配線長のパリティに注意する必要があるため、迷惑なレイアウトの問題が発生する可能性があります。

コードレスワイヤ!

さて、嬉しいことに、ワイヤを分割することはコードレスであることが判明しました!つまり、上の図では、ワイヤーを隣同士に配置していますが、その理由はありません!ワイヤーはグリッド上のどこにでも配置できますが、いわば「絡み合った」ままです。これにより、多くのトラブルを回避できます。

  • 3-SAT
  • 迷惑なレイアウトを行い、ワイヤーをそれぞれの場所に配置する必要があります。簡単です!コードレス電話のように!自由!
  • ワイヤ長のパリティ/オフバイワンのレイアウトについて心配する必要はありません。
  • 最小限のサイズの縮小を行うことができます。変数はそれぞれ、長いワイヤストリップの単一セットを取得し、ワイヤに沿って多くのコードレス接続を行います。これらの接続は節ゲートになり、グリッド上の独自の場所に存在します。この節は、節ガジェットとそこから突き出た3本のコードレスワイヤーのみで構成されます。

残りの制限は次のとおりです。

  • ワイヤーを横切ることはできません。
  • 配線長のパリティに注意する必要があるため、迷惑なレイアウトの問題が発生する可能性があります。

削減、最初の試み

Φ(x)=iCi1-in-3-SAT

  • xjx
  • CiΦ(x)
  • xjCi3a,b,c

どのように見えるか:

  • a,b,c

ここに画像の説明を入力してください

そして、グリッドは次のようになります。

  • 図:ゲームボードの結果。変数は下の行に並んでいます。条項は上部に広がっています。このレイアウトは、二次爆発をもたらします。よりスマートなレイアウトは、二次爆発を回避できます。

ここに画像の説明を入力してください

直前の詳細

決定の問題を思い出してください。

与えられた(n + 1 )× (n + 2 )グリッドをn個のユニークなタイルで覆う完璧なタイルはありn+1×n+2n

n+1×n+2 グリッド、使用できるのは n変数。しかし、この削減には多くの一意の変数が必要です。On。この問題を解決するにはいくつかの方法があります。

  • 1つの方法は、両方の軸のグリッドのサイズを2乗することです。だから今私たちのO|バツ|×|Φバツ| グリッドは単に On、つまり、すべての一意の番号は、 n。次に、グリッドの残りを埋め、一意の番号を再利用する必要がありますが、グリッド内で互いに隣接する番号、残りのフィラースペースで互いに隣接する番号を配置しないように非常に注意してくださいグリッドの。これを行うにはいくつかの創造的な方法がありますが、これは演習として残しておきます。この方法では、明らかに二次的な爆発が追加されます。
  • 別の、より簡潔で、より複雑な方法は、 1ブロック。1つのビルディングブロックの代わりに、次を使用できます。Onビルディングブロックを作成すると、ペアになった数字を再利用できます。この方法により、2次拡大を回避できます。

グラフソース


すてきな削減!ただの好奇心:ワイヤーウォールガジェットをボードに配置した後、不足しているペアが(多項式時間で)長方形(n + 1)x(n + 2)グリッドにパックできることをどのように証明できますか?私は同様の削減を念頭に置いていましたが、「未使用の」ペアが(おそらくより大きな)長方形(すべてのタイルが[ab]ab=1 ..n 有効なドミノサボードで使用されます)
Vor

これらすべてのコメントを回答に移動し、次の大きな改訂でより包括的なものにします。
リアルツスロー

OK、待ってます!
Vor

@RealzSlaw、ありがとうございます!私はまだこれを読む時間がありませんでしたが、とても素敵に見えます。
Yoavバーシナイ

@RealzSlaw、直接連絡する方法はありますか?
Yoavバーシナイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.