Tạo phân phối thống nhất chính xác cho tất cả các câu đố sudoku có thể được thực hiện theo cách đó: bạn chỉ có thể tạo ngẫu nhiên lưới 9x9 và sau đó chỉ giữ lại nếu đó là lưới sudoku chính xác, nếu không thì thử lại.
Cách tiếp cận mạnh mẽ này đảm bảo cho bạn một phân phối đồng đều nhưng rõ ràng là không hiệu quả, vì bạn có thể nhân xác suất của lưới chính xác bằng chỉ bằng cách tạo lưới x ngẫu nhiên và sau đó điền vào hai dòng còn lại. Đây vẫn là một phân phối ngẫu nhiên, nhưng vẫn còn quá kém hiệu quả.917
Bạn cũng có thể buộc dòng đầu tiên là , sau đó tạo ngẫu nhiên phần còn lại của lưới và sau đó chọn ngẫu nhiên một hoán vị của tất cả các chữ số. Bạn vẫn sẽ chọn tất cả các lưới có cùng xác suất nhưngnhanh hơn[ 1 , 2 , . . 9 ]9 !
Có thể bạn thấy tôi đang đi đâu: trả lời vấn đề này một cách thông minh có lẽ sẽ khiến bạn tự hỏi về các đối xứng cơ bản của lưới sudoku. Rất nhiều công việc đã được thực hiện theo hướng này để chứng minh thực tế rằng 17 là số lượng manh mối tối thiểu của một sudoku ( xem bài viết này ) và bạn có thể vào đây để xem bảng liệt kê chính xác 5,472,730,538 lớp của 3,359,232 lưới tương tự, sử dụng chúng đối xứng:
- Hoán vị các chữ số
- Hoán vị của các hàng (các dải và các hàng bên trong mỗi dải)
- Điều tương tự cho các cột
- Chuyển vị
Với khung này, bạn có thể chọn ngẫu nhiên một trong số 5.472.730.538 lớp (chúng thực sự có thể được nén thành 6 GB) và sau đó chọn một trong các đại diện cho mỗi đối xứng, tương ứng một trong .9 ! , 64, 64, 2
EDIT: để điều chỉnh điều này với các câu đố chưa hoàn thành, bạn có thể chọn ngẫu nhiên một tập hợp con của lưới của mình, kiểm tra xem giải pháp có duy nhất với bộ giải sudoku và thử lại không nếu không. Đây không phải là một phân phối đồng đều vì số lượng câu đố không hoàn chỉnh với một giải pháp duy nhất có thể khác nhau cho hai lưới. (Tôi sẽ rất ngạc nhiên nếu không)