Bu klasik bulmaca kitap oyunu NP tam mı?


10

Bir bulmaca listesine çok benzeyen klasik bir bulmaca kitabı oyunu var, ancak bir kelime listesi veriliyor ve daha sonra, bir kare gibi oluşturulmuş bazı kareler ile birim karelerden oluşan bir kare tahta veriliyor ve bazı meydanlarda önceden yazılmış bir mektup vardır. Amaç, her sözcüğü listeden bir kez ve yalnızca bir kez bulmacada yazmak, burada her kelime yatay (soldan sağa) veya dikey olarak (yukarıdan aşağıya) karartmasız ardışık karelere yazılır ve bir sözcük yazdığınızda , kelimenin uçlarını çevreleyen iki kare karartılmış ya da tahtadan çıkarılmalıdır. Ayrıca bazı karelere önceden yazılmış harfler için, bu karelerle örtüşen yazılı kelimeler önceden yazılmış harfe saygı duymalıdır.N×N

Şimdi, kelimeler için sabit boyutlu bir alfabe varsayarsak, tahtanın yan uzunluğu ise, listedeki tam olarak her kelimeyi bir kez ve sadece NP-bir problemi kullanarak geçerli bir çözümle doldurup doldurmayacağımıza karar verir. sabit değil mi?

Yanıtlar:


6

Eski bir gönderiyi cevapladığım için üzgünüm.

Bunu düşünüyorum ve sabit bir alfabe ile ilgili sorunun NP-tamamlanmış olduğunu düşünüyorum.

Bu kelime problemine pozitif 1'i 3 arada SAT'ı azaltacağım

Dün sorunu çözmek için fikirlerle gelmekte zorlanıyordum. Tekrar soruya bakana kadar her değişkeni farklı yapmakta zorlandım ve ekili sembollerle karelere izin verdiğinizi fark ettim. Bu azalmayı çok kolaylaştırdı. Diğer fikrim, her bir değişken için farklı uzunluktaki kelimelere sahip olmaktı.

REDÜKSİYON

Şimdi kullanacağımız cihazları açıklayacağım:

Değişken gadget'ı

Her değişkeni farklı bir sayısal dizinle etiketliyoruz ve her değişken için farklı bir sayıya sahip olacağız. En büyük endeksi seçiyoruz ve sayıyı ikili olarak temsil ediyoruz, bu ikili zinciri .n

Sonra her değişken için iki farklı dikey kelime yaratırız. Tüm kelimelerin uzunluğu (Yalnızca sözcük listesinde yinelenen sözcüklere izin verirsek), burada | n | İkili zincir uzunluğu n .3+|n||n|n

Örneğin, en büyük dizin sayı olsun . İkili olarak bu sayıyı dönüştürdüğümüzde, ikili olarak 100 zincirini elde ederiz , bu zincirin uzunluğu üçtür. Bu nedenle , bu örnekte her değişken kelimenin uzunluğu 6 olacaktır .41006

Şimdi her değişken için iki farklı kelime yaratıyoruz. Bir kelime başlangıçta sembolüne , daha sonra aşağıdaki 2 sembolüne , daha sonra değişkenin indeksini temsil eden bir ikili zincire sahip olacak ve n zinciriyle aynı uzunluğa ve son olarak 3 sembolüne sahip olacak şekilde zinciri sıfırlayacağız. sonunda. Tabii ki semboller değiştirilebilir.32n3

Diğer sözcük neredeyse aynıdır, ancak 3 sembolü yerine sembolü olacaktır .43

Örneğin, en büyük dizin sayı olsun . İndeks 1 ile değişken için şu iki kelimeye sahip olacağız :41

ve 420014320013420014

Gördüğümüz gibi uzunluğu olan ikili sayıyı sıfırlarla doldurduk | n |1|n|

Bu kelimeleri birçok kez kopyalamalıyız, SAT örneğindeki bir değişkenin her oluşumu için her kelimenin bir kopyasına ihtiyacımız olacak. Bu, sözcük listesinde kopyalar oluşturur. Değişkeni benzersiz şekilde tanımlayan ikili zincire başka bir ikili zincir ekleyerek kopyalardan kurtulabiliriz. Bu yeni zincir, bir değişkenin her bir oluşumunu benzersiz bir şekilde tanımlayacaktır.

Bunu yapmak için, değişkenin her bir yinelemesini başka bir ikili zincir atarız ve değişkenin ikili gösteriminin sonunda bu zinciri değiştiririz.

Her değişken için farklı bir dizin oluşturmak için gereken ilk bu yeni ikili zinciri oluşturmak için her endekste en büyük numarayı aramak nerede ben her değişken için tanımlayıcılardır. Bundan sonra, n i sayısını ikili bir zincire dönüştürüyoruz ve daha sonra zincirin uzunluğunu sayıyoruz, bu sayı olarak adlandırıyoruz | n i | . Daha sonra, her bir dizin için, değişkenin her bir oluşumu için farklı bir ikili sayı oluştururuz. İkili zincirin uzunluğu oluncaya kadar sayıyı sıfırlarla dolduruyoruz | n i | böylece değişkenin her bir oluşumuna ait olan tüm kelimeler aynı uzunlukta olur.niini|ni||ni|

Bu, değişken kelimelerin içindeki kopyalardan kurtulacaktır.

x2

32010013 4201001432010103 4201010432010113 42010114

Clause gadget'ı

6

535354535453545353

435

mm|m||m|. Her ikili zinciri, maddeye ait cümle kelimelerine ekleriz.

Şimdi tahtada bir cümle gadget'ının resmini görelim:

Örnek fıkra

(x2x3x4)(x1x2x3)(x2x3x4)

4

Sözcük listesi içinde kopyalara izin vermiyorsak görüntüyü değiştirmemiz gerekecek.

5b5b5b10

b201010bb201110bb21001b

b

Bir örneğe bakın:

fıkra, tekrar yok

Değişken tutarlılık gadget'ı

Bu, oynatıcının bir değişkenin tüm değişmez sütunları için yalnızca aynı değeri atamasını sağlayan bir araçtır.

Her değişken için yeni bir gadgetımız olacak

Her gadget için iki yeni kelime oluşturacağız.

2kkx263 k64 k

x2

63636464

Tekrarlanan kelimelerden kaçınmak istiyorsak, her tutarlılık gadget'ının farklı bir değişkene ait olduğuna dikkat edin. Böylece, bu gadget için oluşturduğumuz iki kelimeye her değişkeni tanımlayan ikili zinciri ekleyebiliriz.

Şimdi bu gadget'ın örnek bir resmini görelim:

Değişken tutarlılık gadget'ı

x2(x1x2x3)(x2x3x4)

3434. Bu gagdet'in kalan kelimesini diğer satıra yerleştirebiliriz

Kelimeler listesinde kopyalara izin vermiyorsak, örnek resim içindeki kelimeler şöyle olacaktır:

Satırlar için:

6b6b0106b6b010

Sütunlar için:

b201001bb201010b

b

Bir örneğe bakın:

Tutarlılık gadget'ı, tekrar yok

Clause dökümü gadget'ı

Bu, kullanılmayan yan tümce kelimelerini yerleştirmek için oluşturulmuş bir araçtır. Bunu yapmak için, her bir yan kelime için iki satır yerleştirmeliyiz. Bu satırlar başka bir satıra veya sütuna bağlı değildir.

Bununla indirgeme işlemini bitiriyoruz, çünkü azaltma için sadece 6 sembole ihtiyacımız var.

Misal

Önceki açıklama kafa karıştırıcıysa, 3 SAT'da 1 bu kelime sorununa indirgenmiş bir pozitif 1 örneğinin örneği:

Örnek tahta

Tekrarlanan kelimelere izin vermiyorsak:

Örnek tahta, tekrar yok

İndirgenmiş örnek:

(x1x2x3)(x2x3x4)


Bunu gönderdiğiniz için teşekkür ederiz! Stack Exchange'in talihsiz bir özelliği, uzun cevapların herkes tarafından okunmasının olası olmamasıdır, bu nedenle burada yaptığınız tonlarca işten çok sayıda oy almanız pek olası değildir. Bunu okumaya çalışacağım, ama dürüst olursam, bu konuya değinmem için iyi bir şans var.
David Richerby

2
@DavidRicherby jaja evet. Bir süredir bu soruyu düşünüyordum. Bu cevabı gönderdiğimde herkesin gidip onu oylayacağını düşündüm. Olmadı. Boş ver. Azaltma ile ilgili sorularınız varsa bana sorabilirsiniz
rotia

4

Bence Yönlendirilmiş Hamilton yolundan aşağıdaki azalma işe yarıyor:

G=(V,E)s,tV

V{}V

vvvVvu(u,v)E

|V|

merdivenler

|E|(|V|1)

sstt

Şimdi, merdivenleri doldurmak için, adımların içine sadece köşe sözcükleri konabilir ve iki köşe bağlamak için, aralarında grafikte mevcut bir kenara karşılık gelen bir kenar kelime konulmalıdır. Kullanılmayan kenarlar tahtanın ikinci kısmına konulabilir. İkinci yön önemsizdir.

Bence bu işe yarıyor (çizdiğim doğruluk kanıtı en iyi ihtimalle el sallıyor, ama yine de).


1
stN×NN

Bu güzel ve işe yarıyor gibi görünüyor, ancak orijinal yazı istediğim gibi alfabe boyutu sabit değil. Sabit boyutlu bir alfabe kullanmak ve yine de bu küçültmeyi yapmak mümkün olan bir değişiklik var mı?
user2566092

uv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.