Apakah Dominosa NP-Hard?


26

Dominosa adalah permainan puzzle yang relatif baru. Ini dimainkan pada kotak . Sebelum permainan dimulai, tulang domino diletakkan di atas kisi (membentuk ubin sempurna ). Pada langkah berikutnya, tulang domino disembunyikan, hanya menyisakan angka yang terungkap. Tujuan permainan ini adalah untuk memulihkan susunan tulang domino yang asli. Anda dapat memainkan game di sini: http://www.puzzle-dominosa.com/ :(n+1)×(n+2)(0,0),(0,1),,(n,n)

Aturan:

Aturannya sederhana. Anda harus menemukan lokasi semua kartu domino di kotak. Domino adalah sepasang angka. Anda hanya dapat memiliki satu dari setiap pasangan.

Saya memiliki beberapa algoritma polinomial yang memecahkan bagian puzzle yang relatif kecil. Saya juga bisa menunjukkan bahwa grid Dominosa tipikal memiliki setidaknya solusi.2n2+o(n)

Apakah Dominosa NP-Hard?


"Teka-teki dapat dengan mudah direduksi menjadi SAT atau masalah ILP." Untuk membuktikan kelengkapan NP, bukankah Anda ingin sebaliknya?
Dennis Meng

1
@DennisMeng Poin dari pengurangan yang disebutkan dalam pertanyaan adalah untuk menetapkan bahwa masalahnya ada di NP. Jadi yang tersisa adalah membuktikan bahwa itu NP sulit. Kebetulan, orang tidak perlu pengurangan untuk melihat bahwa masalahnya ada di NP. Pengaturan domino itu sendiri adalah saksi ukuran polinomial untuk solvabilitas.

Saya berasumsi bahwa masalah yang kelengkapan NP-nya dipermasalahkan adalah, mengingat susunan angka, apakah itu berasal dari susunan kartu domino. Jika masalahnya adalah benar-benar menunjukkan pengaturan kartu domino (bila ada), maka masalahnya bukan masalah keputusan dan "NP selesai" tidak masuk akal.

@AndreasBlass One juga dapat mempertimbangkan masalah yang lebih besar: Diberikan subset elemen dari domino dari ke , dan grafik dengan simpul berlabel ke , tentukan apakah mungkin untuk menutupinya dengan domino yang diberikan. Jika masalah ini ada di P, maka ada algoritma P-time untuk memulihkan ubin asli, karena Anda dapat mencoba menghapus tepi dan menguji dalam P-time apakah mungkin untuk menyelesaikan grid. 1 n G 2 k 1 nk1nG2k1n

1
Menurut sebuah makalah oleh G. Nordh yang disebut NP-kelengkapan urutan multi Skolem umum, masalah serupa berikut adalah NP-lengkap. : Grafik , partisi tepi menjadi set terpisah: dengan sedemikian rupa sehingga tidak ada dua tepi dengan label yang sama memiliki titik. PERTANYAAN: Apakah ada himpunan bagian dengan sedemikian sehingga tidak ada dua tepi di M berbagi simpul umum dan sedemikian rupa sehingga M berisi paling banyak satu sisi dari setiap ? E 1 , E 2 , . . . , E m , | m | | V | / 2 | E i | 2 , i = 1 , , m M E | M | = | V | / 2 E i , i = 1G=(V,E)E1,E2,...,Em,|m||V|/2|Ei|2, i=1,,mME|M|=|V|/2Ei, i=1,,m
Yoav bar sinai

Jawaban:


9

Catatan: Ini adalah kelanjutan dan revisi jawaban saya yang lain .

Masalah dengan reduksi

Ingat masalah keputusan:

Apakah ada ubin sempurna yang menutupi kotak dengan ubin unik?n(n+1)×(n+2)n

Jadi untuk kisi , kita hanya bisa menggunakan variabel .n(n+1)×(n+2)n

Tapi:

  • Pengurangan kami membutuhkan banyak variabel unik, lebih dari .O(n)
  • Selain itu, kabel kami bersifat terbuka, yang mengarah ke:
    • Bagaimana kami tahu bahwa kami dapat memasang ubin di area terbuka?

Untuk mengatasi masalah pertama, kami secara artifisial membuat papan permainan lebih besar; intinya kita membuat sama dengan jumlah variabel yang sebenarnya kita butuhkan, lalu membuat kisi ukuran , dan menempatkan kisi kita di sudut kiri bawah. Ini akan menyebabkan blowup kuadratik.( n + 1 ) × ( n + 2 )n(n+1)×(n+2)

Untuk masalah kedua, kita harus memikirkan kembali gadget kita sedikit.

Tampaknya agak menakutkan untuk membuktikan bahwa kita dapat berhasil memasang papan yang lain sesuai aturan. Jadi kita mulai dengan strategi yang sama yang akan digunakan untuk benar-benar menghasilkan papan permainan ukuran :(n+1)×(n+2)

Pertama, kami menghasilkan satu set semua ubin yang mungkin. Semua ubin ini harus ditempatkan di papan tulis. Lalu kami menghapus ubin, dan meninggalkan kotak mereka.

Namun, gadget kami tidak menjamin satu set ubin tertentu akan ditempatkan; ubin yang ditempatkan tergantung pada negara. Jadi kita harus hati-hati memodifikasi gadget untuk memastikan ubin tertentu akan dihapus, tidak peduli negara mana yang dipilih.

Mari kita pergi ke gadget kita.

Kawat dan gerbang klausa bermasalah karena dua alasan.

  1. Kita tidak tahu bahwa bujur sangkar yang mengelilingi kawat atau gerbang klausa dapat ditata dengan benar; setelah semua, beberapa kabel dapat didorong ke kiri, yang lain ke kanan, dan ubin kotak putih yang tersisa menjadi non-sepele. Kami akan menyebut masalah ini sebagai masalah "aliran".
  2. Tidak ada cara untuk mengetahui ubin mana yang harus dihapus dari ubin-set; di satu negara, satu set kotak, di kawat atau gerbang klausa, akan ubin, di negara lain, satu set kotak yang sama sekali berbeda akan ubin.

Untuk mengatasi masalah ini:

  • Pertama, kami menghasilkan satu set semua ubin yang mungkin. Semua ubin ini harus ditempatkan di papan; saat kami meletakkannya di papan tulis, kami akan menghapus ubin dari set. Meskipun kita mungkin tidak di kenal pertama , karena kita belum sepenuhnya menggambarkan formulasi, kita dapat menambahkan semua kemungkinan genteng baru seperti yang kita kenaikan , sesuai kebutuhan. Semua ubin yang kami hapus dari set ini harus dijamin placeable (setidaknya, dijamin placeable jika formula memuaskan). Kami memanggil menghapus ubin dari set-ubin, untuk "melepaskan" ubin dari set-ubin, seperti untuk melepaskan kewajiban kami untuk menempatkannya di papan-permainan.nnn
  • Kami harus merancang gadget dengan hati-hati untuk memastikan ubin tertentu akan dihapus, apa pun negara bagian yang dipilih.
  • Kita harus menutup gadget kita, sehingga mereka tidak mendorong ubin di sekitar papan tergantung pada negara mereka; alih-alih semua negara bagian mereka hanya harus mengambil area tertentu yang didefinisikan dengan baik.
    • Atau, semua negara mereka harus dijamin untuk dapat mengambil area yang didefinisikan dengan baik; ini menjamin ubin yang memuaskan, tetapi tidak menjamin bahwa ubin tertentu akan terjadi. Ini adalah cara yang sama dengan permainan Dominosa dibuat:
      • Pertama, ubin dibuat menjadi satu set;
      • Kemudian ubin ditempatkan dalam konfigurasi acak,
      • Karena setiap ubin ditempatkan, itu dihapus dari ubin-set.
      • Kemudian ubin dikeluarkan dari papan, meninggalkan kotak mereka.
      • Ini tidak menjamin bahwa konfigurasi yang dimaksud akan dipilih,
      • Sebaliknya, itu menjamin bahwa konfigurasi yang dimaksud dapat dipilih, dan dengan demikian ada solusi. Kita dapat melakukan hal yang sama di sini.
  • Setelah menempatkan semua gadget formulasi, alih-alih menempatkan kuadrat unik secara default, yaitu pada semua "spasi putih", kami memastikan spasi putih adalah area persegi panjang dengan satu dimensi genap, atau memecah ruang putih menjadi empat persegi panjang dengan satu dimensi genap, dan kami cukup ubin spasi putih dengan ubin yang tersisa di ubin-set.
  • Setelah menempatkan semua ubin dari set, kami tahu semuanya bisa dilakukan.
    • Beberapa ubin jelas akan dapat ditempatkan, seperti yang ada di dinding, yang lain akan dapat ditempatkan hanya jika formula memuaskan, karena sifat hubungan antara gadget.
  • Lalu kami menghapus ubin, dan meninggalkan kotak mereka.

Mari kita pergi ke gadget kita.

Memaksa gadget

Kita dapat membuat jumlah blok bangunan yang sewenang-wenang dengan memastikan masing-masing blok tidak dapat dipasangkan dengan diri mereka sendiri.

Misalnya, katakanlah kami ingin memaksa ubin , sehingga kami dapat menggunakan sebagai blok bangunan. (catatan, adalah variabel arbitrer, yang kami ingin paksakan sebagai pasangan untuk dirinya sendiri, tidak harus merupakan blok penyusun karena kami menggunakan nilai sebelumnya)1 1 1(1,1)111

Untuk menjamin bahwa cadangan -building-block kami , kami akan meletakkannya di dinding bawah di konfigurasi berikut: kami akan menempatkan nomor yang dipesan, mari kita sebut itu di dinding seperti up-tack (berbentuk seperti ); di dinding, dan satu di baris ke-2 di tengah. Kemudian kita akan menempatkan dua angka lagi, mari kita memanggil mereka dan ; ini unik untuk gadget ini. Kami menempatkan ini di atas kiri dan kanan .( 1 , 1 ) 1 3 231 1(1,1)13231

Diilustrasikan di bawah, batas hitam bersama adalah bagian bawah papan permainan, deskripsi dari kiri ke kanan.

  • Konfigurasi gadget. Setiap dan sini unik untuk gadget ini.323
  • 3 kemungkinan status ubin pusat .1

masukkan deskripsi gambar di sini

Setelah melakukan hal ini, kita dapat menjamin bahwa gadget kami dapat dapat ubin dengan serangkaian tertentu ubin, sementara menjamin bahwa gadget kita harus memaksa pasangan .(1,1)

  • Kita tahu bahwa harus terjadi, karena semua 3 kemungkinan status ubin dari menengah bawah , tile as , seperti yang diilustrasikan dalam gambar di sebelah kanan, di atas.1 ( 1 , 1 )(1,1)1(1,1)
  • Ubin yang tersisa dapat digubah sebagai dan , yang menutupi gadget. Dengan demikian, kita dapat menghapus ubin-ubin itu dari set-ubin global kita. Diilustrasikan di bawah ini.( 1 , 3 )(1,2)(1,3)

Keterangan, dari kiri ke kanan:

  • Kiri, atas: Keadaan kiri, Kiri, bawah: Ubin yang valid dari kuadrat yang tersisa.
  • Middle, top: Middle state, Middle, bottom: Ubin yang valid dari kuadrat yang tersisa.
  • Kanan, atas: Keadaan kanan, Kanan, bawah: Ubin yang valid dari kuadrat yang tersisa.

masukkan deskripsi gambar di sini

Perhatikan, bahwa ubin dari kuadrat yang tersisa tidak dipaksakan , karena mereka dapat ubin dengan tetangga terdekat bukan , tetapi karena itu adalah ubin papan permainan yang valid di semua negara bagian , kita dapat menghapusnya dari ubin-set, dan menganggap mereka akan memasang ubin persis seperti itu. Karena kami tahu ada kemungkinan ubin yang valid, kami memiliki setidaknya satu kemungkinan ubin papan permainan, jika rumusnya memuaskan. Meskipun tidak ada jaminan bahwa ini akan ubin dengan cara ini, ada jaminan bahwa ubin akan dipaksakan.( 1 , 1 )1(1,1)

Catatan: jika Anda tidak puas dengan ini, atau bingung dengan perbedaan "bisa memasang" vs "dipaksa memasang", Anda cukup meletakkan dinding di sekitar gadget , dengan cara yang sama kami membuat dinding bawah untuk gadget-klausa.3 × 23×23×2

Gadget ini tidak ditutup, karena tidak perlu (tetapi Anda bisa jika mau). Tidak perlu, karena memiliki konfigurasi yang layak, yang dapat kita hapus dari tile-set. Meskipun dimungkinkan untuk melakukan konfigurasi yang berbeda, ini tidak mempengaruhi kepuasan masalah.

Ubin berikut dijamin untuk ubin (sehingga dapat dihapus dari set-ubin): (1,1)

Ubin-ubin berikut dijamin untuk dapat ubin (sehingga dapat dihapus dari set-ubin): (1,2),(1,3)

Jika Anda memilih untuk menutup gadget ini dengan dinding, maka juga akan menjadi dijamin akan ditanggung.(1,2),(1,3)

Gerbang Kawat dan Klausul Baru

Karena masalah mengalir, dan mengosongkan ubin-set, kita perlu mendesain ulang kawat sedikit.

Salah satu cara untuk mengatasi masalah aliran, adalah membuat kawat menjadi sirkuit, bukan hanya keadaan kiri-kanan yang sederhana; yaitu, itu akan menjadi lingkaran, bukan garis, dan oleh karena itu jika bagian atas dari lingkaran didorong ke kanan, bagian bawah akan didorong ke kiri. Ini memecahkan masalah aliran.

Dengan mengikuti rute ini, kita dapat mengubah wire dan clause gate untuk menyelesaikan kedua masalah.

Pemesanan danFTF

Mari kita memperkenalkan dua nilai-nilai universal yang baru, dan . Kedua nilai ini bersifat universal; nilai aktual dalam kisi, seperti nilai kuadrat dan (karena berdasarkan konvensi, kami mencadangkan sebagai blok bangunan untuk dinding), atau apa pun yang Anda pilih. Mereka mewakili benar dan salah, masing-masing.F 2 3 1TF231

Kami mencadangkan ubin secara paksa , , , sebagai berikut; ilustrasi di bawah ini, deskripsi dari kiri ke kanan:( T , T ) ( F , F )(T,F)(T,T)(F,F)

  • Kami menggunakan skema yang sama dengan memaksa ubin , menggunakan sebagai . Setiap dan sini unik untuk gadget ini.T 1 23(1,1)T123
  • Kami menggunakan skema yang sama dengan memaksa ubin , menggunakan sebagai Setiap dan sini unik untuk gadget ini.F 1 23(1,1)F123
  • Kami menggunakan skema yang sama dengan memaksa , menggunakan sebagai di tengah, dan menggunakan di lokasi lain dari up-tack. Ini memaksa ke ubin. dan dapat melakukan tile dengan , jadi kami menghapusnya dari set-ubin. Setiap dan sini unik untuk gadget ini.F 1 T ( F , T ) 23T 23(1,1)F1T(F,T)23T23

masukkan deskripsi gambar di sini

Kawat

Setiap kawat akan mulai dan diakhiri dengan sebuah nilai, mari kita sebut , yang unik dengan to wire. Untuk setiap klausa yang diikuti oleh kawat, kawat akan memiliki dua nilai kawat, , dan , yang unik untuk setiap kawat, dan berpartisipasi dalam klausa yang sama. Ilustrasi di bawah, dengan deskripsi dari kiri ke kanan.x x Axx

  • Kawat yang berpartisipasi dalam satu klausa. Kawat memiliki ketinggian , dan memiliki panjang , di mana adalah jumlah klausa yang diikuti oleh kawat tersebut. Kawat tersebut diisi oleh dua kotak di sebelah kiri, dan dua di sebelah kanan. Tentu saja, dikelilingi oleh dinding di semua sisi, ditunjukkan oleh garis biru. Perhatikan, bahwa unik untuk kawat ini, dan hanya akan digunakan dalam kawat, dan klausa yang diikutinya.22p+3pA1

masukkan deskripsi gambar di sini

Yang diilustrasikan di bawah ini adalah dua keadaan, deskripsi dari kiri ke kanan.

  • Kawat yang berpartisipasi dalam satu klausa, dalam kondisi sebenarnya. Kawat dianggap benar, ketika kotak dipasangkan dengan kotak , dan kotak dipasangkan dengan kotakItu dianggap salah di negara lain, di mana ubin terbalik. Perhatikan bagaimana ubin dipaksa setelah ubin dipilih: sudah dipaksa sebelumnya, sehingga sisa ubin harus horisontal.xTxFA(T,F)
  • Kawat yang sama dalam kondisi salah.

masukkan deskripsi gambar di sini

Ketika berpartisipasi dalam lebih banyak klausa, ada lebih banyak nilai , dan , satu pasang untuk setiap klausa yang diikuti. Kawat bergantian berada di atas dan bawah, seperti halnya dan kotak yang memisahkan setiap pasangan.xxTFx,x

masukkan deskripsi gambar di sini

Dua negara bagian yang bersesuaian.

masukkan deskripsi gambar di sini

Gadget ini ditutup , sehingga tidak ada "masalah aliran".

Perhatikan bagaimana di kedua negara bagian, kami mengumpulkan ubin berikut, apa pun kondisinya: , , .(A,A)(A,T)(A,F)

Namun ada beberapa ubin, yang kita tidak yakin; dalam satu keadaan kita dapat menghapus dari ubin-set, sementara di negara lain kita dapat menghapus dari tile-set, jadi ubin mana yang bisa kita gunakan sebenarnya menghapus? Jawabannya adalah: gerbang klausa memiliki masalah yang sama, tetapi dengan set ubin yang berlawanan. Itu akan selalu mengumpulkan ubin yang tersisa, berlawanan, dan tidak terkumpul, seperti yang akan kita lihat di bagian selanjutnya. Karena masing-masing dipasangkan dengan gerbang klausa, kami akan dapat menghapus keduanya.(1,T),(1,F),(2,T),(2,F)...(1,F),(1,T),(2,F),(2,T)...

Ayat

Selanjutnya kita akan membuat iterasi pertama gerbang klausa baru. Ini terdiri dari gadget , dikelilingi oleh dinding. Di dalam gadget, kami menempatkan satu di tengah atas, dan dua kotak di sudut bawah; satu di kiri bawah, dan satu di kanan bawah. Kotak yang tersisa akan menjadi nilai yang mewakili variabel kawat dari tiga kabel yang berbeda. Mari kita sebut dan . The akan dipaksa untuk pasangan dengan salah satu kawat-variabel, dan kawat-variabel yang tersisa akan memasangkan dengan nilai-nilai. Ilustrasi di bawah, deskripsi dari kiri ke kanan.2×3FTa,b,cFT

  • Kiri: Konfigurasi untuk iterasi pertama gerbang klausa baru.
  • Kanan Tiga kemungkinan status dari ubinF

masukkan deskripsi gambar di sini

Tiga kondisi ini mengarah pada tiga kemungkinan kemiringan. Ilustrasi di bawah, deskripsi dari kiri ke kanan.

  • Kiri, atas : ubin kiri, Kiri, bawah: Ubin kotak yang tersisa.F
  • Tengah, atas : ubin kanan, Tengah, bawah: Ubin kotak yang tersisa.F
  • Kanan, atas : ubin ke bawah, Kanan, bawah: Ubin kotak yang tersisa.F

masukkan deskripsi gambar di sini

Karena akan dipasangkan dengan salah satu variabel kawat dalam klausa , variabel kawat itu tidak bisa lagi dipasangkan dengan di kawat ; dengan demikian memaksa kawat untuk benar. Sebaliknya, variabel kawat yang tersisa yang ubin dengan akan dipaksa untuk ubin dengan dalam kabel mereka. Ini persis kendala yang sama dengan klausa.FF TF1-in-3-SAT

Catatan, dan adalah variabel kawat, tetapi masing-masing dapat merujuk ke atau variabel kawat; menggunakan pada dasarnya meniadakan variabel kawat.a,b,cxxx

Satu tambahan: untuk melepaskan kewajiban mengetahui ubin mana yang dapat dihapus dari ubin-set, kita harus "menggandakan dan kontrapositif" klausa. Yang saya maksud dengan ini, adalah membuat gadget lainnya, dengan variabel tambahan yang mewakili negasi dari dan . Mari kita sebut dan . Ini harus berupa nilai variabel-kawat yang dinegasikan dari dan . Ini gadget berbeda, dalam hal ini akan memiliki di pusat, dan dua3×23a,b,ca,b,ca,b,c3×2TF nilai di sudut; kebalikan dari gadget klausa yang dijelaskan sejauh ini. Dengan "menggandakan" klausa seperti ini, kami menambahkan kembali kendala yang sama seperti gadget yang dijelaskan di atas. Namun, kami juga menjalankan semua kombinasi dari tile-set, untuk setiap variabel (dan dengan demikian untuk dan juga, karena semuanya adalah variabel-variabel kawat). Diilustrasikan di bawah, deskripsi dari kiri ke kanan.(T,x),(T,x),(F,x),(F,x)a,b,c

  • Klausa "ganda dan kontrapositif". Bagian bawah adalah klausa yang dijelaskan di atas; bagian atas adalah klausa contrapositive yang baru dijelaskan. Klausa baru memiliki kendala logis yang persis sama; itu adalah kontrapositif dari klausa bawah. Bersama-sama, gadget gabungan ini dan kabel melepaskan semua kombinasi dari tile-set, untuk setiap variabel kawat yang berpartisipasi dalam klausa.(T,x),(F,x),(T,x),(F,x)
  • Garis biru di tengah-tengah sosok paling kiri ada untuk memudahkan penglihatan; pada kenyataannya itu dapat dihapus tanpa mengizinkan negara lagi.

masukkan deskripsi gambar di sini

Jadi, mari kita ambil contoh, untuk menunjukkan bahwa semua ubin bisa habis seperti yang dijanjikan. Diilustrasikan di bawah, deskripsi dari kiri ke kanan.

  • Gambar kawat yang berpartisipasi dalam satu klausa; sebuah negara dipilih untuk klausa. Di sini, kita menggunakan , sementara dan mewakili nilai-nilai kawat lain dalam klausa ini.1=bab
  • Untuk negara yang diberikan dalam ayat tersebut, nilai dipaksa untuk dipasangkan dengan tetangga .1T
  • Ini menyebabkan kawat dipaksa bernilai benar (Anda dapat mengatakan bahwa variabel positif dari kawat dipaksa untuk berpasangan dengan , dan variabel negatif dipaksa untuk berpasangan dengan , seperti dijelaskan di atas ).TF
  • Ini memaksa dalam klausa kontrapositif (bagian atas klausa) harus dipasangkan dengan dalam klausa. Sekarang jika Anda melihat kawat, setiap ubin di dalam kawat dijamin akan habis: baik habis di kabel itu sendiri, atau di gadget klausa yang sesuai. Dalam keadaan ini, kami memiliki ubin, , , , , , , dan .1T(A,A)(A,T)(A,F)(1,T)(1,F)(1,F)(1,T)

masukkan deskripsi gambar di sini

Mencoba keadaan lain, kita mendapatkan ilustrasi di bawah ini, deskripsi dari kiri ke kanan.

  • Klausa berada di negara bagian lain, ubin dalam salah satu dari dua cara.(1,T
  • Oleh karena itu, dipaksakan,(1,F
  • Memimpin sisa kawat ke ubin sesuai, dan nilai kawat itu salah.
  • Akhirnya, di bagian kontrapositif / atas gadget klausa, harus di-tile, karena diambil di kawat. Dalam keadaan ini, kami memiliki ubin, , , , , , , dan . Ini adalah ubin yang sama seperti di negara bagian lain .(1,F)(1,T)(A,A)(A,T)(A,F)(1,T)(1,F)(1,F)(1,T)

masukkan deskripsi gambar di sini

Jadi di kedua negara, kami melepaskan ubin yang sama. Oleh karena itu, kawat dan klausa bersama berhasil mengeluarkan ubin tertentu jika ada tugas yang memuaskan.

Gadget ini ditutup , sehingga tidak akan ada masalah aliran. Gadget klausa bersama dengan gadget kawat dijamin untuk selalu melepaskan nilai pasangan ubin yang sama , dan dengan demikian kita dapat melepaskannya bahkan jika kita tidak tahu ke arah mana ubin itu akan dipasang.

Sekarang semua gadget kami memenuhi kriteria.

Perumusan

Dalam formulasi akhir kami, kami membuat tiga baris gadget, masing-masing dipisahkan oleh dinding horizontal.

  • Di bagian bawah, kami menempatkan gadget-paksa, yang tingginya dua ubin. Kami membutuhkan gadget memaksa untuk blok bangunan, dan untuk kombinasi dari dan . Kami menempatkan gadget pemaksa langsung di sebelah satu sama lain.TF
  • Di baris tengah, kami menempatkan gadget kawat, secara horizontal, yang tingginya dua ubin. Gawai kawat harus dipisahkan satu sama lain dengan dinding vertikal.
  • Di baris atas, kami menempatkan gadget klausa, yang tingginya empat ubin. Gadget klausa harus dipisahkan satu sama lain oleh dinding vertikal.

Ilustrasi mengikuti, deskripsi di atas setiap gambar. Klik gambar untuk resolusi penuh. Kode sumber untuk mereproduksi / menghasilkan gambar tercantum di bagian bawah halaman.

Menggunakan rumus sebagai contoh, kami memiliki kepuasan solusi sebagai saksi.Φ(x)=(x1,¬x2,x3)(x2,¬x3,x4)(x1,x2,¬x4)(¬x1,x2,x3,¬x4)

Pertama kita mulai dengan dinding horizontal yang memisahkan barisan gadget. Kami menunjukkan kotak, dan pasangan yang dipaksa untuk memasang di dalam dinding.

masukkan deskripsi gambar di sini

Selanjutnya, kami menampilkan gadget. Garis biru menunjukkan batas gadget; biru pekat untuk gadget pemaksaan, karena mereka tidak akan dikelilingi oleh dinding. Perhatikan garis di tengah gadget klausa tidak dikelilingi oleh dinding; itu ada untuk memudahkan penglihatan; mengambil garis tidak memungkinkan negara lagi terjadi dalam klausa, seperti yang dijelaskan di atas, tetapi kami menunjukkan garis biru untuk demonstrasi ini. Catatan: bahwa kami menggunakan nama kuadrat untuk memberikan angka keterbacaan semantik, jika ada. Setiap nama mewakili nilai numerik.

masukkan deskripsi gambar di sini

Di sini kita mengisi dinding vertikal.

masukkan deskripsi gambar di sini

Di sini kami mengisi solusi saksi; yaitu ini adalah solusi ubin jika menggunakan solusi SAT untuk menghasilkannya.

masukkan deskripsi gambar di sini

Selanjutnya kita ubin area pengisi; sisa papan, sebesar yang diperlukan, untuk sebesar diperlukan untuk ubin sejauh ini. Jadi kami melepaskan pasangan yang tersisa di ubin-set. Garis putus-putus di sini mewakili ubin yang valid tetapi tidak dipaksa; mungkin ada cara lain untuk memasang ini. Di sini kami menunjukkan sudut kiri bawah.n

masukkan deskripsi gambar di sini

Di sini kita mengisi kotak yang tersisa dengan ubin yang valid sepele.

masukkan deskripsi gambar di sini

Di sini kami menunjukkan sudut kanan bawah dari grid.

masukkan deskripsi gambar di sini

Di sini kami menunjukkan sudut kanan atas grid. Perhatikan bagaimana ubin vertikal tidak lagi pas; jadi kami memasang baris atas secara horizontal, jika perlu.

masukkan deskripsi gambar di sini

Dan akhirnya sudut kiri atas.

masukkan deskripsi gambar di sini

Menghasilkan seluruh papan permainan sekaligus melalui TeX gagal dengan kesalahan kehabisan memori dari pdflatex, jadi jika Anda ingin melihatnya, Anda harus membuat klip dan menambalnya bersama. Pastikan untuk memeriksa penampil notebook .


Sumber TikZ

Generator game:

  • graphtex.py

    Konversi TeX ke svg, menggunakan pdflatex, pdfcairo (poppler), dan rsvg-convert (libsvg)

  • dominosa.py

    Berisi logika konversi, verifikasi solusi-game, dan logika menggambar

  • dominosa_demo.py

    Demo yang dapat dieksekusi yang menghasilkan gambar yang digunakan dalam jawaban di atas. Tuang gambar ke direktori saat ini yang berfungsi.

  • dominosa_demo.ipynb

    Demo ipython yang menghasilkan gambar yang digunakan dalam jawaban di atas.


1
Ini spactacular, terima kasih banyak ..
Yoav bar sinai

2
Tolong beritahu saya bahwa Anda memiliki versi arXiv itu. Ini mungkin lebih masuk akal untuk platform ini untuk menyertakan sketsa kasar dan link ke kertas penuh.
Raphael

22

DOMINOSA adalah NP-hard


Bermain game adalah masalah optimisasi; menemukan domino ubin yang valid sehingga mencakup semua kotak. Versi keputusan dari masalah ini adalah:

Apakah ada ubin sempurna yang menutupi kotak dengan ubin unik?(n+1)×(n+2)n

Jelas, masalah optimisasi, masalah menemukan solusi untuk game setidaknya sama sulitnya, atau lebih sulit, daripada masalah keputusan.

Kami akan mengonversi rumus ke kisi yang sesuai, yang hanya akan dapat terlindungi jika ada penugasan yang memuaskan untuk rumus tersebut. Selain itu, sampul sebenarnya dapat digunakan untuk memulihkan tugas yang memuaskan.1-3-in-SAT

Oleh karena itu, jika konstruksi yang disajikan benar, dan seseorang dapat menyelesaikan permainan dalam waktu polinomial pada DTM , maka itu akan menyiratkan . Ini menyiratkan adalah NP-hard.P=NPDOMINOSA

Pengurangan dari ke1-3-in-SATDOMINOSA

pengantar

Sebagian besar masalah / varian memiliki korespondensi yang cukup baik dengan . Penting untuk memikirkan masalah secara paralel; karena mereka terkait satu sama lain, hampir semua hal dalam satu masalah dapat terkait dengan yang lain.3-SATCIRCUITSAT

CIRCUITSAT memiliki varian planar, yang dikurangi, disebut . Konversi ini sangat elegan, dan pada dasarnya memungkinkan Anda untuk mengambil penyisipan planar, menemukan kabel penyeberangan yang tersisa, dan menggunakan "gadget" untuk membiarkan kabel bersilangan melalui "gerbang" planar (koleksi gadget, dengan kabel input dan output) .PLANAR-CIRCUITSAT

Dengan mudah, sebagian besar varian juga memiliki pengurangan ke varian planar, yang paralel , dan sangat terkait; mudah direduksi dari satu ke yang lain, dan mudah dipikirkan. Jadi setiap kali saya datang ke masalah planar yang mungkin NP-keras, saya pikir dalam hal varian planar dari , dan paralelnya dalam .3-SATPLANAR-CIRCUITSAT3-SATPLANAR-CIRCUITSAT

Varian planar penting untuk diketahui, karena mereka membantu membuat pengurangan terhadap masalah planar / geometris, seperti Euclidean TSP (kebetulan pengurangan yang cukup langka untuk menemukan dan belajar). Dengan demikian, ada , dan parellel, , untuk membantu pengurangan tersebut.PLANAR-3-SATPLANAR-CIRCUITSAT

Lainnya varian yang penting untuk mengetahui karena beberapa dari mereka lebih lemah; itu, tampaknya "lebih mudah", namun masih NP-lengkap. Mereka tampaknya lebih mudah dipecahkan pada pandangan pertama - dan mereka jauh lebih sederhana - namun masih lengkap dengan NP. NP-lengkap, tetapi lebih sederhana; dan karenanya lebih mudah untuk melakukan pengurangan, dalam banyak kasus.3-SAT

Misalnya, ada . Untuk beberapa masalah, Anda dapat dengan mudah membuat gadget tepat , sambil membuat "setidaknya 1 dalam 3", seperti standar menggunakan, akan menjadi tidak jelas dan membuat konstruksi besar.1-in-3-SAT1-in-33-SAT

Contoh lain adalah . Monoton membuat banyak hal lebih sederhana ketika Anda memiliki konstruksi yang tidak dapat dengan mudah meniadakan nilai.MONOTONE-1-in-3-SAT

Yang lebih menakjubkan adalah bahwa memiliki varian planar: ! Jadi ini membuat segalanya jauh lebih mudah; Anda tidak harus melewati "kabel" (ingat, ada persamaan di dengan ini), dan percayalah, sementara menyeberangi gadget menyenangkan untuk dilakukan, mereka cenderung sangat tidak jelas dan sulit.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. Penghapusan literal murni
  2. Teorema dikotomi Schaefer
  3. Masalah Perwakilan yang Kompatibel
  4. Triangulasi Berat Minimum adalah NP-Hard
  5. Teorema dikotomi Schaefer
  6. Menemukan Partisi Otomatis Sempurna adalah NP-hard
  7. Partisi Ruang Biner Optimal di Pesawat

Salah satu cara untuk memulai dengan pengurangan, adalah mencoba menemukan "gadget" yang menyerupai kabel, dan gadget yang menyerupai klausa salah satu dari varian . Sebagai bonus, banyak varian yang planar, kita mungkin bisa pergi tanpa melewati kabel.3-SAT

Apa itu "gadget"? Gadget adalah beberapa konstruksi dalam masalah, yang berguna sebagai blok bangunan untuk membangun gerbang / kabel / klausa. Beberapa gadget akan memiliki rangkaian negara terbatas; misalnya, gadget dengan dua status dapat digunakan sebagai variabel; satu negara adalah "benar" dan yang lainnya adalah "salah". Gadget dengan dua status, yang bisa "panjang", dapat ditekuk, dan dipecah, berguna sebagai kabel - jika dapat berinteraksi dengan variabel, dan menjadi terhambat untuk memperpanjang status variabel ke lokasi lain. Gadget dengan tiga status yang tepat mungkin dapat digunakan sebagai klausa; jika dapat digunakan untuk membatasi "satu dari tiga" kabel melalui masing-masing dari tiga negara tersebut. Demikian pula, orang mungkin menginginkan semua jenis gerbang logika, seperti bukan-gadget, atau-gadget, gadget-xor dll;

Blok Bangunan

  • Pertama, mari kita memesan nomor, misalnya, , di papan tulis. Kami akan menjadikan sebagai blok bangunan untuk semua hal lainnya.11
  • Kami akan menggunakan sudut untuk memastikan bahwa tidak pernah dapat terhubung ke yang lain , kecuali di sudut ini, di mana harus.11
  • Di bawah ini (dalam tiga angka) adalah sudutnya, dan bagaimana kita menempatkan di sana.1
  • Kami akan menggunakan untuk menunjukkan nilai unik di semua kisi, di semua diagram.
  • Faktanya, kita akan membahas kisi-kisi kita dengan nilai sebelum menimpanya dengan nilai-nilai penting; oleh karena itu, secara default mencakup semuanya dengan nilai .

masukkan deskripsi gambar di sini

Seperti yang Anda lihat, dengan menempatkan s pasangan harus digunakan dalam konfigurasi ini; itu harus menggunakan salah satu ubin putus-putus. Sekarang tidak pernah bisa terjadi di tempat lain di papan tulis, itulah yang kita butuhkan.3   1(1,1) (1,1)

Ada beberapa cara alternatif untuk memesan nomor, baik di dinding dengan dari mereka, atau di tengah-tengah dari mana, dengan dari mereka di salib. Cara apa pun baik-baik saja, selama dipaksa.45(1,1)

Dinding

Sekarang, akan sangat berguna untuk dapat membuat "dinding" dan "sudut" di semua tempat, tidak hanya di sisi grid. Lihat apa yang terjadi jika kita berbaris berpasangan dalam satu baris; orang tidak punya pilihan selain berpasangan dengan tetangga mereka, membuat "tembok" dengan lebar .4

Gambar di bawah, dari kiri ke kanan:

  1. Sederet pasangan s.1
  2. Satu-satunya kemungkinan ubin -square.1
  3. Satu-satunya kemungkinan ubin (hampir) semua dalam baris.1
  4. Garis tembok, ditarik untuk penekanan.

masukkan deskripsi gambar di sini

Upaya awal di kawat

Sekarang, dengan menempatkan dua "dinding" berlawanan satu sama lain, dan menyisakan ruang antara dinding, mungkin kita bisa menghasilkan gadget seperti "kawat".1

Hanya menampilkan batas dinding, inilah yang kita dapatkan pada gambar di bawah ini (kiri ke kanan):

  • Menempatkan dua dinding berlawanan satu sama lain.
  • Menempatkan angka unik di dalamnya.
  • Dua paling kanan: Dua kemungkinan status kawat.

masukkan deskripsi gambar di sini

Bagaimana itu bekerja:

Tidak ada lubang di tabung / kawat, oleh karena itu, jika ubin digeser ke atas, maka mereka semua harus digeser ke atas, di sepanjang tabung; jika mereka digeser ke bawah, itu akan "menyedot" mereka semua. Jadi, kita dapat mengirim "sinyal" dari satu sisi kabel ke sisi lainnya; dengan kata lain, sebarkan nilai.

Dengan demikian, sekarang kita dapat menyebarkan nilai melintasi jarak jauh!

Batasan yang masih ada adalah:

  • Kita tidak bisa menekuk kawat,
  • Kami tidak dapat membagi kawat,
  • Kita tidak bisa melewati kabel,
  • Kami mungkin memiliki masalah tata letak yang mengganggu karena kami harus berhati-hati dengan paritas panjang kawat.

Bending a Wire , Bagian 1: Dinding Di Bawah

Masalah selanjutnya adalah, kita harus bisa menekuk kawat, tidak hanya langsung ...

Begitu. Kami akan memecah bagian lentur menjadi dua bagian; bagian atas dan bagian bawah. Pertama bagian bawah. Abaikan bagian atas tikungan, kita akan melakukannya nanti.

Gambar di bawah ini menunjukkan sedikit masalah dengan pembengkokan; bagian atas kawat "longgar", tampaknya sulit untuk membuat dinding yang berubah menjadi 90 derajat tajam.

Kiri ke kanan:

  • Bagian atas kawat "longgar".
  • Apa yang terjadi jika kita mencoba untuk menekuknya; kami ingin menghubungkan di antara garis biru. Sekali lagi, Abaikan bagian atas tikungan, kita akan melakukannya nanti.
  • Seperti yang Anda lihat, bagian atas longgar, mereka dapat menempel di sepanjang dinding, atau melalui kawat ! Ini tidak baik.1

masukkan deskripsi gambar di sini

Salah satu solusinya adalah sebagai berikut:

  • Pilih pasangan dekat tikungan. Ambil nilai square itu, beri nama ; ini berarti angkanya unik di seluruh kisi, sama seperti , dan digunakan kembali sekali, di sini di tikungan ini saja . Karena ini dipasangkan dengan , itu tidak dapat dipasangkan dengan lagi. Oleh karena itu, kami menempatkannya tepat di atas yang paling kanan-atas . Sekarang, kita dapat dengan jelas melihat, satu-satunya pilihan yang tersisa untuk berpasangan untuk adalah ke kanan, dan dengan demikian itu akan memantapkan dinding.(x,1)xqx1111

Ilustrasi di bawah, deskripsi dari kiri ke kanan:

  • Situasi dengan masalah.
  • Pilih kotak, biarkan menjadi nilai kuadrat dari sembarang kotak di tikungan (tentu saja bukan dtk).q1
  • Dua matikan paling kanan paling atas tilings; kali ini, hanya satu yang valid.1

masukkan deskripsi gambar di sini

Namun, bagaimana kita bisa yakin ini tidak akan merusak kawat? Di bawah ini Anda dapat melihat status kawat, dan bahwa tidak akan menghambatnya.qq

Dari kiri ke kanan:

  • Konstruksi saat ini.
  • Dua angka paling kanan: Keadaan kawat; secara empiris, mereka tidak terhambat oleh pengenalan .q

masukkan deskripsi gambar di sini

Sekarang kita masih memiliki longgar di atas; yang paling kiri-paling atas- .11

Kami akan melakukan hal yang sama; pilih pasangan yang sudah dipasangkan di ubin tikungan, dan tempatkan di atas paling kiri-atas- .(r,1)r1

Ilustrasi di bawah, kiri ke kanan:

  • Konstruksi kami saat ini.
  • Masalahnya: leftmost-topmost- dapat memasangkan dengan nomor di kawat, atau dengan dinding; kami ingin untuk hanya pasangan dengan dinding.1
  • Memilih , dan menggunakan nomor yang sama di atas paling kiri-topmost- .r1

masukkan deskripsi gambar di sini

Dan akhirnya kami mendapatkan tikungan bawah. Ilustrasi di bawah, deskripsi, dari kiri ke kanan:

  • Kiri: Konstruksi terakhir kami untuk sebuah tikungan.
  • Kanan: Bagaimana melanjutkan kawat ke kiri.

masukkan deskripsi gambar di sini

Bending a Wire , Bagian 2: Wall Above

Dinding untuk membuat sudut atas tikungan jauh lebih sederhana. Anda cukup menyelaraskan dinding vertikal dengan dinding horizontal. Ilustrasi di bawah, deskripsi dari kiri ke kanan:

  • Tikungan kawat yang ingin kita buat.
  • Tempatkan bagian vertikal kotak dinding ke bawah.
  • Ubin kuadrat dari dinding vertikal.
  • Penempatan dan ubin dinding horizontal; dapat memenuhi dinding vertikal, dan membentuk sudut.

masukkan deskripsi gambar di sini

Sekarang Anda harus yakin bahwa kami dapat menempatkan dan menekuk kabel. Kami masih tidak bisa membagi atau menyeberang kabel, lebih lanjut tentang itu nanti.

Batasan yang masih ada adalah:

  • Kita tidak bisa menekuk kawat,
  • Kami tidak dapat membagi kawat,
  • Kita tidak bisa melewati kabel,
  • Kami mungkin memiliki masalah tata letak yang mengganggu karena kami harus berhati-hati dengan paritas panjang kawat.

Kawat Berharga

Sekarang kita memiliki kabel, alangkah baiknya memiliki kawat yang berharga, di mana kita dapat melihat nilai kawat, seperti LED pada papan sirkuit. Jadi apa yang kita lakukan, adalah mengambil kawat, katakanlah panjang , dan memperkenalkan kotak bernama , kita akan menyebutnya , dan kotak lain bernama, kita akan menyebutnya . Keduanya unik untuk setiap bagian kawat yang bernilai, yaitu. hanya dua kali , dan mereka hanya akan digunakan kembali dalam satu kawat bernilai tunggal . Mereka ditempatkan berpasangan, dua kotak tepat di sebelah satu sama lain, dan dua kotak di samping satu sama lain, dengan satu7TFTFpersegi memisahkan mereka. Diilustrasikan di bawah, deskripsi dari kiri ke kanan:

  • Kiri: Sebuah kawat.
  • Kanan: Konfigurasi kuadrat.

masukkan deskripsi gambar di sini

Jadi bagaimana kita tahu apakah kawat itu benar atau salah? Ya, sebuah kawat memiliki dua status. Di setiap negara bagian ini, salah satu dari atau akan dipasangkan di ubin yang sama; nilai yang dipasangkan adalah nilai kawat. Ilustrasi di bawah ini, deskripsi dari kiri ke kanan:TF

  • Kiri, kanan: Dua kondisi kawat bernilai ;
  • Kiri: Kawat dihargai trued, karena kotak berbagi satu kotakT
  • Kanan: Kawat bernilai false karena kotak berbagi satu ubin.F

masukkan deskripsi gambar di sini

Kita sekarang dapat menamai variabel yang dapat kita gunakan, untuk menempatkan variabel di atas grid. Kita dapat menghubungkan dua kabel bernilai dan memaksa mereka untuk memiliki nilai yang sama, atau jika kita menghubungkannya dengan panjang ganjil, memaksa mereka untuk memiliki nilai yang berbeda; dan menggunakan kabel, kita bisa melakukan ini jarak jauh, melintasi kisi-kisi. Dengan menggunakan kabel, kita dapat menyebarkan nilai variabel bernama di semua tempat.3-SAT

Batasan yang masih ada adalah:

  • Kami tidak dapat membagi kawat,
  • Kita tidak bisa melewati kabel,
  • Kami mungkin memiliki masalah tata letak yang mengganggu karena kami harus berhati-hati dengan paritas panjang kawat.

Bukan gerbang

Sebuah tidak-gerbang tidak perlu seperti itu implisit: hanya menggunakan off-per-satu kawat panjang kita bisa meniadakan nilai kawat.

Gerbang Klausul

Sekarang saya bisa mendemonstrasikan gadget klausa sederhana; itu akan terhubung ke kabel, dan memaksa salah satu dari mereka menjadi "ditarik", dan memaksa dua lainnya berada di "mendorong". Kita dapat menggunakan ini, ini persis satu-dalam-tiga hubungan; kita mengatur status kawat ganjil ke berarti "benar", dan dua status kawat lainnya berarti "salah", dan kita ditetapkan.3

Ilustrasi di bawah, deskripsi dari kiri ke kanan:

  • Tata letak kawat gadget klausa. Itu membuat tanda "plus"; bergabungnya 3 kabel di satu tempat.
  • Isi kawat dengan kotak unik .
  • Tiga negara bagian alun-alun. Masing-masing negara bagian ini "menarik" tepat satu kawat ke tengah, titik penting gerbang; untuk bertindak seperti klausa.1-in-3-SAT

masukkan deskripsi gambar di sini

Sekarang mari kita lihat keadaan yang berbeda. Ilustrasi di bawah, deskripsi dari kiri ke kanan:

  • Kawat kiri ditarik ke tengah; dua lainnya diusir.
  • Kawat bawah ditarik ke tengah; dua lainnya diusir.
  • Kawat kanan bawah ditarik ke tengah; dua lainnya diusir.

masukkan deskripsi gambar di sini

Sekarang, jika Anda memasang kabel dengan paritas panjang yang tepat (panjang genap atau ganjil) ke ujung gerbang ini, hanya satu di antaranya yang benar, dua lainnya salah (tergantung jika Anda memasangnya dengan aneh, Anda dapat menggeneralisasi ini dengan sedikit). Dengan demikian kita dapat menghubungkan nilai menjadi klausa CNF.31-in-3

Batasan yang masih ada adalah:

  • Kami tidak dapat membagi kawat,
  • Kita tidak bisa melewati kabel,
  • Kami mungkin memiliki masalah tata letak yang mengganggu karena kami harus berhati-hati dengan paritas panjang kawat.

Memisahkan Kawat

Untuk memisahkan sebuah kawat, pertama-tama kita berbaris dua kabel di samping satu sama lain. Selanjutnya, sebagai alat bantu visual, kami memberi label pada masing-masing kabel dengan dua kotak , satu di sebelah yang lain. Ini akan memungkinkan kita untuk melihat kapan kawat itu "benar": ketika dua kuadrat dari sebuah kawat di ubin tunggal, maka itu akan benar, jika tidak salah. Setiap kawat harus mendapatkan nya sendiri sepasang pasang, jadi kami akan menyebutkan satu pasangan dan lainnya . Kemudian kami memperkenalkan tiga nilai baru yang dinamai-unik ,TTTT1T2a,b,c. Kami akan menempatkan ketiga di sebelah satu sama lain, sekali pada setiap kawat. Namun, pada satu kawat, pertahankan satu kotak kotak di antara kotak dan pasangan . Di sisi lain, letakkan dua kotak antara kotak .a,b,cTa,b,c

Ilustrasi di bawah, deskripsi dari kiri ke kanan:

  • Tata letak kawat. Perhatikan bahwa dindingnya agak tebal, sehingga kabel tertarik lebih dekat untuk tujuan ilustrasi; pada kenyataannya, mereka agak jauh terpisah.
  • Nilai kuadrat; nilai di atas, dan konektor-split bawahnya.Ta,b,c

masukkan deskripsi gambar di sini

Apa yang dilakukan adalah memaksa kabel agar tidak berbeda; jika ubin pada satu kawat, maka kabel kedua tidak bisa lepas satu per satu, karena dengan demikian itu akan menyiratkan ubin pada kabel kedua, dan dengan demikian akan di-tile dua kali. Ilustrasi di bawah, deskripsi dari kiri ke kanan:a,ba,ba,b

  • Contoh keadaan kawat kiri, dinilai benar.
  • Keadaan buruk dari kawat kedua; itu mencoba untuk dinilai secara berbeda, tetapi kemudian mendapat pasangan duplikat.
  • Keadaan baik dari kawat kedua, sekarang mereka memiliki nilai yang sama, dan tidak ada pasangan duplikat.

masukkan deskripsi gambar di sini

Jika Anda bermain-main dengan dua kemungkinan negara lain, Anda akan melihat ini meluas ke mereka juga, dan itu bekerja dua arah. Jadi, kedua kabel ini sekarang sama; kami telah berhasil membagi kawat. Kita dapat membagi kawat sebanyak yang kita suka, setiap kali menggunakan set baru .a,b,c

Batasan yang masih ada adalah:

  • Kami tidak dapat membagi kawat,
  • Kita tidak bisa melewati kabel,
  • Kami mungkin memiliki masalah tata letak yang mengganggu karena kami harus berhati-hati dengan paritas panjang kawat.

Kawat Tanpa Kabel!

Nah, saya senang, membelah kawat ternyata tanpa kabel! Artinya, dalam ilustrasi di atas, saya meletakkan kabel di samping satu sama lain, tetapi tidak ada alasan untuk melakukannya! Kita dapat menempatkan kabel di mana saja di grid, dan mereka masih akan "terjerat". Ini menghemat banyak masalah bagi kita:

  • Kami bahkan tidak perlu khawatir tentang menyeberang kabel. Ini memungkinkan kita mengurangi dari varian non-planar dari3-SAT
  • Kita harus melakukan tata letak yang menjengkelkan, mendapatkan kabel ke lokasi mereka, mudah! Seperti telepon nirkabel! Kebebasan!
  • Kita tidak perlu khawatir tentang tata letak paritas panjang / off-by-one.
  • Kita bisa melakukan pengurangan ukuran yang sangat minimal; masing-masing variabel akan mendapatkan satu set strip kawat panjang, dengan banyak koneksi tanpa kabel di sepanjang kabel. Koneksi ini adalah untuk klausa-gerbang, yang akan berada di lokasinya sendiri di grid. Klausa sekarang hanya akan terdiri dari gadget klausa dan tiga kabel tanpa kabel mencuat darinya.

Batasan yang masih ada adalah:

  • Kita tidak bisa melewati kabel,
  • Kami mungkin memiliki masalah tata letak yang mengganggu karena kami harus berhati-hati dengan paritas panjang kawat.

Pengurangan, upaya pertama

Biarkan menjadi rumus boolean.Φ(x)=iCi1-in-3-SAT

  • Untuk setiap , satu kawat panjang, dalam baris, di dekat bagian bawah kisi.xjx
  • Untuk setiap , buat klausa-gerbang di bagian atas kisi; Anda bisa meletakkannya sesuka Anda; lebih baik mengisinya di area persegi, tetapi Anda bisa meletakkannya dalam satu baris panjang juga.CiΦ(x)
  • Untuk setiap variabel berpartisipasi dalam klausa , tempatkan kabel tanpa kabel di salah satu dari pin kawat dari gerbang klausa; letakkan yang lain dari setiap koneksi ke kabel / baris variabel yang sesuai. Istilah yang dinegosiasikan harus menempatkan koneksi nirkabel ke klausa jarak yang lebih jauh, mengubah paritas panjang kawat, dan meniadakan nilainya.xjCi3a,b,c

Seperti apa bentuknya:

  • Gambar: Klausa, terhubung langsung ke kabel tanpa kabel. "Hotspot" adalah cara kami melambangkan mulai dari sini. Hotpot ini masing-masing akan dihubungkan ke variabel-variabel dalam kisi.a,b,c

masukkan deskripsi gambar di sini

Dan inilah yang terlihat seperti kotak:

  • Gambar: Papan permainan yang dihasilkan. Variabel berbaris dalam baris di bagian bawah. Klausa tersebar di bagian atas. Layout ini memberikan blowup kuadratik; tata letak yang lebih cerdas dapat menghindari semburan kuadratik.

masukkan deskripsi gambar di sini

Rincian Menit Terakhir

Ingat masalah keputusan:

Apakah ada ubin sempurna yang menutupi kotak dengan ubin unik?(n+1)×(n+2)n

Jadi untuk kisi , kita hanya bisa menggunakan variabel . Tetapi reduksi kami membutuhkan banyak variabel unik, lebih dari . Ada beberapa cara untuk mengatasi masalah ini.(n+1)×(n+2)nO(n)

  • Salah satu caranya adalah dengan menguadratkan ukuran kisi di kedua sumbu. Jadi sekarang hanyalah , yang berarti semua nomor unik kami dapat dibatasi oleh . Kemudian, kita harus mengisi sisa grid, menggunakan kembali nomor unik kita, tetapi dengan sangat hati-hati untuk tidak menempatkan angka yang berdekatan satu sama lain di grid kita , berdekatan satu sama lain di ruang pengisi dari sisanya dari grid. Ada beberapa cara kreatif untuk melakukan ini, saya akan meninggalkan itu sebagai latihan. Metode ini menginduksi blowup kuadratik tambahan, jelas.O(|x|×|Φ(x)|)O(n)n
  • Cara lain yang lebih ringkas dan lebih rumit adalah dengan mendiversifikasi blok . Alih-alih hanya satu blok bangunan, kita dapat menggunakan blok bangunan, dan kemudian kita dapat menggunakan kembali angka yang dipasangkan dengan mereka. Metode ini memungkinkan kita untuk menghindari blowup kuadratik.O ( n )1O(n)

Sumber grafik


Pengurangan bagus! Hanya rasa ingin tahu: bagaimana Anda bisa membuktikan bahwa pasangan yang hilang (setelah menempatkan kabel-dinding-gadget di papan) dapat dikemas (dalam waktu polinomial) ke dalam kotak persegi panjang (n + 1) x (n + 2)? Saya memikirkan pengurangan yang serupa, tetapi tidak tahu bagaimana membuktikan bahwa pasangan "yang tidak digunakan" dapat diatur dalam sebuah persegi panjang (mungkin lebih besar) (aturan permainan menyatakan bahwa setiap ubin dengan digunakan dalam papan dominosa yang valid)a i , b i = 1 .. n[ai,bi]ai,bi=1..n
Vor

Saya akan memindahkan semua komentar ini ke dalam jawaban saya, dan membuatnya lebih komprehensif dalam revisi besar saya berikutnya.
Realz Slaw

ok, saya akan menunggu!
Vor

@RealzSlaw, Terima kasih banyak! Saya masih tidak punya waktu untuk membaca ini tetapi terlihat sangat bagus.
Yoav bar sinai

@RealzSlaw, apakah ada cara untuk menghubungi Anda secara langsung?
Yoav bar sinai
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.