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