Saya tertarik pada sedikit varian ubin, teka-teki 'jigsaw': setiap tepi ubin (persegi) diberi label dengan simbol dari , dan dua ubin dapat ditempatkan berdekatan satu sama lain jika simbol di tepi berhadapan satu ubin adalah k dan simbol di tepi menghadap ubin lain adalah ˉ k , untuk beberapa k ∈ { 1 ... n } . Kemudian, diberikan satu set m 2 ubin, bisakah mereka ditempatkan ke dalam m × mpersegi (memutar tetapi tidak membalik ubin) dengan semua tepi cocok dengan benar? (Ada juga varian pada masalah ini di mana empat 'framing' tepi disediakan dan potongan harus sesuai dengan benar ke dalam bingkai itu).
Saya tahu masalah ini NP-lengkap untuk cukup besar , tetapi batas-batas yang saya lihat di n tampaknya cukup besar; Saya tertarik pada masalah untuk nilai-nilai kecil n dan khususnya untuk n = 1 , kasus 'nol-satu' (di mana setiap sisi diberi label 0 atau 1 dan tepi dengan 0 harus dicocokkan dengan tepi dengan 1). Di sini ada (dengan rotasi simetri) hanya enam jenis ubin (ubin semua-nol, ubin semua-satu, ubin dengan tiga nol dan satu, ubin dengan tiga yang dan nol, dan dua ubin berbeda dengan dua nol) dan dua yang, '0011' dan '0101'), jadi contoh masalah hanyalah spesifikasi dan satu set lima angka T 0000 , T 0001 , T 0011 , T 0101 , T 0111 dan T 1111 (mewakili hitungan dari setiap jenis ubin) dengan T 0000 + T 0001 + T 0011 + T . Masalahnya jelas dalam NP (denganmdiberikan dalam unary) karena solusi dapat dipamerkan dan kemudian diperiksa dalam waktu polinomial (dalamm), tetapi dikenal sebagai NP-lengkap, atau ada beberapa algoritma pemrograman dinamis yang dapat diterapkan di sini? Bagaimana dengan kasus 'berbingkai' di mana spesifikasi masalah juga mencakup empat tepi kotak yang harus dicocokkan? (Jelas jika case yang dibingkai adalah NP-complete case yang dibingkai hampir pasti juga)
sumber
Jawaban:
Karena Anda menyebutkan bahwa Anda tertarik untuk menyelesaikan masalah ini untuk nilai-nilai , saya sarankan Anda mencoba menerapkan ini dalam SAT solver atau sebagai integer linear program (ILP). Salah satu akan dapat menyandikan kendala, tetapi dengan cara yang sedikit berbeda:n
Untuk SAT, ada pengkodean yang sangat bersih dari pilihan ubin mana yang masuk ke setiap kotak, dan pengkodean kendala yang sedikit kurang bersih mengenai jumlah masing-masing jenis ubin (menggunakan bit aritmatika).
Untuk ILP, ada pengkodean batasan yang sangat bersih mengenai jumlah masing-masing jenis ubin yang tersedia, dan pengkodean yang sedikit kurang bersih dari batasan di mana ubin dapat berdekatan satu sama lain (tetapi masih dapat diungkapkan, karena Anda dapat mengekspresikan formula boolean sembarang dalam ILP).
Saya berharap bahwa untuk kecil atau menengah , pendekatan ini mungkin bekerja secara efisien.n
sumber