Доминоза NP-Hard?


26

Доминоза - относительно новая игра-головоломка. Это играется на (n+1)×(n+2) сетке. Перед началом игры кости домино (0,0),(0,1),,(n,n) размещаются на сетке (что составляет идеальный тайлинг). На следующем шаге кости домино скрыты, и остаются только цифры. Цель игры - восстановить оригинальное расположение костей домино. Вы можете играть в игру здесь:http://www.puzzle-dominosa.com/ :

Правила:

Правила просты. Вы должны найти местоположение всех домино на сетке. Домино - это пара чисел. Вы можете иметь только одну из каждой пары.

У меня есть несколько полиномиальных алгоритмов, которые решают относительно небольшую часть головоломки. Я также мог бы показать, что типичные сетки Доминозы имеют по крайней мере 2n2+o(n)решения.

Доминоза NP-Hard?


«Загадка может быть легко сведена к проблеме SAT или ILP». Чтобы доказать NP-полноту, не хотите ли вы наоборот?
Деннис Мэн,

1
@DennisMeng Смысл упомянутых в вопросе сокращений - установить, что проблема в NP. Так что все, что осталось, это доказать, что это сложно. Кстати, не нужно сокращений, чтобы увидеть, что проблема в NP. Расположение домино само по себе является свидетельством разрешимости полиномиального размера.

Я предполагаю, что проблема, чья NP-полнота является предметом спора, заключается в том, что, учитывая расположение чисел, оно происходит от расположения домино. Если проблема заключается в том, чтобы на самом деле показать расположение домино (когда оно существует), то проблема не является проблемой решения, и «NP complete» не имеет смысла.

@AndreasBlass Можно также рассмотреть более крупную проблему: учитывая k подмножеств элементов из доминошек от 1 до n и граф г с 2К вершинами, помеченными от 1 до N , определить, можно ли покрыть его данными домино. Если эта проблема связана с P, то существует алгоритм P-времени для восстановления исходного тайлинга, потому что вы можете попробовать удалить ребро и проверить в P-времени, возможно ли завершить сетку.

1
Согласно статье Г. Норда, названной NP-полнотой обобщенных мультисколемовых последовательностей, следующая аналогичная проблема является NP-полной. Экземпляр: Граф G=(V,E) , разбиение ребер на непересекающиеся множества: E1,E2,...,Em,|m||V|/2 с |Ei|2, i=1,,mтакой, что никакие два ребра с одинаковой меткой не имеют общую вершину. ВОПРОС: Есть ли подмножество ME с |M|=|V|/2 такой, что нет двух ребер в M, имеющих общую вершину, и таких, что M содержит не более одного ребра от каждого Ei, i=1,,м ?
Йоав бар Синай

Ответы:


9

Примечание: это продолжение и пересмотр моего другого ответа .

Проблемы с редукцией

Напомним решение проблемы:

Существует ли идеальная мозаика, покрывающая данную (N+1)×(N+2) сетку с N уникальными плитками?

Таким образом, для сетки (N+1)×(N+2) мы можем использовать только N переменных.

Но:

  • Наше сокращение требует много уникальных переменных, намного больше, чем О(N) .
  • Кроме того, наши провода имеют открытый конец, что приводит к:
    • Откуда мы знаем, что можем плиточить открытые площадки?

Чтобы решить первую проблему, мы искусственно увеличиваем игровое поле; по сути, мы делаем равным количеству переменных, которые нам действительно нужны, затем создаем сетку размером ( n + 1 ) × ( n + 2 ) и помещаем нашу сетку в нижний левый угол. Это приведет к квадратичному взрыву.N(N+1)×(N+2)

Что касается второй проблемы, мы должны немного переосмыслить наши гаджеты.

Может показаться немного утомительным, чтобы доказать, что мы можем успешно разложить остальную часть доски в соответствии с правилом. Итак, мы начнем с той же стратегии, которую использовали бы для создания игровых плат размером :(N+1)×(N+2)

Сначала мы генерируем набор всех возможных плиток. Все эти плитки должны быть размещены на доске. Затем убираем плитки и оставляем позади их квадраты.

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

Тогда давайте рассмотрим наши гаджеты.

Проволока и шлагбаум проблематичны по двум причинам.

  1. Мы не знаем, что квадраты, окружающие провод или ворота, могут быть правильно выложены плиткой; в конце концов, некоторые провода могут быть сдвинуты влево, другие - вправо, и разбиение оставшихся пустых квадратов на нет становится нетривиальным. Мы будем называть эту проблему проблемой «потока».
  2. Нет способа узнать, какие плитки удалить из набора плиток; в одном состоянии один набор квадратов в проводе или элементе-воротах будет выложен плиткой, в другом состоянии - совершенно другой набор квадратов.

Чтобы решить эти проблемы:

  • Сначала мы генерируем набор всех возможных плиток. Все эти плитки должны быть размещены на доске; разместив их на доске, мы удалим плитку из набора. Хотя поначалу мы можем не знать , так как нам еще предстоит полностью описать формулировку, мы можем добавлять все новые возможности тайлов по мере увеличения n по мере необходимости. Все плитки, которые мы удаляем из этого набора, должны быть гарантированно размещаемыми (по крайней мере, гарантированно размещаемыми, если формула выполнима). Мы называем удаление плитки из набора плиток, чтобы «выгрузить» плитку из набора плиток, чтобы выполнить наше обязательство разместить ее на игровой доске.NN
  • Мы должны тщательно разработать гаджеты, чтобы гарантировать удаление определенных плиток независимо от того, какое состояние выбрано.
  • Мы должны закрыть наши гаджеты, чтобы они не толкали плитки по всей доске в зависимости от их состояния; скорее все их государства должны занимать только определенную четко определенную область.
    • В качестве альтернативы, все их государства должны быть в состоянии занять четко определенную область; это гарантирует удовлетворительное разбиение, но не гарантирует, что будет иметь место конкретное разбиение. Это то же самое, что и игра Dominosa:
      • Сначала плитки генерируются в набор;
      • Затем плитки размещаются в случайной конфигурации,
      • Поскольку каждая плитка размещена, она удаляется из набора плиток.
      • Затем плитки снимаются с доски, оставляя за собой квадраты.
      • Это не гарантирует, что будет выбрана предполагаемая конфигурация ,
      • Скорее, это гарантирует, что предполагаемая конфигурация может быть выбрана, и, таким образом, решение существует. Мы можем сделать то же самое здесь.
  • После размещения всех гаджетов композиции, вместо размещения уникальных квадратов по умолчанию, то есть на всех «пробельных», мы уверены , пробельные представляет собой прямоугольную область с одной четной размерности, или сломать пробелы в прямоугольники с одной четной размерности и мы просто разбиваем пробелы на оставшиеся тайлы в наборе тайлов.
  • После размещения всех плиток из набора мы знаем, что все можно разместить.
    • Некоторые плитки будут, очевидно, размещаться, например плитки в стенах, другие будут размещаться только в том случае, если формула выполнима из-за характера отношений между гаджетами.
  • Затем убираем плитки и оставляем позади их квадраты.

Тогда давайте рассмотрим наши гаджеты.

Принудительный гаджет

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

Например, допустим, мы хотим наложить плитку , чтобы мы могли использовать 1 в качестве строительного блока. (заметьте, 1 - произвольная переменная, которую мы хотим объединить в пару, а не обязательно как строительный блок, так как мы использовали значение 1 ранее)(1,1)111

Для гарантии того, что наши -построения блочных резервы ( 1 , 1 ) , мы разместим его на нижнюю стенку в следующей конфигурации: мы разместим зарезервированное число, назовем его - к стене , как up-tack (в форме ); 3 против стены и один во втором ряду посередине. Затем мы разместим еще два числа, назовем их 2 и 3 ; они уникальны для этого гаджета. Мы размещаем их сверху слева и справа 1 .1(1,1)13231

Как показано ниже, общая черная рамка - это нижняя часть игрового поля, описание слева направо.

  • Конфигурация гаджета. Каждый и 3 здесь являются уникальными для этого гаджета.23
  • 3 возможных состояния облицовки центра .1

введите описание изображения здесь

После этого мы можем гарантировать, что наш гаджет может быть облицован определенным набором плиток, при этом гарантируя, что наш гаджет должен форсировать пару .(1,1)

  • Мы знаем, что должно произойти, потому что все 3 возможных состояния мозаики нижней средней 1 , плитки как ( 1 , 1 ) , как показано на рисунке справа выше.(1,1)1(1,1)
  • Остальные плитки могут быть черепицей , как и ( 1 , 3 ) , охватывающий гаджет. Таким образом, мы можем удалить эти плитки из нашего глобального набора плиток. Иллюстрировано ниже.(1,2)(1,3)

Описание слева направо:

  • Слева, вверху: состояние слева, слева, снизу: действительный список оставшихся квадратов.
  • Середина, вверху: среднее состояние, середина, внизу: действительный список оставшихся квадратов.
  • Справа вверху: правое состояние, справа внизу: действительный список оставшихся квадратов.

введите описание изображения здесь

Обратите внимание, что разбиение оставшихся квадратов не является принудительным , поскольку они могут располагаться рядом с соседними соседями вместо , но, поскольку это действительное разбиение игрового поля во всех состояниях, мы можем удалить их из набор плиток, и предположим, что они будут выложены именно так. Поскольку мы знаем, что существует допустимый возможный тайлинг, у нас есть по крайней мере один возможный тайлинг игрового поля, если формула выполнима. Хотя нет гарантии, что они будут размещены таким образом, есть гарантия, что плитка ( 1 , 1 ) будет принудительной.1(1,1)

Примечание: если вас это не устраивает или вас смущает различие между «способностью к мозаике» и «принуждением к мозаике», вы можете просто расположить стену вокруг гаджета , так же, как мы сделайте стену 3 × 2 внизу для клаузулы.3×23×2

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

Следующие плитки гарантированно должны быть выложены плиткой (таким образом, их можно удалить из набора плиток): (1,1)

Следующие плитки гарантированно могут быть выложены плиткой (таким образом, их можно удалить из набора плиток): (1,2),(1,3)

Если вы решите закрыть этот гаджет на стене, то также гарантированно будут закрыты.(1,2),(1,3)

Новые ворота Wire and Clause

Из-за проблем с потоком и опустошением набора тайлов нам нужно немного переделать провод.

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

Следуя этому маршруту, мы можем изменить провод и шлюз, чтобы решить обе проблемы.

Резервирование и FTF

Введем две новые универсальные ценности, и F . Эти два значения универсальны; фактические значения в сетке, такие как квадратные значения 2 и 3 (так как по договоренности мы зарезервировали 1 как строительный блок для стен), или все, что вы выберете. Они представляют истину и ложь соответственно.TF231

Мы принудительно зарезервируем плитки , ( T , T ) , ( F , F ) следующим образом; иллюстрация ниже, описание слева направо:(T,F)(T,T)(F,F)

  • Мы используем ту же схему, что и принудительное использование любого тайла, используя T как 1 . Каждый 2 и 3 здесь являются уникальными для этого гаджета.(1,1)T123
  • Мы используем ту же схему, что и форсирование любого тайла, используя F как 1 Каждые 2 и 3 здесь уникальны для этого гаджета.(1,1)F123
  • Мы используем ту же схему, что и форсирование плитки , используя F в качестве 1 в центре и используя T в других местах повышения. Это заставляет ( F , T ) укладываться на плитку. 2 и 3 способны плитки с Т , поэтому мы удаляем их из мозаичного набора. Каждый 2 и 3 здесь являются уникальными для этого гаджета.(1,1)F1T(F,T)23T23

введите описание изображения здесь

провод

Каждый провод будет начинаться и заканчиваться значением, назовем его , который является уникальным для провода. Для каждого предложения, в котором участвует проводник, провод будет иметь два значения проводника, x и x , которые уникальны для каждого провода и участвуют в одном и том же предложении. Иллюстрация ниже, с описанием слева направо.AИксИкс'

  • Провод, который участвует в одном предложении. Проволока имеет высоту , и имеет длину 2 * р + 3 , где р представляет собой число статей проволочные участвует в. Проволока дополняется два A квадратами слева и два справа. Разумеется, со всех сторон он окружен стеной, обозначенной синим контуром. Обратите внимание, что 1 является уникальным для данного провода, и будет использоваться только в проводе, и положение он участвует в.22*п+3пA1

введите описание изображения здесь

Ниже показаны два состояния, описания слева направо.

  • Провод, который участвует в одном предложении, в истинном состоянии. Проволока считается истинным, когда квадраты в паре с Т квадратов, и х ' квадраты в паре с F квадратов. Это считается ложным в другом состоянии, где тайлинг перевернут. Обратите внимание , как плиточные вынужден однажды A плитка выбрана: ( T , F ) уже вынуждены ранее, таким образом , остальная часть плитки должна быть горизонтальной.ИксTИкс'FA(T,F)
  • Тот же провод в ложном состоянии.

введите описание изображения здесь

При участии в большем числе предложений больше значений и x , по одной паре для каждого предложения, в котором участвует провод. Они чередуются сверху и снизу, как и квадраты T и F , разделяющие каждый x , x пара.ИксИкс'TFИкс,Икс'

введите описание изображения здесь

Два соответствующих состояния.

введите описание изображения здесь

Этот гаджет закрыт , поэтому нет «проблемы с потоком».

Обратите внимание, что в любом из этих состояний мы собираем следующие фрагменты независимо от состояния: , ( A , T ) , ( A , F ) .(A,A)(A,T)(A,F)

Однако есть некоторые тайлы, в которых мы не уверены; в одном состоянии мы можем удалить из набора плиток, находясь в другом состоянии, мы можем удалить ( 1 , F ) , ( 1 , T ) , ( 2(1,T),(1',F),(2,T),(2',F),,,из набора плиток, так какие же плитки мы можем на самом деле удалить? Ответ таков: у ворот предложения есть та же проблема, но с противоположным набором плиток. Он всегда будет собирать оставшиеся, противоположные и несобранные плитки, как мы увидим в следующем разделе. Поскольку каждый из них связан с воротами предложения, мы сможем удалить их обоих.(1,F),(1',T),(2,F),(2',T),,,

пункт

Далее мы создадим первую итерацию нового элемента предложения. Он состоит из гаджета , обнесенного стенами. Внутри гаджета мы размещаем один F в верхнем центре и два T квадрата в нижних углах; один в левом нижнем углу и один в правом нижнем. Остальные квадраты будут значениями, представляющими переменные проводов трех разных проводов. Назовем эти , б , и с . Р будет вынуждены спариваться с одним из проволочных переменных, а остальные провода-переменные будут спариваться с Т значениями. Иллюстрации ниже, описания слева направо.2×3FTa,б,сFT

  • Слева: конфигурация для первой итерации нового предложения-гейта.
  • Справа Три возможных состояния мозаики.F

введите описание изображения здесь

Эти три состояния приводят к трем возможным изменениям. Иллюстрация ниже, описания слева направо.

  • Слева, сверху : выложенный плиткой влево, Слева, снизу: Черепица над оставшимися квадратами.F
  • Середина, вверху : выложенная плиткой справа, Середина, внизу: мозаика для оставшихся квадратов.F
  • Справа вверху : мозаика вниз, справа внизу: мозаика оставшихся квадратов.F

введите описание изображения здесь

Поскольку будет связан с одной из переменных-проводовв предложении, эта переменная-проводник больше не может быть связана с F в проводе; таким образом заставляя провод к истине. И наоборот, оставшиеся переменные проводов, которые располагаются с T, будут вынуждены располагаться с F внутри своих проводов. Это в точности то же ограничениекак 1 -in- 3 - S Т п.FF TF1-в-3-SAT

Обратите внимание, и с являются проволочные-переменные, но каждыйних может относиться к х или х ' проволоки переменной; использование x по существу отрицает переменную провода.a,б,сИксИкс'Икс'

Одно дополнение: чтобы выполнить обязательство знать, какие плитки можно удалить из набора плиток, мы должны «удвоить и противопоставить» предложение. Что я имею в виду, чтобы сделать еще гаджет, с 3 -х дополнительных переменных , представляющих отрицаний в , б , и с . Назовем эти ' , б ' , и с ' . Это должны быть отрицательные значения переменной переменной a , b 3×23a,б,сa',б',с' И с . Этотгаджет 3 × 2 отличается тем, что у него будет T в центре и два F ) , ( Т , х ' ) , ( F , х ) , ( Р , хa,б,с3×2TFзначения по углам; как раз противоположность пункту гаджета, описанному до сих пор. «Удваивая» предложение таким образом, мы снова добавляем те же ограничения, что и гаджет, описанный выше. Однако мы также разряжаем все комбинации из мозаичного набора, для каждой переменной (иследовательнодля , б ,и с , а также, потому что ониконце концов, проволочные-переменные). Иллюстрировано ниже, описания слева направо.(T,Икс),(T,Икс'),(F,Икс),(F,Икс')a,б,с

  • «Двойное и противозачаточное» предложение. Нижний раздел - это пункт, описанный выше; верхний раздел - это недавно описанный контрацептивный пункт. Новое предложение имеет точно такие же логические ограничения; это противоположно нижнему пункту. Вместе эти комбинированные устройства и выпускной проволоки все из комбинаций из набора элементов мозаичного изображения, для каждая переменная провода, участвующая в предложении.(T,Икс),(F,Икс),(T,Икс'),(F,Икс')
  • Синяя линия в центре самой левой фигуры предназначена для удобства просмотра; в действительности это может быть удалено, не допуская больше состояний.

введите описание изображения здесь

Итак, давайте возьмем пример, чтобы показать, что все плитки разряжаются, как и было обещано. Иллюстрированный ниже, описание слева направо.

  • Рисунок провода, участвующего в одном пункте; государство выбрано для оговорки. Здесь мы используем , в то время и б представляет другое проволочное-значение в данном пункте.1знак равнобaб
  • Для данного состояния в предложении, то значение вынуждены работать в паре с соседним Т .1T
  • Это приводит к тому, что провод вынужден быть истинно оцененным (вы можете сказать, что положительная переменная провода вынуждена соединяться с , а отрицательная переменная вынуждена соединяться с F , как объяснено выше).TF
  • Это вынуждает в контрапозиции пункта (верхняя секция оговорки) , чтобы работать в паре с Т в п. Теперь, если вы посмотрите на провод, каждая ячейка внутри провода гарантированно будет разряжена: либо разряжена в самом проводе, либо в соответствующем пункте-гаджете. В этом состоянии у нас есть плитки, ( A , A ) , ( A , T ) , ( A , F ) , ( 1 , T ) , ( 11'T(A,A)(A,T)(A,F)(1,T) , ( 1 , F ) и ( 1 , T ) .(1,F)(1',F)(1',T)

введите описание изображения здесь

Пробуя другое состояние, мы получаем иллюстрацию ниже, описание слева направо.

  • Предложение находится в другом состоянии, мозаичное одним из двух способов.(1,T
  • Следовательно, вынужден на проволоке,(1,F
  • Приведите остальную часть провода к плитке соответственно и оцените провод как ложный.
  • Наконец, в противоположном / верхнем разделе предложения-гаджета должен располагаться мозаично, потому что ( 1 , T ) берется в провод. В этом состоянии мы имеем плитки, ( A , A ) , ( A , T ) , ( A , F ) , ( 1 , T ) , ( 1 , F(1',F)(1',T)(A,A)(A,T)(A,F)(1,T) , ( 1 , F ) и ( 1 , T ) . Это те же плитки, что и в другом штате.(1,F)(1',F)(1',T)

введите описание изображения здесь

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

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

Теперь все наши гаджеты соответствуют критериям.

формулировка

В нашей окончательной формулировке мы создаем три ряда гаджетов, каждый из которых разделен горизонтальной стеной.

  • Внизу мы размещаем гаджеты-насильники высотой две плитки. Нам нужен принуждая гаджет для строительного блока, а также для комбинаций и F . Размещаем гаджеты принудительно рядом друг с другом.TF
  • В среднем ряду мы размещаем гаджеты, расположенные горизонтально, высотой две плитки. Проволочные гаджеты должны быть отделены друг от друга вертикальной стенкой.
  • В верхнем ряду мы размещаем миниатюрные гаджеты высотой четыре плитки. Гаджеты раздела должны быть отделены друг от друга вертикальной стеной.

Иллюстрации следуют, описания над каждой фигурой. Нажмите на изображение для полного разрешения. Исходный код для воспроизведения / генерации изображений указан в нижней части страницы.

Используя в качестве примера формулу , имеем удовлетворительное решение ( ¬ x 1 , x 2 , x 3 , ¬ x 4 )Φ(Икс)знак равно(Икс1,¬Икс2,Икс3)(Икс2,¬Икс3,Икс4)(Икс1,Икс2,¬Икс4)(¬Икс1,Икс2,Икс3,¬Икс4) как свидетель.

Сначала мы начнем с горизонтальных стен, разделяющих ряды гаджетов. Мы показываем квадраты и пары, которые вынуждены укладывать плитки внутри стен.

введите описание изображения здесь

Далее мы покажем гаджеты. Синий контур представляет границы гаджетов; пунктирная синяя подсветка для гаджетов, так как они не будут окружены стенами. Обратите внимание, что линия в середине гаджета не окружена стеной; это там для удобства просмотра; удаление линии не позволяет больше состояниям появляться в предложении, как объяснено выше, но мы показываем синюю линию для этой демонстрации. Обратите внимание: мы используем квадратные имена, чтобы придать числам семантическую читабельность, когда это применимо. Каждое имя представляет собой числовое значение.

введите описание изображения здесь

Здесь мы заполняем вертикальные стены.

введите описание изображения здесь

Здесь мы заполняем свидетельское решение; то есть это решение для листов, если для его создания используется решение SAT.

введите описание изображения здесь

Затем мы выкладываем область заполнения; остальная часть доски, настолько большая, насколько это необходимо, для такой большой, как N , требуется для того, чтобы выложить до сих пор. Таким образом мы разряжаем оставшиеся пары в наборе плиток. Пунктирные линии здесь представляют действительный, но не принудительный тайлинг; мог бы быть другой способ выложить это. Здесь мы показываем нижний левый угол.

введите описание изображения здесь

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

введите описание изображения здесь

Здесь мы показываем нижний правый угол сетки.

введите описание изображения здесь

Здесь мы показываем верхний правый угол сетки. Обратите внимание, как вертикальные плитки больше не подходят; поэтому мы выкладываем верхний ряд горизонтально, если это необходимо.

введите описание изображения здесь

И, наконец, верхний левый угол.

введите описание изображения здесь

Генерирование всей игровой доски одновременно с TeX завершается неудачно с ошибками нехватки памяти от pdflatex, поэтому, если вы хотите его увидеть, вам нужно будет сгенерировать клипы и соединить их вместе. Обязательно ознакомьтесь с программой просмотра ноутбука .


Источники TikZ

Генератор игр:

  • graphtex.py

    Преобразует TeX в SVG, используя pdflatex, pdfcairo (poppler) и rsvg-convert (libsvg)

  • dominosa.py

    Содержит логику преобразования, проверку игрового решения и логику рисования

  • dominosa_demo.py

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

  • dominosa_demo.ipynb

    Демонстрация ipython, которая генерирует изображения, использованные в ответе выше.

    • Смотрите блокнот для просмотра результатов

1
Это очень просто, большое спасибо ..
Йоав бар Синай

2
Пожалуйста, скажите мне, что у вас есть версия arXiv этого. Это может быть более разумным для этой платформы , чтобы включить грубый эскиз и ссылку на полные бумаги.
Рафаэль

22

DОMяNОSA является NP-сложным


Игра в игру - это проблема оптимизации; найти правильный лист домино так, чтобы он покрывал все квадраты. Вариант решения этой проблемы:

(N+1)×(N+2)N уникальными плитками?

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

1-3-в-SAT есть назначение. Кроме того, покрытие может фактически использоваться, чтобы восстановить удовлетворяющее назначение.

пзнак равноNпDОMяNОSA является NP-сложным.

1-3-в-SATDОMяNОSA

Введение

3-SATСярСUяTSAT

СярСUяTSATпLANAр-СярСUяTSAT . Это преобразование является очень элегантным и в основном позволяет вам взять любое плоское вложение, найти оставшиеся пересекающиеся провода и использовать «гаджет», чтобы позволить пересечению проводов через плоские «ворота» (набор гаджетов с входными и выходными проводами) ,

3-SATпLANAр-СярСUяTSAT3-SATпLANAр-СярСUяTSAT

пLANAр-3-SATпLANAр-СярСUяTSAT

3-SAT

1-в-3-SAT1-в-33-SAT

MОNОTОNЕ-1-в-3-SAT

MОNОTОNЕ-1-в-3-SATпLANAр-MОNОTОNЕ-1-в-3-SATСярСUяTSAT

прОВLЕMMОNОTОNЕпLANAр1-в-3Nп-часaрd3-SATнетнетнетдаMОNОTОNЕ-3-SATданетнетнет1пLANAр-3-SATнетданетда21-в-3-SATнетнетдада3пLANAр1-в-3-SATнетдадада4MОNОTОNЕ-1-в-3-SATданетдада5пLANAр-MОNОTОNЕ-3-SATдаданетДа!6пLANAр-MОNОTОNЕ-1-в-3-SATдададада7
  1. Чистое буквальное устранение
  2. Теорема Шефера о дихотомии
  3. Проблема совместимых представителей
  4. Триангуляция минимального веса NP-Hard
  5. Теорема Шефера о дихотомии
  6. Поиск идеальных авто-разделов - сложная задача
  7. Оптимальные бинарные пространственные разбиения на плоскости

Один из способов начать с сокращения, это попытаться найти «гаджеты», которые напоминают провода, и гаджет, который напоминает пункт одного из 3-SATварианты. В качестве бонуса, многие варианты являются плоскими, мы можем, вероятно, уйти, не пересекая провода.

Что такое "гаджет"? Гаджет - это некоторая конструкция проблемы, которая полезна в качестве строительного блока для создания элементов gates / wire / clause. Некоторые гаджеты будут иметь ограниченный набор состояний; например, гаджет с двумя состояниями может использоваться как переменная; одно состояние «истина», а другое «ложь». Гаджет с двумя состояниями, которые могут быть «длинными», могут сгибаться и расщепляться, полезен в качестве провода - если он может взаимодействовать с переменной и становится ограниченным для расширения состояния переменной в другое место. Гаджет с ровно тремя состояниями может быть использован в качестве предложения; если он может использоваться для ограничения "одного из трех" проводов через каждое из трех его состояний. Точно так же можно хотеть все виды логических элементов, таких как не-гаджет, или-гаджет, xor-гаджет и т. Д .;

Строительный блок

  • Во-первых, давайте зарезервируем номер, например, 1, на борту. Мы сделаем1 строительный блок для всего остального.
  • Мы будем использовать угол, чтобы убедиться, что 1 никогда не сможет подключиться к другому 1кроме как в этом углу, где он должен.
  • Ниже (на трех рисунках) находится угол, и как мы размещаем 1там.
  • Мы будем использовать указать уникальные значения во всей сетке, на всех диаграммах.
  • На самом деле, мы покроем нашу сетку с значения перед наложением их на важные значения; поэтому по умолчанию все значения.

введите описание изображения здесь

Как вы можете видеть, разместив 3   1с парой (1,1) должен быть использован в этой конфигурации; он должен использовать одну из пунктирных плиток. В настоящее время(1,1) никогда не может случиться в другом месте на доске, что нам и нужно.

Есть альтернативные способы бронирования номера, либо у стены с 4 из них, или в глуши, с 5из них в кресте. Любой способ хорош, пока(1,1) вынужден.

Стена

Теперь было бы очень полезно иметь возможность создавать «стены» и «углы» повсюду, а не только по бокам сетки. Посмотрите, что произойдет, если мы выстроим в пару пары единиц; у кого нет другого выбора, кроме как соединиться со своими соседями, образуя «стену» шириной4,

Изображения ниже, слева направо:

  1. Линия пар 1s.
  2. Единственная возможная черепица этого 1-площадь.
  3. Единственно возможная черепица (почти) всех 1в линии.
  4. Линия стены, нарисованная для акцента.

введите описание изображения здесь

Начальная попытка проволоки

Теперь, разместив две "стены" напротив друг друга, и оставив пространство 1 между стенами, возможно, мы можем придумать гаджет, похожий на «провод».

Показаны только границы стен, вот что мы видим на рисунках ниже (слева направо):

  • Размещаем две стены напротив друг друга.
  • Ввод уникальных номеров внутри.
  • Два крайних справа: два возможных состояния провода.

введите описание изображения здесь

Как это работает:

В трубе / проводе не должно быть никаких отверстий, поэтому, если плитки смещены вверх, то все они должны быть смещены вверх по всей трубе; если они будут сдвинуты вниз, это "сосет" их всех. Таким образом, мы можем отправить «сигнал» с одной стороны провода на другую; другими словами, распространять значение.

Таким образом, теперь мы можем распространять значение на большие расстояния!

Остальные ограничения:

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

Изгиб провода , часть 1: стена внизу

Следующая проблема заключается в том, что мы должны быть в состоянии согнуть проволоку, а не просто идти прямо ...

Так. Мы разобьем гибочную часть на две части; верхняя часть и нижняя часть. Сначала нижняя часть. Не обращайте внимания на верхнюю часть изгиба, мы сделаем это позже.

На рисунках ниже показана небольшая проблема с изгибом; верхняя часть проволоки «свободная», кажется, трудно сделать стену, которая поворачивается на 90 градусов.

Слева направо:

  • Верхняя часть провода "свободная".
  • Что произойдет, если мы попытаемся согнуть это; мы хотим, чтобы провод был между синими линиями. Опять же, игнорируйте верхнюю часть изгиба, мы сделаем это позже.
  • Как видите, верх 1Они свободны, они могут простираться вдоль стены или через проволоку ! Это не хорошо.

введите описание изображения здесь

Одно из решений заключается в следующем:

  • Выберите (Икс,1)пара возле поворота. Принять значение этогоИкс квадрат, давайте назовем это Q; это означает, что число уникально во всей сетке, так же какИ повторно используются один раз, вот в этом изгибе только . Потому что этоИкс в паре с 1, это не может быть в паре с 1опять таки. Поэтому мы размещаем его прямо сверху справа-сверху1, Теперь мы можем ясно видеть, что для этого есть единственная возможность1 находится справа от него, и, таким образом, он укрепит стену.

Иллюстрация ниже, описание слева направо:

  • Ситуация с проблемой.
  • Выберите квадрат, пусть Q быть квадратным значением любого квадрата в изгибе (конечно, нет 1хотя).
  • Два переключателя справа-сверху 1тайлинги; на этот раз действителен только один из них.

введите описание изображения здесь

Тем не менее, как мы можем быть уверены, что это Qне испортит провод? Ниже вы можете увидеть состояние провода, и чтоQ не будет препятствовать этому.

Слева направо:

  • Текущая конструкция.
  • Две самые правые фигуры: состояния провода; эмпирически, им не мешает введениеQ,

введите описание изображения здесь

Теперь у нас еще есть свободный 1наверху; крайний левый верхний1,

Мы сделаем то же самое; выбрать пару(р,1) что уже спарено в изгиб-плитку и место р сверху слева-сверху-1,

Иллюстрация ниже, слева направо:

  • Наше текущее строительство.
  • Проблема: крайний левый верхний1может соединиться с номером в проводе или со стеной; мы хотим, чтобы это было только в паре со стеной.
  • Выбор ри используя тот же номер сверху слева-сверху-1,

введите описание изображения здесь

И мы наконец получили наш нижний изгиб. Иллюстрация ниже, описания, слева направо:

  • Слева: наша последняя конструкция для изгиба.
  • Справа: как продолжить провод влево.

введите описание изображения здесь

Изгиб провода , часть 2: стена над

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

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

введите описание изображения здесь

Теперь вы должны убедиться, что мы можем разместить и согнуть провода. Мы все еще не можем разделить или пересечь провода, подробнее об этом позже.

Остальные ограничения:

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

Ценный провод

Теперь у нас есть провода, было бы неплохо иметь ценный провод, где мы можем видеть значение провода, например, светодиода на плате. Итак, что мы делаем, это взять проволоку, скажем, длины7и представил квадрат, мы будем называть это Tи еще один названный квадрат, мы будем называть его F, Они оба уникальны для каждого оцениваемого сечения провода, т.е. только дважды , и они будут повторно использованы только в пределах одного оцененного провода . Они размещены в парах, дваT квадраты прямо рядом друг с другом, и два F квадраты рядом друг с другом, с одним квадрат, разделяющий их. Иллюстрировано ниже, описание слева направо:

  • Слева: провод.
  • Справа: квадратная конфигурация.

введите описание изображения здесь

Итак, как мы можем сказать, является ли провод истинным или ложным? Ну, у провода есть два состояния. В каждом из этих состояний один изT или Fбудет в паре в той же плитке; значение, которое сопряжено, является значением провода. Иллюстрация ниже, описание слева направо:

  • Слева, справа: два состояния оцененного провода ;
  • Слева: проволока оценивается как истинная, так какT квадраты разделяют одну плитку
  • Справа: провод оценивается как ложныйF квадраты разделяют одну плитку.

введите описание изображения здесь

Теперь мы можем иметь именованную переменную, которую мы можем использовать, чтобы разместить наш 3-SATпеременные вниз по сетке. Мы можем соединить два значащих провода и заставить их иметь одинаковое значение, или, если мы соединяем их с нечетной длиной, заставить их иметь разные значения; и используя провода, мы можем сделать это на большом расстоянии через сетку. Используя провода, мы можем распространять значения именованных переменных повсюду.

Остальные ограничения:

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

Не-ворота

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

Ворота пункта

Теперь я могу продемонстрировать простой гаджет; он подключится к3провода, и заставить один из них быть в состоянии "тянуть", и заставить два других быть в "нажатом" состоянии. Мы можем использовать это, это точно одно из трех отношений; мы устанавливаем нечетное состояние провода для значения «истина», а два других состояния провода для значения «ложь», и мы установлены.

Иллюстрации ниже, описания слева направо:

  • Схема размещения гаджета. Это делает знак «плюс»; соединение 3-х проводов в одном месте.
  • Заполните провод с уникальным квадраты.
  • Три состояния центральной площади. Каждое из этих состояний «тянет» ровно один провод в центр, существенную точку ворот; вести себя как1-в-3-SAT пункт.

введите описание изображения здесь

Теперь давайте посмотрим на различные состояния. Иллюстрация ниже, описание слева направо:

  • Левый провод тянут в центр; другие два вытеснены.
  • Нижний провод тянут в центр; другие два вытеснены.
  • Правый нижний провод тянется в центр; другие два вытеснены.

введите описание изображения здесь

Теперь, если вы присоединяете провода с правильной четностью длины (четной или нечетной длины) к концу этих элементов, только один из них может быть истинным, а два других - ложным (в зависимости от того, присоедините ли вы их странным образом, вы можете обобщить это немного). Таким образом, мы можем подключить3 значения в 1-в-3 Пункт CNF.

Остальные ограничения:

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

Расщепление провода

Чтобы разделить провод, мы сначала выстраиваем два провода рядом друг с другом. Далее, в качестве наглядного пособия, мы помечаем каждый из проводов двумяTквадраты, один рядом с другим. Это позволит нам увидеть, когда провод «истинный»: когда дваTквадраты из проволоки в одной плитке, тогда это будет верно, иначе ложно. Каждый провод должен получить свою собственную паруT пары, поэтому мы назовем одну пару T1 и другие T2, Затем мы представляем три новых именных уникальных значения, a,б,с, Мы разместим эти три рядом друг с другом, по одному на каждом проводе. Однако на одном проводе держите один квадраты между a,б,с квадраты и тому Tпара. На другом проводе поставь два квадраты между a,б,с квадраты.

Иллюстрация ниже, описание слева направо:

  • Расположение проводов. Обратите внимание на то, что стены немного толстые, поэтому провода в целях иллюстрации сближены; в действительности они немного дальше друг от друга.
  • Квадратные значения; T значения сверху и разъемы разъема a,б,с под.

введите описание изображения здесь

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

  • Пример состояния левого провода, оцененного как true.
  • Плохое состояние второго провода; он пытается быть по-разному оценен, но затем он получает дубликат пары.
  • Хорошее состояние второго провода, теперь они имеют одинаковое значение, и нет повторяющихся пар.

введите описание изображения здесь

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

Остальные ограничения:

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

Беспроводной провод!

Ну, к моему удовольствию, расщепление провода оказалось беспроводным! То есть на рисунках выше я прокладываю провода рядом друг с другом, но для этого нет причин! Мы можем разместить провода в любом месте сетки, и они все равно будут запутаны, так сказать. Это избавляет нас от многих проблем:

  • Нам даже не нужно беспокоиться о пересечении проводов. Это позволяет нам уменьшить неплоские варианты3-SAT
  • Надо делать любую надоедливую раскладку, доставляя провода на свои места, это легко! Как беспроводной телефон! Свобода!
  • Нам не нужно беспокоиться о четности / разметке по проводам.
  • Мы можем сделать довольно миниатюрное сокращение; каждая переменная получит один набор длинных проводных полос с множеством беспроводных соединений вдоль проводов. Эти соединения будут к воротам клаузулы, которые будут находиться в своем собственном месте в сетке. Теперь пункт будет состоять только из гаджета и трех торчащих из него беспроводных проводов.

Остальные ограничения:

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

Сокращение, первая попытка

Позволять Φ(Икс)знак равнояСя быть 1-в-3-SAT булева формула.

  • Для каждого ИксJИксРазложите один длинный провод, рядами, рядом с нижней частью сетки.
  • Для каждого СяΦ(Икс)сделайте ворота-пункты в верхней части сетки; вы можете выложить их как угодно; лучше всего заполнить его в квадратной области, но вы можете также выложить его в один длинный ряд.
  • Для каждого ИксJ переменная, участвующая в предложении Ся, поместите беспроводной провод в один из 3проволочные штырьки ворот клаузулы; разместить другойa,б,скаждого соединения на соответствующий переменный провод / ряд. Отрицательные термины должны просто размещать беспроводное соединение с пунктом на расстоянии на один шаг дальше, изменяя четность длины провода и отрицая значение.

Как это может выглядеть:

  • Рисунок: пункт, напрямую связанный с беспроводными проводами. «Горячие точки» - это способ, которым мы символизируемa,б,сотсюда Эти горячие точки будут связаны с переменными в сетке.

введите описание изображения здесь

А вот как может выглядеть сетка:

  • Рисунок: Полученная игровая доска. Переменные выстроены в ряд внизу. Пункты распределены по верху. Этот макет дает квадратичный взрыв; более разумная компоновка позволяет избежать квадратичного разрушения.

введите описание изображения здесь

Детали последней минуты

Напомним решение проблемы:

Есть ли идеальная черепица, покрывающая данный (N+1)×(N+2) сетка с N уникальные плитки?

Так что для (N+1)×(N+2) сетка, мы можем использовать только Nпеременные. Но наше сокращение требует много уникальных переменных, гораздо больше, чемО(N), Есть несколько способов решить эту проблему.

  • Один из способов состоит в том, чтобы выровнять размер сетки по обеим осям. Так что теперь нашО(|Икс|×|Φ(Икс)|) сетка просто О(N), что означает, что все наши уникальные числа могут быть ограничены N, Затем мы должны заполнить оставшуюся часть сетки, повторно используя наши уникальные числа, но при этом быть очень осторожными, чтобы не поместить любые числа, которые мы примыкаем друг к другу, в нашу сетку, прилегающие друг к другу в пространстве-заполнителе остальных сетки. Есть несколько творческих способов сделать это, я оставлю это как упражнение. Этот метод вызывает дополнительный квадратичный взрыв, очевидно.
  • Другой, более краткий, более сложный способ заключается в 1блок. Вместо одного строительного блока мы можем использоватьО(N)строительные блоки, и тогда мы можем повторно использовать числа, с которыми они соединяются. Этот метод позволяет нам избежать квадратичного взрыва.

График источников


Nice reduction! Just a curiosity: how can you prove that the missing pairs (after placing the wires-walls-gadgets on the board) can be packed (in polynomial time) into a rectangular (n+1)x(n+2) grid ? I had in mind a similar reduction, but didn't figure out how to prove that the "unused" pairs can be arranged in a (possibly larger) rectangle (the rules of the game state that every tile [ai,bi] with ai,bi=1..n is used in a valid dominosa board)
Вор

I'll move all of these comments into my answer, and make it more comprehensive in my next big revision.
Реал Слав

ok, I'll wait for it!
Вор

@RealzSlaw, Thank you so much! I still didn't have the time to read this but it looks very nice.
Йоав бар Синай

@RealzSlaw, is there a way to contact you directly?
Йоав бар Синай
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.