Эта классическая игра-головоломка NP-полная?


10

Существует классическая игра-головоломка, очень похожая на кроссворд, за исключением того, что дается список слов, а затем дается квадратная доска составленная из единичных квадратов, с некоторыми квадратами, затемненными как кроссворд , и на некоторых квадратах уже написано письмо. Цель состоит в том, чтобы записать каждое слово из списка один раз и только один раз в головоломке, где каждое слово пишется либо горизонтально (слева направо), либо вертикально (сверху вниз) в не затемненные последовательные квадраты, и когда вы пишете слово два квадрата, окружающие концы слова, должны быть либо затемнены, либо удалены от доски. Также для букв, предварительно записанных в некоторые квадраты, написанные слова, которые перекрывают эти квадраты, должны соответствовать предварительно написанной букве.N×N

Теперь, если мы примем алфавит фиксированного размера для слов, мы решаем, сможем ли мы заполнить игровое поле правильным решением, используя точно каждое слово в списке один раз и только один раз, если задача NP-полная, если длина стороны доски равна не зафиксировано?

Ответы:


6

Извините за ответ на старый пост.

Я думал об этом, и я думаю, что проблема с фиксированным алфавитом также является NP-полной.

Я собираюсь уменьшить положительный SAT 1 к 3 к этой проблеме слова

Вчера у меня возникли проблемы с идеями решения проблемы. У меня были проблемы с изменением каждой переменной, пока я снова не посмотрел на вопрос и не понял, что вы позволили иметь квадраты с засаженными символами. Это сильно упростило сокращение. Моя другая идея заключалась в том, чтобы иметь слова разной длины для каждой переменной.

СНИЖЕНИЕ

Теперь я собираюсь описать гаджеты, которые мы будем использовать:

Переменный гаджет

Мы помечаем каждую переменную различным числовым индексом, и у нас будет разное число для каждой переменной. Мы выбираем самый большой индекс и представляем число в двоичном виде, мы будем называть эту двоичную цепочку .n

Затем мы создаем два разных вертикальных слова для каждой переменной. Все слова будут иметь длину (Только если мы разрешаем дублирование слов в списке слов), где | п | длина двоичной цепи n .3+|n||n|n

Например, пусть самый большой индекс будет номером . Когда мы преобразовываем это число в двоичном виде, мы получаем цепочку 100 в двоичном виде, эта цепь имеет длину три. Таким образом, каждое переменное слово будет иметь длину 6 в этом примере.41006

32n3

43

41

320013420014

1|n|

Мы должны копировать эти слова много раз, нам потребуется одна копия каждого слова для каждого вхождения переменной в экземпляре SAT. Это создаст дубликаты в списке слов. Мы можем избавиться от дубликатов, добавив еще одну двоичную цепочку в двоичную цепочку, которая однозначно идентифицирует переменную. Эта новая цепочка однозначно идентифицирует каждое вхождение переменной.

Чтобы сделать это, мы просто присваиваем каждому вхождению переменной другую двоичную цепочку и подставляем эту цепочку в конец двоичного представления переменной.

niini|ni||ni|

Это избавит от дубликатов внутри переменных слов.

x2

32010013 4201001432010103 4201010432010113 42010114

Гаджет

6

535354535453545353

435

mm|m||m|, Мы добавляем каждую двоичную цепочку к словам предложения, которые принадлежат предложению.

Теперь давайте посмотрим на изображение гаджета-клаузулы на доске:

Пример предложения

(x2x3x4)(x1x2x3)(x2x3x4)

4

Если мы не разрешаем дублирование внутри списка слов, нам придется изменить изображение.

5b5b5b10

b201010bb201110bb21001b

b

Смотрите пример:

пункт, не повторяется

Гаджет переменной согласованности

Это гаджет, который гарантирует, что игрок может присвоить одинаковое значение только для всех литеральных столбцов переменной.

У нас будет новый гаджет для каждой переменной

Мы создадим два новых слова для каждого гаджета.

2kkx263 k64 k

x2

63636464

Если мы хотим избежать повторения слов, обратите внимание, что каждый гаджет согласованности принадлежит отдельной переменной. Таким образом, мы можем добавить двоичную цепочку, которая идентифицирует каждую переменную, к двум словам, которые мы создали для этого гаджета.

Теперь давайте рассмотрим пример изображения этого гаджета:

Гаджет переменной согласованности

x2(x1x2x3)(x2x3x4)

3434, Мы можем поместить оставшееся слово этого гагдета в другой ряд

Если мы не допустим дублирования в списке слов, слова внутри примера изображения будут:

Для строк:

6b6b0106b6b010

Для столбцов:

b201001bb201010b

b

Смотрите пример:

Консистенция гаджета, без повторов

Гаджет дампа клаузулы

Это гаджет, созданный для размещения неиспользованных слов предложения. Для этого нам нужно всего лишь разместить две строки для каждого слова предложения в пустой части доски. Эти строки не связаны ни с какой другой строкой или столбцом.

На этом мы заканчиваем сокращение, поскольку мы утверждали, что нам нужно только 6 символов для сокращения.

пример

Если предыдущее объяснение сбивало с толку, вот пример изображения положительного значения 1 в 3 SAT, которое было сведено к этой проблеме слов:

Пример платы

Если мы запрещаем повторные слова:

Пример доски, без повторов

Экземпляр, который был уменьшен:

(x1x2x3)(x2x3x4)


Спасибо за публикацию! К сожалению, функция Stack Exchange заключается в том, что длинные ответы вряд ли будут прочитаны кем-либо, поэтому вы вряд ли получите много голосов от тонны проделанной вами здесь работы. Я постараюсь прочитать это, но, если честно, есть хороший шанс, что я не обойду это.
Дэвид Ричерби

2
@DavidRicherby Джаджа да. Я долго думал над этим вопросом. Я думал, что когда я отправлю этот ответ, все пойдут и проголосуют за него. Не случилось ОК, не бери в голову. Если у вас есть вопросы по поводу сокращения, вы можете задать их мне
rotia

4

Я думаю, что следующее сокращение от Направленного гамильтонова пути работает:

G=(V,E)s,tV

V{}V

vvvVvu(u,v)E

|V|

лестница

|E|(|V|1)

sstt

Теперь, чтобы заполнить ступеньки, внутри шагов можно поместить только слова-вершины, а чтобы соединить две вершины, между ними нужно вставить слово ребра, которое соответствует существующему ребру в графе. Неиспользованные края можно положить во вторую часть доски. Второе направление тривиально.

Я думаю, что это работает (набросок правильности, который я набросал, в лучшем случае махнул рукой, но все же).


1
stN×NN

Это хорошо и, кажется, работает, но размер алфавита не является фиксированным, как запрошенный мой оригинальный пост. Возможна ли модификация для использования алфавита фиксированного размера и все же сделать это сокращение?
user2566092

uv
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.