Bạn không cần một bảng tra cứu đầy đủ để đạt được độ nén tối ưu. Tôi tin rằng các máy tính hiện đại sử dụng bảng tra cứu rất hợp lý có thể đếm số lượng Sudokus bị ràng buộc , đó là Sudokus với một số chữ số đã có. Sử dụng cái này, đây là cách bạn mã hóa (giải mã tương tự).
Sửa một thứ tự của các hình vuông. Giả sử số trên hình vuông đầu tiên là . Đặt N 1 là số Sudokus có hình vuông đầu tiên nhỏ hơn d 1 . Gọi bây giờ d 2 là số của hình vuông thứ hai. Đặt N 2 là số Sudokus có hình vuông thứ nhất là d 1 và hình vuông thứ hai nhỏ hơn d 2 . Và như vậy. Số mã hóa là N = Σ i N i .d1N1d1d2N2d1d2N= ∑tôiNtôi
Phương pháp mã hóa này được gọi là mã hóa nhị thức trong tài liệu. Nó sẽ cho phép bạn tính toán một cách hiệu quả (theo nghĩa thực tế) tính toán chỉ số của bất kỳ Sudoku cụ thể nào và ngược lại. Sau đó, bạn sẽ chỉ yêu cầu bit, như đã nói ở trên (điều này có nghĩa là bạn có thể mã hóa một vài trong số chúng với số bit trung bình đó).72,4
Chỉnh sửa: Trang Wikipedia về toán học của Sudoku giúp chúng ta làm rõ bức tranh. Cũng hữu ích là một bảng được biên soạn bởi Ed Russell .
Nó chỉ ra rằng nếu bạn chỉ xem xét ba hàng trên cùng, thì về cơ bản chỉ có 44 cấu hình khác nhau để xem xét. Trong bảng, bạn có thể tìm thấy tổng số cấu hình tương đương với bất kỳ cấu hình nào (giả sử rằng hàng trên cùng là 123456789) và tổng số lần hoàn thành của mỗi cấu hình. Đưa ra một Sudoku, đây là cách chúng ta sẽ tính số thứ tự của nó:
- Bình thường hóa cấu hình để hàng trên cùng của nó là 123456789.
- Tìm ra cấu hình nào trong số 44 cấu hình khác nhau. Bài viết Wikipedia đưa ra một thuật toán cho điều đó. Bảng liệt kê số lượng các lớp tương đương cho mỗi cấu hình, cũng như số lần hoàn thành.
- Xác định số thứ tự của cấu hình của ba hàng trên cùng trong lớp tương đương của nó. Điều này có thể được thực hiện theo hai cách: hoặc sử dụng danh sách tất cả các lớp tương đương (có tổng cộng 36288 trong tất cả các lớp tương đương) hoặc bằng cách tìm cách liệt kê nhanh tất cả chúng.
- Bình thường hóa các hàng còn lại bằng cách sắp xếp các hàng 4-6 và 7-9 theo cột đầu tiên của chúng, sau đó sắp xếp hai khối hàng này theo một cách tùy ý. Điều này làm giảm số lần hoàn thành theo hệ số 72.
- 220
- tôijkCtôi, DtôiCtôi+ J Dtôi+ k9 ! ⋅ 72
Quy trình này có thể đảo ngược và sẽ tạo ra Sudoku từ một số thứ tự. Lưu ý rằng phép liệt kê Sudoku đã giảm xuống một vài phút (năm 2006; xem trang thảo luận của bài viết Wikipedia) hoặc ít hơn, vì vậy tôi hy vọng rằng trên một máy tính hiện đại, cách tiếp cận này sẽ rất thực tế và mất vài giây hoặc ít hơn.