Извините за ответ на старый пост.
Я думал об этом, и я думаю, что проблема с фиксированным алфавитом также является NP-полной.
Я собираюсь уменьшить положительный SAT 1 к 3 к этой проблеме слова
Вчера у меня возникли проблемы с идеями решения проблемы. У меня были проблемы с изменением каждой переменной, пока я снова не посмотрел на вопрос и не понял, что вы позволили иметь квадраты с засаженными символами. Это сильно упростило сокращение. Моя другая идея заключалась в том, чтобы иметь слова разной длины для каждой переменной.
СНИЖЕНИЕ
Теперь я собираюсь описать гаджеты, которые мы будем использовать:
Переменный гаджет
Мы помечаем каждую переменную различным числовым индексом, и у нас будет разное число для каждой переменной. Мы выбираем самый большой индекс и представляем число в двоичном виде, мы будем называть эту двоичную цепочку .N
Затем мы создаем два разных вертикальных слова для каждой переменной. Все слова будут иметь длину (Только если мы разрешаем дублирование слов в списке слов), где | п | длина двоичной цепи n .3 + | п || п |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|, Мы добавляем каждую двоичную цепочку к словам предложения, которые принадлежат предложению.
Теперь давайте посмотрим на изображение гаджета-клаузулы на доске:
(x2∨x3∨x4)(x1∨x2∨x3)∧(x2∨x3∨x4)
4
Если мы не разрешаем дублирование внутри списка слов, нам придется изменить изображение.
5b5b5b10
b201010bb201110bb21001b
b
Смотрите пример:
Гаджет переменной согласованности
Это гаджет, который гарантирует, что игрок может присвоить одинаковое значение только для всех литеральных столбцов переменной.
У нас будет новый гаджет для каждой переменной
Мы создадим два новых слова для каждого гаджета.
2∗kkx263 k64 k
x2
63636464
Если мы хотим избежать повторения слов, обратите внимание, что каждый гаджет согласованности принадлежит отдельной переменной. Таким образом, мы можем добавить двоичную цепочку, которая идентифицирует каждую переменную, к двум словам, которые мы создали для этого гаджета.
Теперь давайте рассмотрим пример изображения этого гаджета:
x2(x1∨x2∨x3)∧(x2∨x3∨x4)
3434, Мы можем поместить оставшееся слово этого гагдета в другой ряд
Если мы не допустим дублирования в списке слов, слова внутри примера изображения будут:
Для строк:
6b6b0106b6b010
Для столбцов:
b201001bb201010b
b
Смотрите пример:
Гаджет дампа клаузулы
Это гаджет, созданный для размещения неиспользованных слов предложения. Для этого нам нужно всего лишь разместить две строки для каждого слова предложения в пустой части доски. Эти строки не связаны ни с какой другой строкой или столбцом.
На этом мы заканчиваем сокращение, поскольку мы утверждали, что нам нужно только 6 символов для сокращения.
пример
Если предыдущее объяснение сбивало с толку, вот пример изображения положительного значения 1 в 3 SAT, которое было сведено к этой проблеме слов:
Если мы запрещаем повторные слова:
Экземпляр, который был уменьшен:
(x1∨x2∨x3)∧(x2∨x3∨x4)
Я думаю, что следующее сокращение от Направленного гамильтонова пути работает:
Теперь, чтобы заполнить ступеньки, внутри шагов можно поместить только слова-вершины, а чтобы соединить две вершины, между ними нужно вставить слово ребра, которое соответствует существующему ребру в графе. Неиспользованные края можно положить во вторую часть доски. Второе направление тривиально.
Я думаю, что это работает (набросок правильности, который я набросал, в лучшем случае махнул рукой, но все же).
источник