Я заинтересован в небольшом варианте мозаики: головоломка: каждый край (квадратной) плитки помечен символом из , и две плитки могут быть расположены рядом друг с другом, если символ на лицевой стороне одной плитки равен а символ на лицевой стороне другой плитки равен , для некоторых . Тогда, учитывая набор тайлов, можно ли их поместить в квадрат (вращая, но не переворачивая тайлы), чтобы все ребра совпали правильно? (Существует также вариант этой проблемы, в котором предусмотрены четыре ребра по ), и части должны правильно вписываться в эту рамку).k ˉ k k ∈ { 1 … n } m 2 m × m 1 × m
Я знаю, что эта проблема является NP-полной для достаточно большого , но границы, которые я видел для кажутся довольно большими; Меня интересует проблема для малых значений и, в частности, для , случай «ноль-один» (где каждое ребро помечено либо либо а ребра с должны совпадать с ребрами с ). Здесь есть (с вращательной симметрией) только шесть типов плиток (мозаика со всеми нулями, мозаика со всеми единицами, мозаика с тремя нулями и единицей, мозаика с тремя единицами и нулем и две отдельные плитки с двумя нулями и два, «0011» и «0101»), поэтому проблемный экземпляр - это просто спецификацияn n n = 1 0 1 0 1 ми набор из пяти чисел , , , , и (представляющих счет каждого типа плитки) с . Проблема, очевидно, в NP (с заданным в унарном виде), так как решение можно просто показать и затем проверить в полиноме (в Т 0001 Т 0011 Т 0101 Т 0111 Т 1111 Т 0000 + Т 0001 + Т 0011 + Т 0101 + Т 0111 + Т 1111 = м 2 м м) время, но известно ли, что оно является NP-полным или существует какой-то алгоритм динамического программирования, который можно применить здесь? Как насчет случая «в рамке», в котором спецификация задачи также включает четыре ребра квадрата, которые должны быть сопоставлены? (Очевидно, что если безкадровый случай является NP-завершенным, то почти наверняка, что и без него)