Quiero generar un Sudoku completamente al azar .
Defina una cuadrícula de Sudoku como una cuadrícula de enteros de entre 1 y 9 donde se pueden omitir algunos elementos. Una cuadrícula es un rompecabezas válido si hay una manera única de completarla para que coincida con las restricciones de Sudoku (cada línea, columna y cuadrado alineado 3 × 3 no tiene elementos repetidos) y es mínimo en ese sentido (es decir, si omite más) elemento del rompecabezas tiene múltiples soluciones).
¿Cómo puedo generar un rompecabezas de Sudoku aleatorio, de modo que todos los rompecabezas de Sudoku sean equipables?
algorithms
randomness
sudoku
Justin
fuente
fuente
Respuestas:
La generación de la distribución uniforme exacta de todos los rompecabezas de sudoku se puede hacer de esa manera: puede generar aleatoriamente una cuadrícula de 9x9 y luego solo mantenerla si es una cuadrícula de sudoku correcta, de lo contrario, vuelva a intentarlo.
Este enfoque de fuerza bruta le garantiza una distribución uniforme, pero claramente no es eficiente, ya que puede multiplicar la probabilidad de que la cuadrícula sea correcta por solo generando una cuadrícula aleatoria de 8x8 y luego llene las dos líneas restantes. Esta sigue siendo una distribución aleatoria, pero sigue siendo demasiado ineficiente.9 917
También se puede obligar a la primera línea de ser , luego genera aleatoriamente el resto de la cuadrícula y luego selecciona aleatoriamente una permutación de todos los dígitos. ¡Todavía elegirás todas las cuadrículas con la misma probabilidad pero 9 ! Más rápido.[ 1 , 2 , . . 9 ] 9 !
Quizás vea a dónde voy: responder este problema de una manera inteligente probablemente lo llevará a preguntarse sobre las simetrías subyacentes de las cuadrículas de sudoku. Se hizo mucho trabajo en esta dirección para demostrar el hecho de que 17 es el número mínimo de pistas para un sudoku ( vea este artículo ) y puede ir aquí para ver esta enumeración precisa de 5.472.730.538 clases de 3.359.232 cuadrículas similares, que utiliza estas simetrías
Con este marco, puede elegir aleatoriamente una de las 5.472.730.538 clases (en realidad se pueden comprimir en 6 GB) y luego elegir uno de los representantes para cada simetría, ¡uno de cada .9 ! , 64 4, 64 4, 2
EDITAR: para adaptar esto a rompecabezas incompletos, puede elegir aleatoriamente un subconjunto de su cuadrícula, verificar si la solución es única con un solucionador de sudoku e intentar nuevamente si no. Esta no es una distribución uniforme ya que el número de rompecabezas incompletos con una solución única puede ser diferente para dos cuadrículas. (Estaría muy sorprendido de lo contrario)
fuente