Указание любой произвольной сетки 9x9 требует указания позиции и значения каждого квадрата. Наивное кодирование для этого может дать 81 (x, y, значение) триплетов, требуя 4 бита для каждого x, y и значения (1-9 = 9 значений = 4 бита) в общей сложности 81x4x3 = 972 бита. При нумерации каждого квадрата можно уменьшить информацию о местоположении до 7 бит, отбрасывая бит для каждого квадрата и в общей сложности 891 бит. Задав предопределенный порядок, можно уменьшить его более радикально, до 4 битов для каждого значения, всего 324 бита. Однако в судоку могут отсутствовать номера. Это обеспечивает возможность уменьшения количества чисел, которые должны быть указаны, но может потребовать дополнительных битов для указания позиций. Используя нашу 11-битную кодировку (положение, значение), мы можем указать головоломку с подсказками с 11 бит, например, минимальная (17) головоломка требует 187 бит. Лучшее кодирование, о котором я до сих пор думал, - это использовать один бит для каждого пробела, чтобы указать, заполнен ли он, и, если да, следующие 4 бита кодируют число. Это требует 81 + 4 n битов, 149 для минимальной загадки ( n = 17 ). Существует ли более эффективная кодировка, желательно без базы данных каждой действующей настройки судоку? (Бонусные баллы за решение общего n из N × N головоломки)
Мне только что пришло в голову, что многие головоломки будут чередованием другой или просто перестановкой цифр. Возможно, это поможет уменьшить количество необходимых бит.
Согласно Википедии ,
Число классических сеток 9 × 9 для решения судоку составляет 6 670 903 752 021 072 936 960 (последовательность A107739 в OEIS) или приблизительно .
Если я правильно сделал свою математику ( ), что составляет 73 (72.498) битов информации для справочной таблицы.
Но:
Было показано, что число принципиально различных решений, когда учитываются симметрии, такие как вращение, отражение, перестановка и перемаркировка, составляет всего 5 472 730 538 [15] (последовательность A109741 в OEIS).
Это дает 33 (32,35) бита, поэтому вполне возможно, что умный метод указания того, какую перестановку использовать, может получить меньше полных 73 битов.