Apakah game buku puzzle klasik ini NP-complete?


10

Ada sebuah puzzle buku permainan klasik sangat mirip dengan teka-teki silang, kecuali daftar kata yang diberikan dan kemudian papan persegi terdiri dari unit kuadrat diberikan, dengan beberapa kotak dihitamkan seperti teka-teki silang, dan beberapa kotak memiliki surat yang sudah ditulis di dalamnya. Tujuannya adalah untuk menulis setiap kata dari daftar sekali dan hanya sekali dalam teka-teki, di mana setiap kata ditulis baik secara horizontal (kiri ke kanan) atau secara vertikal (atas ke bawah) ke dalam kotak yang tidak dihitamkan berturut-turut, dan ketika Anda menulis kata , kedua kotak yang mengapit ujung kata harus dihitamkan atau dihapus dari papan. Juga untuk surat-surat pra-ditulis ke dalam beberapa kotak, kata-kata yang ditulis yang tumpang tindih kotak-kotak ini harus menghormati surat pra-ditulis.N×N

Sekarang, jika kita mengasumsikan alfabet ukuran tetap untuk kata-kata, memutuskan apakah kita dapat mengisi papan dengan solusi yang valid menggunakan persis setiap kata dalam daftar sekali dan hanya sekali masalah NP-lengkap, jika panjang sisi papan adalah tidak tetap?

Jawaban:


6

Maaf telah menjawab pos lama.

Saya sudah memikirkannya dan saya pikir masalah dengan alfabet tetap adalah NP-complete juga.

Saya akan mengurangi 1-in-3 SAT positif untuk masalah kata ini

Kemarin saya mengalami masalah dengan ide untuk menyelesaikan masalah. Saya mengalami masalah dalam membuat setiap variabel berbeda hingga saya melihat kembali pertanyaannya dan saya menyadari bahwa Anda mengizinkan kotak dengan simbol yang ditanam. Ini menyederhanakan pengurangan banyak. Ide saya yang lain adalah memiliki kata-kata dengan panjang yang berbeda untuk setiap variabel yang berbeda.

PENGURANGAN

Sekarang saya akan menjelaskan gadget yang akan kita gunakan:

Gadget variabel

Kami memberi label pada setiap variabel dengan indeks numerik yang berbeda dan kami akan memiliki angka yang berbeda untuk setiap variabel. Kami memilih indeks terbesar dan kami mewakili angka dalam biner, kami akan memanggil rantai biner ini .n

Kemudian kita membuat dua kata vertikal berbeda untuk setiap variabel. Semua kata akan memiliki panjang (Hanya jika kami mengizinkan kata-kata rangkap dalam daftar kata), di mana | n | adalah panjang rantai biner n .3+|n||n|n

Misalnya, biarkan indeks terbesar menjadi nomor . Ketika kita mengubah angka ini dalam biner, kita mendapatkan rantai 100 dalam biner, rantai ini memiliki panjang tiga. Jadi setiap kata variabel akan memiliki panjang 6 dalam contoh ini.41006

32n3

43

41

320013420014

1|n|

Kita harus menyalin kata-kata ini berkali-kali, kita akan membutuhkan satu salinan dari setiap kata untuk setiap kemunculan variabel dalam instance SAT. Ini akan membuat duplikat dalam daftar kata. Kita bisa menghilangkan duplikat dengan menambahkan rantai biner lain ke rantai biner yang secara unik mengidentifikasi variabel. Rantai baru ini akan secara unik mengidentifikasi setiap arus suatu variabel.

Untuk melakukan itu, kita cukup menetapkan setiap arus variabel rantai biner lain dan kami menempatkan rantai itu di akhir representasi biner variabel.

niini|ni||ni|

Ini akan menghilangkan duplikat di dalam kata-kata variabel.

x2

32010013 4201001432010103 4201010432010113 42010114

Gadget klausa

6

535354535453545353

435

mm|m||m|. Kami menambahkan setiap rantai biner ke kata-kata klausa yang termasuk dalam klausa.

Sekarang, mari kita lihat gambar gadget klausa di papan tulis:

Contoh klausa

(x2x3x4)(x1x2x3)(x2x3x4)

4

Jika kami tidak mengizinkan duplikat di dalam daftar kata, kami harus memodifikasi gambar.

5b5b5b10

b201010bb201110bb21001b

b

Lihat sebuah contoh:

klausa, tidak ada pengulangan

Gadget konsistensi variabel

Ini adalah gadget yang memastikan bahwa pemain hanya dapat menetapkan nilai yang sama untuk semua kolom literal dari suatu variabel.

Kami akan memiliki gadget baru untuk setiap variabel

Kami akan membuat dua kata baru untuk setiap gadget.

2kkx263 k64 k

x2

63636464

Jika kita ingin menghindari kata-kata berulang, perhatikan bahwa setiap gadget konsistensi milik variabel yang berbeda. Jadi kita dapat menambahkan rantai biner yang mengidentifikasi setiap variabel ke dua kata yang kami buat untuk gadget ini.

Sekarang mari kita lihat contoh gambar gadget ini:

Gadget konsistensi variabel

x2(x1x2x3)(x2x3x4)

3434. Kita dapat menempatkan kata sisa dari gagdet ini di baris lain

Jika kami tidak mengizinkan duplikat dalam daftar kata, kata-kata di dalam gambar contoh akan:

Untuk baris:

6b6b0106b6b010

Untuk kolom:

b201001bb201010b

b

Lihat sebuah contoh:

Gadget konsistensi, tidak ada pengulangan

Gadget tempat sampah

Ini adalah gadget yang dibuat untuk menempatkan kata-kata klausa yang tidak digunakan. Untuk melakukan itu, kita hanya perlu menempatkan dua baris untuk setiap kata klausa di bagian kosong dari papan. Baris-baris ini tidak terhubung ke baris atau kolom lainnya.

Dengan ini kami menyelesaikan pengurangan, karena kami mengklaim kami hanya perlu 6 simbol untuk pengurangan.

Contoh

Jika penjelasan sebelumnya membingungkan, berikut adalah contoh gambar instance positif 1 in 3 SAT yang telah direduksi menjadi masalah kata ini:

Papan contoh

Jika kita melarang kata-kata berulang:

Papan contoh, tidak ada pengulangan

Contoh yang telah dikurangi adalah:

(x1x2x3)(x2x3x4)


Terima kasih telah memposting ini! Fitur yang disayangkan dari Stack Exchange adalah bahwa jawaban panjang tidak mungkin dibaca oleh siapa pun sehingga Anda sangat tidak mungkin mendapatkan banyak suara dari banyak pekerjaan yang telah Anda lakukan, di sini. Saya akan mencoba membaca ini tetapi, jika saya jujur, ada peluang bagus saya tidak akan melakukannya.
David Richerby

2
@ DavidRicherby oleh jaja ya. Saya berpikir dalam pertanyaan ini untuk sementara waktu. Saya pikir ketika saya memposting jawaban ini semua orang akan pergi dan meningkatkannya. Itu tidak terjadi. Yah tidak apa-apa. Jika Anda memiliki pertanyaan tentang reduksi, Anda dapat bertanya kepada saya
rotia

4

Saya pikir pengurangan berikut dari Directed Hamiltonian path works:

G=(V,E)s,tV

V{}V

vvvVvu(u,v)E

|V|

tangga

|E|(|V|1)

sstt

Sekarang, untuk mengisi tangga, hanya kata-kata simpul yang dapat diletakkan di dalam langkah-langkah, dan untuk menghubungkan dua simpul, kata tepi harus diletakkan di antara mereka, yang sesuai dengan tepi yang ada dalam grafik. Tepi yang tidak digunakan dapat diletakkan di bagian kedua papan. Arah kedua sepele.

Saya pikir ini bekerja (bukti kebenaran saya buat sketsa adalah melambaikan tangan yang terbaik, tapi tetap saja).


1
stN×NN

Ini bagus dan sepertinya berfungsi, tetapi ukuran alfabetnya tidak tetap seperti yang diminta pos asli saya. Apakah ada modifikasi yang memungkinkan untuk menggunakan alfabet berukuran tetap dan masih melakukan pengurangan ini?
user2566092

uv
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.