Czy ta klasyczna gra z układankami NP-zupełna?

10

Istnieje klasyczna gra logiczna, bardzo podobna do krzyżówki, z tą różnicą, że podana jest lista słów, a następnie podana jest kwadratowa tablica złożona z kwadratów jednostkowych, z niektórymi kwadratami zaciemnionymi jak krzyżówka, a na niektórych kwadratach jest już napisany list. Celem jest zapisanie każdego słowa z listy raz i tylko raz w układance, gdzie każde słowo jest zapisywane poziomo (od lewej do prawej) lub pionowo (z góry na dół) na nie zaciemnione kolejne kwadraty i podczas pisania słowa , dwa kwadraty otaczające końce słowa muszą być zaciemnione lub wyłączone z planszy. Również w przypadku liter zapisanych wcześniej na niektóre kwadraty słowa, które pokrywają się z tymi kwadratami, muszą być zgodne z literą wcześniej napisaną.N×N

Teraz, jeśli przyjmiemy stały alfabet dla słów, decydujemy, czy możemy wypełnić tablicę prawidłowym rozwiązaniem, używając dokładnie każdego słowa na liście tylko raz, i tylko raz problem NP-zupełny, jeśli długość boku deski wynosi nie naprawiony?

użytkownik2566092
źródło

Odpowiedzi:

6

Przepraszamy za odpowiedź na stary post.

Zastanawiałem się nad tym i myślę, że problem ze stałym alfabetem jest również NP-zupełny.

Mam zamiar zredukować pozytywny 1-w-3 SAT do tego problemu słownego

Wczoraj miałem problemy ze znalezieniem pomysłów na rozwiązanie problemu. Miałem problem z odróżnieniem każdej zmiennej, dopóki nie spojrzałem ponownie na pytanie i zdałem sobie sprawę, że pozwoliłeś mieć kwadraty z posadzonymi symbolami. To znacznie uprościło redukcję. Innym moim pomysłem było stworzenie słów o różnej długości dla każdej zmiennej.

REDUKCJA

Teraz opiszę gadżety, których będziemy używać:

Zmienny gadżet

Każdą zmienną oznaczamy innym indeksem liczbowym i dla każdej zmiennej będziemy mieć inną liczbę. Wybieramy największy indeks i reprezentujemy liczbę w formacie binarnym, nazwiemy ten łańcuch binarny .n

Następnie tworzymy dwa różne słowa pionowe dla każdej zmiennej. Wszystkie słowa będą miały długość(Tylko jeśli zezwalamy na powielanie słów na liście słów), gdziejest długością łańcucha binarnego .| n | n3+|n||n|n

Na przykład, niech największym indeksem będzie liczba . Kiedy przekształcamy tę liczbę na binarną, otrzymujemy łańcuch w postaci binarnej, łańcuch ten ma długość trzy. Tak więc każde słowo zmienne będzie miało w tym przykładzie długość .100 641006

Teraz tworzymy dwa różne słowa dla każdej zmiennej. Jedno słowo będzie miało symbol na początku, następnie symbol poniżej, a następnie łańcuch binarny, który reprezentuje indeks zmiennej, a my zerujemy łańcuch tak, aby miał taką samą długość jak łańcuch a na końcu symbol na końcu. Oczywiście symbole można zmienić.2 n 332n3

Drugie słowo jest prawie takie samo, ale będzie miało symbol zamiast symbolu .343

Na przykład, niech największym indeksem będzie liczba . Będziemy mieć dwa następujące słowa dla zmiennej o indeksie :141

420014320013 i420014

Jak widzimy, dopełniamy binarną reprezentację liczby zerami, aby miała długość| n |1|n|

Musimy skopiować te słowa wiele razy, potrzebujemy jednej kopii każdego słowa na każde wystąpienie zmiennej w instancji SAT. Spowoduje to utworzenie duplikatów na liście słów. Możemy pozbyć się duplikatów, dodając kolejny łańcuch binarny do łańcucha binarnego, który jednoznacznie identyfikuje zmienną. Ten nowy łańcuch jednoznacznie identyfikuje każdą wystąpienie zmiennej.

Aby to zrobić, po prostu przypisujemy każdemu wystąpieniu zmiennej inny łańcuch binarny i olacy ten łańcuch na końcu binarnej reprezentacji zmiennej.

Aby utworzyć ten nowy łańcuch binarny, najpierw musimy utworzyć inny indeks dla każdej zmiennej, nazywamy największą liczbą w każdym indeksie gdzie jest identyfikatorem dla każdej zmiennej. Następnie przekształcamy liczbę w łańcuch binarny, a następnie liczymy długość łańcucha, nazywamy ten numer. Następnie dla każdego indeksu tworzymy inną liczbę binarną dla każdej wystąpienia zmiennej. Wpisujemy liczbę zerami, aż długość łańcucha binarnego stanie siętak aby wszystkie słowa należące do każdej wystąpienia zmiennej miały tę samą długość. i n i | n i | | n i |niini|ni||ni|

Pozwoli to pozbyć się duplikatów w słowach zmiennych.

Załóżmy na przykład, że zmienna pojawia się trzy razy w instancji SAT. Tworzymy następujące słowa:x2

42010014 32010103 42010104 32010113 4201011432010013 42010014 , i32010103 4201010432010113 42010114

Gadżet klauzuli

Dla każdego gadżetu klauzuli utworzymy trzy nowe wyrazy poziome, każde słowo klauzuli będzie miało długość kwadratów (tylko jeśli zezwolimy na powielanie słów na liście słów). Oto słowa, które stworzymy dla każdej klauzuli:6

535453 545353535354 , i535453545353

Mamy inne słowo klauzuli dla każdego możliwego sposobu wypełnienia zdania, symbol reprezentuje literalny zbiór wartości true, a symbol reprezentuje literalny zbiór wartości false. Liczba służy do wskazania, że ​​jest to słowo klauzulowe.3 5435

Powtórzą się słowa na liście słów, możemy się ich pozbyć, stosując procedurę, której użyliśmy do jednoznacznej identyfikacji słów zmiennych. Oznacza to, że tworzymy inny łańcuch binarny dla każdej klauzuli i dołączamy każdy łańcuch do słów klauzuli odpowiadających każdej klauzuli. Aby to zrobić, tworzymy nowy indeks klauzul i wybieramy największą liczbę indeksu, nazwiemy ten numer . Reprezentujemy jako łańcuch binarny i nazywamy długość tego łańcucha binarnego jako. Teraz tworzymy inną liczbę binarną dla każdej klauzuli, zaczynając od liczby 1, i wpisujemy liczbę zerami, aby utworzyć łańcuch binarny o długościm | m | | m |mm|m||m|. Dołączamy każdy łańcuch binarny do słów klauzuli, które należą do klauzuli.

Teraz zobaczmy na tablicy zdjęcie gadżetu klauzulowego:

Przykładowa klauzula

Ten przykład reprezentuje klauzulę a redukowana instancja 1 na 3 to( x 1x 2x 3 ) ( x 2x 3x 4 )(x2x3x4)(x1x2x3)(x2x3x4)

Jak widzimy, są zapisane kwadraty. Pionowe kolumny mają zapisane symbole wskazujące, które literały znajdują się w klauzuli. Koniec i początek kolumny to puste kwadraty. Pozwala to graczowi wybrać wartość zmiennej. Oznaczone symbole w poziomym rzędzie zmuszają gracza do wstawienia słowa klauzulowego w tym rzędzie. Ponieważ wszystkie słowa klauzul mają tylko jeden symbol co oznacza, że ​​tylko jeden z literałów znajdujących się w gadżecie klauzul może być ustawiony na „prawda”.4

Jeśli nie pozwolimy na duplikaty na liście słów, będziemy musieli zmodyfikować obraz.

Wiersz klauzuli na obrazie będzie : a literalne kolumny będą od lewej do prawej:5b5b5b10

b 201110 b b 21001 bb201010b , ib201110bb21001b

Gdzie symbol oznacza pusty kwadratb

Zobacz przykład:

klauzula, bez powtórzeń

Gadżet o zmiennej spójności

Jest to gadżet, który zapewnia, że ​​gracz może przypisać tylko tę samą wartość dla wszystkich literalnych kolumn zmiennej.

Będziemy mieć nowy gadżet dla każdej zmiennej

Dla każdego gadżetu utworzymy dwa nowe słowa.

Długość słowa będzie zależeć od liczby wystąpień zmiennej. Długość słowa będzie wynosić gdzie jest liczbą wystąpień zmiennej. Jeśli więc zmienna pojawi się dwa razy w instancji sat, słowa będą miały długość czterech. Jedno z dwóch słów powstaje przez powtórzenie łańcucha razy, gdzie k jest liczbą wystąpień zmiennej. Drugie słowo powstaje przez powtórzenie łańcucha razy, gdzie k jest liczbą wystąpień zmiennej w instancji SAT, która jest zmniejszana.2kkx263 k64 k

Na przykład, jeśli zmienna ma dwie częstotliwości, słowa należące do odpowiedniego gadżetu przypisania zmiennej to:x2

6363 i6464

Jeśli chcemy uniknąć powtarzania słów, zauważ, że każdy gadżet spójności należy do innej zmiennej. Możemy więc dołączyć łańcuch binarny identyfikujący każdą zmienną do dwóch słów, które stworzyliśmy dla tego gadżetu.

Zobaczmy teraz przykładowe zdjęcie tego gadżetu:

Gadżet o zmiennej spójności

Ten gadżet dotyczy zmiennej a redukowana instancja 1 na 3 to .x2(x1x2x3)(x2x3x4)

Jak widzimy, istnieją dwa poziome rzędy, symbole zapisane w rzędach zapewniają, że możemy umieszczać tylko słowa zawierające te symbole, te słowa są słowami, które stworzyliśmy dla tego gadżetu. W jednym z wierszy widzimy, że wchodzą do niego dwie kolumny, ponieważ ze względu na symbole umieszczone w kolumnach upewniamy się, że możemy umieszczać tylko słowa zmienne. Ponieważ jedyne słowa, które możemy umieścić tylko w rzędzie o zmiennej konsystencji, zawierają tylko symbol lub tylko symbol , zmuszamy gracza do umieszczenia wszystkich gadżetów o tym symbolu wewnątrz gadżetu. Oznacza to, że jedyne zmienne słowa, które można umieścić w gadżetach klauzul, mają tylko symbol lub tylko symbol3434. Możemy umieścić pozostałe słowo tego gagdeta w drugim rzędzie

Jeśli nie zezwalamy na duplikaty na liście słów, słowa w przykładowym obrazie będą następujące:

Dla rzędów:

6b6b010 i6b6b010

Dla kolumn:

b201001b ib201010b

Gdzie symbol oznacza pusty kwadratb

Zobacz przykład:

Gadżet spójności, bez powtórzeń

Gadżet zrzutu zrzutu

Jest to gadżet stworzony do umieszczania nieużywanych słów w klauzulach. Aby to zrobić, musimy umieścić tylko dwa wiersze dla każdego słowa klauzuli w pustej części tablicy. Te rzędy nie są połączone z żadnym innym rzędem ani kolumną.

Dzięki temu kończymy redukcję, ponieważ twierdziliśmy, że potrzebujemy tylko 6 symboli do redukcji.

Przykład

Jeśli poprzednie wyjaśnienie było mylące, oto przykładowy przykład dodatniej 1 na 3 SAT, który został zredukowany do tego problemu słownego:

Przykładowa tablica

Jeśli zabronimy powtarzania słów:

Przykładowa tablica, bez powtórzeń

Instancja, która została zmniejszona to:

(x1x2x3)(x2x3x4)

rotia
źródło
Dziękujemy za opublikowanie tego! Niefortunną funkcją Stack Exchange jest to, że nikt nie będzie czytał długich odpowiedzi, więc jest bardzo mało prawdopodobne, aby uzyskać wiele głosów z ton pracy, którą wykonałeś tutaj. Spróbuję to przeczytać, ale jeśli mam być szczery, istnieje spora szansa, że ​​się do tego nie obejdę.
David Richerby,
2
@DavidRicherby jaja tak. Zastanawiałem się przez chwilę nad tym pytaniem. Myślałem, że kiedy opublikuję tę odpowiedź, wszyscy pójdą i poprą ją. Nie stało się Nieważne. Jeśli masz pytania dotyczące obniżki, możesz mi zadać
rotia
4

Myślę, że działa następująca redukcja z Directed Hamiltonian path:

Biorąc pod uwagę wykres i dwa wierzchołki , otrzymujemy następującą łamigłówkę:G=(V,E)s,tV

Alfabet jest , z są niektóre nie symbol .V{}V

Słowa są dla każdego i dla każdej krawędzi .vvvVvu(u,v)E

Tablica składa się z dwóch części. Pierwszy wygląda jakpoziome „schody” o długości 3, ułożone jeden na drugim, jak pokazano tutaj:|V|

schody

Druga część składa się z rozłącznych przestrzeni o długości 2.|E|(|V|1)

Ponadto ustawiamy w pierwszym (dolnym) stopniu schodów słowo (i usuwamy je z listy słów), aw ostatnim kroku umieszczamy .t tsstt

Teraz, aby wypełnić schody, w schodach można wstawiać tylko słowa wierzchołków, a aby połączyć dwa wierzchołki, należy umieścić między nimi słowo krawędzi, które odpowiada istniejącej krawędzi na wykresie. Niewykorzystane krawędzie można umieścić w drugiej części planszy. Drugi kierunek jest trywialny.

Myślę, że to działa (naszkicowany przeze mnie dowód poprawności jest w najlepszym razie machany ręcznie, ale nadal).

Shaull
źródło
1
Miły. Należy pamiętać, że jest to wystarczające, aby wstępnie napisać pojedyncze i w w najbardziej oddalonych miejsc schodów (nie ma potrzeby, aby usunąć je z listy słów). Dla kompletności warto wspomnieć, że siatkę można łatwo wykonać , wybierając duże i wypełnione czarnymi kwadratami. t N × N NstN×NN
FrankW,
To jest miłe i wydaje się działać, ale rozmiar alfabetu nie jest ustalony tak, jak prosił o to mój oryginalny post. Czy istnieje możliwość modyfikacji alfabetu o stałym rozmiarze i wciąż zmniejszania?
user2566092,
@ user2566092 - dobry punkt. Spróbuję myśleć. Być może zamiast słów można użyć gadżetu, który może być wypełniony tylko reprezentacją krawędzi , a następnie wszystko można zakodować w postaci binarnej. uv
Shaull