Mi método combinatorio simple para enumerar todas las cuadrículas de soluciones de Sudoku

¿Cómo es posible que existan cuadrículas de soluciones de Sudoku? La respuesta correcta es: 6 , 670 , 903 , 752 , 021 , 072 , 936 , 960 o 6 , 671 mi 21 como fue probado 12 ¡hace años que! ¿O era?

Su prueba nunca enumeró realmente las soluciones e involucró una gran cantidad de tiempo de computadora central para calcular, lo que implicó una gran cantidad de casos de prueba reducidos para completar los cálculos en tiempo humano.

Cuando dijeron y leí que no era posible una respuesta combinatoria simple, inmediatamente pensé: "Bueno, ya conozco una".

Así que ejecuté los números en una calculadora pero NO obtuve su solución y no puedo ver una falla en la mía.

No puedo seguir la solución hasta el final ya que tengo que confiar en los resultados de su computadora. Le envié esto al autor pero no recibí respuesta, lo cual no es sorprendente ya que no hay lugar para probar que estoy equivocado. He esperado y revisado mi método el tiempo suficiente para mantener mi solución.

Dado que esto debe expresarse en forma de pregunta, "¿Qué tiene de malo mi solución?"

Entonces, aquí está lo que todos hemos estado esperando:

Mi forma combinatoria simple de enumerar cuadrículas de solución de Sudoku

Nota: El problema que estamos tratando de resolver aquí es para N0, que es el número máximo de cuadrículas de respuestas Sudoku correctas. Por lo tanto, no hay discusión sobre el intercambio para obtener soluciones equivalentes.

Hay tres bandas, filas 1 - 3 , 4 - 6 , y 7 - 9 y tres columnas de pilas 1 - 3 , 4 - 6 , y 7 - 9 en una cuadrícula de Sudoku. Comenzaremos con una discusión sobre la primera banda, que son las tres filas superiores.

Las tres bandas y pilas dividen la Cuadrícula de Sudoku en 9 Bloques, etiquetados B 1 , B 2 , y B 3 en banda 1 , B 4 , B 5 , y B 6 en banda 2 , y B 7 , B 8 , y B 9 en banda 3 , que también significa B 1 , B 4 , y B 7 en pila 1 , B 2 , B 5 , y B 8 en pila 2 , y B 3 , B 6 , y B 9 en pila 3 .

Sustitución de números por posiciones de símbolos

Sustituiremos el 9 números utilizados en la 81 cuadrados para salir B 1 con la siguiente cuadrícula:

|1 2 3|
|4 5 6|     Note: 9! cases
|7 8 9|

Con esto ahora podemos pensar en los números no como números sino como posiciones de símbolos, donde 9 ! diferentes soluciones usarán las mismas posiciones de símbolo para todos los 81 cuadrícula.

Descripción de restricciones de fila para una banda

Digamos que queremos completar Band1 y comenzamos en lo que yo llamo un patrón completamente normal para B 1 Fila 1 , como sigue:

Row 1: |1 2 3|     |     |    Note: The symbol positions in B2 and
Row 2: |4 5 6|1 2 3|     |    B3 only describe the row they are in,
Row 3: |7 8 9|     |1 2 3|    not the column positions.

Dado esto como punto de partida, ¿cómo completamos las posiciones de los símbolos desde el B 1 Fila2, en B 2 ? Si tratamos de ponerlos en la Fila1, tenemos un problema cuando llegamos a B3 porque necesitaríamos usar posiciones ya ocupadas. Entonces, tenemos que seguir el mismo patrón All-Normal que B 1 Fila1, lo que da como resultado lo siguiente:

Row 1: |1 2 3|     |4 5 6|    Note: The symbol positions in B2 and
Row 2: |4 5 6|1 2 3|     |    B3 only describe the row they are in,
Row 3: |7 8 9|4 5 6|1 2 3|    not the column positions.

Entonces B 1 Fila 3 sigue el patrón Todo-Normal para llenar los espacios en blanco.

Un símbolo normal se define como un símbolo que va hacia abajo hasta el segundo bloque y hacia abajo hasta el tercer bloque, donde si va por debajo de la parte inferior se envuelve en la parte superior de la banda.

Símbolo anormal se define como un símbolo que desciende dos hasta el segundo bloque y dos hasta el tercer bloque, con envoltura.

Un patrón totalmente normal es donde los nueve símbolos son normales.

Ahora veamos un caso con un símbolo anormal de B 1 Fila 1 , elegiremos 3 :

Row 1: |1 2 3|     |     |    Note: The symbol positions in B2 and
Row 2: |4 5 6|1 2  |    3|    B3 only describe the row they are in,
Row 3: |7 8 9|    3|1 2  |    not the column positions.

Aquí tenemos el símbolo 3 bajando 2 , y abajo 2 con una envoltura, en lugar de abajo 1 y abajo 1 .

Ahora bien, si tratamos de completar B 1 Fila 2 y Fila 3 en B 2 y B 3 encontramos que tenemos un problema similar, a menos que hagamos lo mismo que Fila 1 y elija uno de los tres símbolos para que sea anormal. Lo mismo se puede decir acerca de tener dos anormales de Row 1 , necesitamos repetir esto para las otras dos Filas. Y finalmente tenemos el caso de los tres anormales. Para abreviar, dejaré que el lector valide esto o simplemente puede mirar cualquier cuadrícula de solución de Sudoku.

Patrón anormal se define como tener un símbolo anormal por fila en B 1 .

Patrón normal se define como tener un símbolo normal por fila en B 1 .

Patrón totalmente anormal se define como todo 27 los símbolos son anormales.

Los patrones normales y anormales necesitan mayor aclaración. Para el patrón normal, necesitamos saber cuál de las tres posiciones en cada fila en B1 contiene el símbolo normal. Para el patrón anormal necesitamos lo mismo para el símbolo anormal. Para cada fila hay 3 posiciones por un total de 3 × 3 × 3 = 27 .

Así que el número total de permutaciones de símbolos en filas en B 2 y B 3 para banda 1 es 1 para el Todo-Normal, 3 × 3 × 3 para los anormales, 3 × 3 × 3 para la normalidad y 1 para los patrones Todo-Anormales. Llamemos a esto R :

R = 1 + 3*3*3 + 3*3*3 + 1 = 56 permutations of 9 symbols in 3 rows.

se debe notar que R describe los tres bloques incluso si tuviera que intercambiarlos, es una restricción natural en cualquier bloque/pila y podemos usarla más tarde para describir todo 3 bloques y 3 pilas

El resto es trivial, pero resaltaré las partes importantes.

Descripción de restricciones de columna para B 2 y B 3

Todavía necesitamos describir las posiciones de las columnas para los símbolos en B 2 y B 3 , que son solo las permutaciones de los tres números en cada subfila, que es 6 . Llamemos a esto PAG :

P = 6*6*6 * 6*6*6 = 6*6 * 6*6 * 6*6 = 46656 permutations of 3 symbols in 6 sub-rows.

Nota de implementación: Debido a que en los casos Normal y Anormal, un valor terminará en una fila diferente que los otros dos. Al hacer las permutaciones, solo permute dos símbolos, A y B , a través de tres posiciones:

|A B x|, |A x B|, |x A B|, |B A x|, |B x A|, |x B A|

Dónde A y B son:

|A B x|    For each row in B1 in the All-Normal and All-Abnormal patterns.

|x A B|    For each row in B1 where,
|A x B|    in the Abnormal pattern, x is the position of abnormal symbol and,
|A B x|    in the Normal pattern, x is the position normal symbol.

El carácter restante x encontrará su posición como la posición abierta en su fila asignada.

Entonces para la banda 1 el número total de soluciones que utilizan posiciones de símbolos es:

R * P = 56 * 46656 = 2612736

Nota: puedo usar un número entre 1 a través de 2612736 para calcular una permutación específica de estas soluciones o puedo usar una solución y usar la discusión anterior para asignar un número específico a esta permutación.

La restricción del resto de las bandas y pilas

Si quiero describir las posiciones iniciales para B 4 y B 7 Puedo usar R y PAG para pila 1 como lo hice para Band1 y conocer todas las permutaciones de B 4 y B 7 . Nota sin importancia: más tarde podría hacer algunas renumeraciones para B 1 al describir Stack 1 para ganar simetría para las descripciones finales de fila y columna.

R se puede utilizar en la banda 2 y banda 3 para describir las posiciones de fila para B 5 , B 6 , B 8 , y B 9 .

R se puede utilizar en la pila 2 y pila 3 para describir las posiciones de las columnas para B 5 , B 6 , B 8 , y B 9 .

Si conozco las posiciones de fila y columna para cada símbolo para B 5 , B 6 , B 8 , y B 9 luego, completar cada permutación solo implica hacer coincidir la fila y la columna de cada símbolo para cada bloque.

Conclusión

Puedo describir Banda 1 y las posiciones de fila en Band 2 y banda 3 como:

Row Contribution = R * P * R * R = 8,193,540,096

Puedo describir Stack 1 y las posiciones de las columnas en Stack 2 y pila 3 como:

Column Contribution = R * P * R * R = 8,193,540,096

El total es simplemente multiplicar estos dos números y 9 ! para sustituir números por posiciones de símbolos

Total = 9! * 8,193,540,096 * 8,193,540,096 = 2.436162195571x10^25

Como solo se trata de multiplicar dígitos, podría enumerar todos los dígitos, pero mi paquete de matemáticas no tiene tantos dígitos significativos.

Nota sin importancia: podría ser bueno cambiar el PAG s entre las dos contribuciones ya que el PAG en la contribución de la fila fija las posiciones de la columna y viceversa, o no.

Entonces, ahora tengo un total de soluciones numéricas y un diseño para una función que, dado un número en este rango, puedo derivar una solución específica o dada una solución, puedo derivar su número ordinal y sé cómo contar todo soluciones

Nota humorística: 8 , 193 , 540 , 096 × 8 , 193 , 540 , 096 = 6.7134 mi 19

Así que de nuevo, ¿dónde está mi error?

¿Cómo garantiza su método que, por ejemplo, no haya un 1 en la columna 4 de la fila 2 y tampoco en la columna 4 de la fila 6?
(Más concretamente, cuando multiplica la 'contribución de fila' y la 'contribución de columna' juntas, en realidad está hablando de la cantidad de configuraciones de dos cuadrículas de 9x9: una que satisface las restricciones de fila y otra que satisface las restricciones de columna .)
R para Stack2 limita las posiciones de columna para B5 y B7, lo que asegura que 1 no puede estar en la misma columna en la fila 2 y la fila 6.
"El problema que estamos tratando de resolver aquí es para N0, que es el número máximo de cuadrículas de respuestas correctas de Sudoku. Por lo tanto, no se discute el intercambio para obtener soluciones equivalentes". no entiendo esto ¿Quieres calcular el número de cuadrículas de sudoku válidas diferentes? Si es así, ¿sobre qué máximo está hablando y qué significa la oración sobre "intercambio"?
Miracle173, cuando leí estos documentos, estaba confuso lo que estaban tratando de calcular y esperaba que estas dos oraciones lo aclararan. Podría preguntarte qué quieres decir con diferente. ¿Piensa cómo eso podría confundir a algunos sobre lo que está preguntando? Si sostengo una cuadrícula de Sudoku frente a un espejo, ¿es diferente? Para N0, la respuesta es sí, la imagen especular es solo otra permutación en la enumeración de resultados.
Miracle173, a su segunda pregunta, tal vez N0 debería llamarme Nmax. En su reducción de casos de prueba, estaban intercambiando bloques y reetiquetando y era confuso. En mi segunda oración, "No hablar de intercambio" significa que no hay intercambio, no es que no quiera hablar sobre mi intercambio. Entonces, "intercambiar" no significa nada, ya que no hay ninguno.
Miracle173, somos dos personas separadas por un lenguaje común. Cuando dices "quiero calcular" y "sobre qué máximo", parece que piensas que todavía tengo trabajo por hacer. Mi Total 2.43E25 es la respuesta a la misma pregunta que respondieron con 6.671E21 y digo que están equivocados.
debe anteponer el nombre de usuario en los comentarios con una @ porque luego el comentario se envía al usuario
@Steven Stadnicki, noté tu nombre en una respuesta a la sección desconcertante sobre el tipo que quiere saber sobre Sudoku con 2 soluciones. Dijiste que podías crear uno con 3. ¿Alguna vez lo documentaste en alguna parte? Además, no puedo dar una respuesta a esa pregunta porque está restringida y no tengo la reputación, pero todas las respuestas son tontas, como ¿debería almorzar o tomar el autobús hoy?
@miracle173, gracias por señalarlo.
@ milagro173, et al. Esta discusión es un ejemplo de guerra asimétrica en la que no podemos agregar diagramas fácilmente y estamos limitados en la cantidad de caracteres en un comentario. Me uní al Foro de nuevos jugadores de Sudoku y agregué esto como un tema, así que tal vez sería mejor si continuáramos allí. [ foro.enjoysudoku.com/…
@miracle173, me dieron un ejemplo específico en el que lo que estaba haciendo no funcionó y estoy seguro de que lo que dices es correcto. Entonces, mi conclusión es que estoy equivocado. Gracias por tu tiempo, ahora ya no tengo eso atascado en mi cerebro.
Mi contraejemplo estaba equivocado. Estoy reescribiendo mi publicación pero eso es muy tedioso. También quiero agregar un contraejemplo correcto. Pero creo que se puede demostrar que todo lo que cuentas corresponde como máximo a un sudoku. Eso significa que tu número es un límite superior para el número de sudokus posibles.

Respuestas (1)

Tengo un nombre ligeramente diferente. Bloquear 11 es la parte superior izquierda 3 × 3 bloquear.

Primero quiero describir tu método para contar los sudokus. Luego quiero mostrar el error y doy un ejemplo que muestra que su método no funciona. Intenta generar cada sudoku de la siguiente manera

  1. definir bloque 11 del sudoku hay 9! posibilidades

  2. definir bloque 12 y bloque 13

    1. seleccione tres conjuntos: el primer conjunto contiene los números de la primera fila de Bloque 12 , el segundo conjunto contiene los números de la segunda fila de Block 12 , el tercer conjunto contiene los números de la tercera fila de Block 12 . Estos conjuntos deben satisfacer las restricciones de sudoku con respecto a Block 11 y bloque 12 y debería permitir crear tres conjuntos con un significado similar para Block 13 . Ya mostraste que hay como máximo 56 (=R) conjuntos triples posibles. Todos los demás triples de conjuntos conducirán a una contradicción con las restricciones de sudoku con respecto a las tres primeras filas. De los conjuntos que seleccionó, puede deducir tres conjuntos que son los números de la primera, segunda y tercera fila de Block 13
    2. en 2.1 ha creado 6 conjuntos de longitud 3. Para cada conjunto, seleccione una permutación de sus elementos. esta es entonces la fila real del sudoku. ya mostraste ahi ( 3 ! ) 6 (=P) posibilidades de seleccionar 6 de tales permutaciones.
  3. Definir bloque 21 bloque de anuncios 31 de manera similar a Block 12 y bloque 13 en 2. Pero ahora los conjuntos representan los números de las columnas de los bloques. De nuevo hay R PAG posibilidades

Ahora has arreglado los números de las celdas de Block 11 , Bloquear 12 , Bloquear 13 , Bloquear 21 y bloque 31 .

    1. Definir conjuntos de columnas para Bloque 22 y los conjuntos deducidos para Block 32 . Hay R posibilidades
    2. Definir conjuntos de columnas para Bloque 23 y los conjuntos deducidos para Block 33 . Hay R posibilidades
    3. Definir conjuntos de filas para Bloque 22 y los conjuntos deducidos para Block 23 . Hay R posibilidades
    4. Definir conjuntos de filas para Bloque 32 y los conjuntos deducidos para Block 33 . Hay R posibilidades
  1. Para cada celda de los cuatro bloques mencionados en 4, construya el número definido de forma única que satisfaga el conjunto de columnas y filas dado

Usando los pasos 1 a 3 tienes 9 ! × ( R × PAG ) 2 para asignar números a las celdas de Block 11 , Bloquear 12 , Bloquear 13 , Bloquear 21 , Bloquear 31 consecuentemente. Consistentemente significa que cada uno de estos Bloques, cada una de las 3 filas superiores y cada una de las 3 líneas de la izquierda contiene cada uno de los números del 1 al 9 exactamente una vez.

Entonces dices que tienes R 4 formas de seleccionar los conjuntos que contienen los números de las filas y columnas de Block 22 , Bloquear 23 , Bloquear 32 y bloque 33 . Dichos conjuntos deben elegirse de manera similar a 2. y 3. Tal selección de conjuntos consiste en el conjunto que contiene los números de la primera fila del Bloque 22 , el conjunto que contiene los números de la segunda fila de Block 22 y el conjunto que contiene los números de la tercera fila de Block 22 . Entonces tenemos tres conjuntos que contienen los números de la primera, segunda y tercera columna de Block 22 . Entonces, en total, tenemos que elegir 6 conjuntos para Block 22 . para bloque 23 , Bloquear 32 y bloque 33 también tenemos que elegir seis conjuntos respectivamente. Así que cada uno de estos R 4 Las selecciones consisten en 24 conjuntos con 3 elementos que restringen los valores de Block 22 , Bloquear 23 , Bloquear 32 y bloque 33 .

Pero en 5 afirmas que para cada una de esas selecciones de 24 conjuntos hay exactamente un número para cada celda que satisface las restricciones impuestas por los conjuntos.

Pero tampoco probó que para cada selección de 24 conjuntos haya al menos una asignación a las celdas que satisfaga las restricciones impuestas por tales 24 conjuntos ni que haya como máximo una asignación que satisfaga estas restricciones.

Un ejemplo: Aquí tenemos un sudoku

6 7 8 | 4 5 3 | 2 9 1
5 9 4 | 8 2 1 | 7 3 6
1 3 2 | 6 9 7 | 5 4 8
------+-------+------
2 6 1 | 3 7 8 | 4 5 9
9 8 7 | 1 4 5 | 3 6 2
3 4 5 | 9 6 2 | 1 8 7
------+-------+------
7 5 9 | 2 3 6 | 8 1 4
8 2 6 | 5 1 4 | 9 7 3
4 1 3 | 7 8 9 | 6 2 5 

Suponga que realmente ha ejecutado los pasos 1 a 4.3. (y en el siguiente diagrama, en realidad ha asignado números a las celdas de Block 22 y bloque 23 ) A las celdas en Bloque 32 y bloque 33 no teníamos valores asignados.

6 7 8 | 4 5 3 | 2 9 1
5 9 4 | 8 2 1 | 7 3 6
1 3 2 | 6 9 7 | 5 4 8
------+-------+------
2 6 1 | 3 7 8 | 4 5 9
9 8 7 | 1 4 5 | 3 6 2
3 4 5 | 9 6 2 | 1 8 7
------+-------+------
7 5 9 |       |      
8 2 6 |       |      
4 1 3 |       |      

Ahora asignamos los siguientes conjuntos a las filas y columnas de Block 32 y bloque 33 .

      row sets (interchanged the row sets of 
      Block32 and Block33 of the original sudoku):
------+-------+------
      |       |      
      |       |      
      |       |      
------+-------+------
      |       |      
      |       |      
      |       |      
------+-------+------
      { 1 4 8 { 2 3 6 
      { 3 7 9 { 1 4 5
      { 2 5 6 { 7 8 9

      column sets (the same as for the original sudoku):
------+-------+------
      |       |      
      |       |      
      |       |      
------+~~~~~~~+~~~~~~
      | 1 4 2 | 1 5 2
      | 3 6 5 | 3 6 7
      | 9 7 8 | 4 8 9
------+~~~~~~~+~~~~~~
      | 2 1 4 | 6 1 3
      | 5 3 6 | 8 2 4
      | 7 8 9 | 9 7 5

El { y el ~ deben recordarle que las filas y columnas del Bloque 23 y bloque 33 no son en realidad las filas y las columnas de estos dos bloques sino los conjuntos asignados a estas filas y columnas.

Estos conjuntos se construyen de acuerdo con sus requisitos, pero ahora hay una asignación a las celdas de Block 33 que pueda satisfacer los requisitos. pero bloque 3 3 no puede satisfacer estos conjuntos.

      |       |       
      |       |       
      |       |       
------+-------+-------
      |       |       
      |       |       
      |       |       
------+-------+-------
      |       | 6 2 3      
      |       | ?     
      |       |       

No hay un número válido para el celular. 87 . El número debe estar en {1, 4, 5} (conjunto de filas) y {6,8,9} (conjunto de columnas). Pero la intersección de estos conjuntos es el conjunto vacío.

Pero cuenta que en realidad hay R sudokus que satisfacen estas restricciones.

Nota: Tal vez quiera leer mi respuesta en stackoverflow donde cito la publicación de Kevin Kinfoil que intenta estimar la cantidad de Sudokus posibles usando argumentos heurísticos similares. Llega a un número que difiere solo en un 0,2% del valor real. Esta argumentación heurística se publicó antes de que se conociera el valor real.

Nota: El número de sudokus posibles fue calculado primero por Jarvis & Felgenhauer .

En su ejemplo para Stack1, obtengo un Rvalue de Abnormal233 porque solo 8, 9 y 7 siguen el camino anormal. Stack2 obtiene un valor R de Normal311 porque solo 5, 9 y 1 siguen la ruta normal. Band2 obtiene un valor R de Normal311 porque solo 1, 9, 3 y siguen el camino normal. Band3 obtiene un valor R de Normal213 porque solo 5, 8 y 3 siguen la ruta Normal. Esto se puede hacer para cualquier respuesta válida y no hay respuestas válidas en las que no se pueda hacer.
Encontré algún error en mi publicación. En la descripción del algoritmo y en el ejemplo. Corregiré esto.
Lo que aprendí fue que mis Rnumbers pueden describir cualquier Sudoku una vez que lo veo, pero que no todas las combinaciones son posibles debido a las limitaciones de empaque. Así que no puedo simplemente enumerar todas las posibilidades, ya que algunas no funcionarán. Gracias
reemplazó el ejemplo por uno correcto. puedes comprobarlo. ¿Y podría eliminar los comentarios antiguos que ya no son necesarios?
Sinopsis si los comentarios los borré. Gracias por su esfuerzo en esto, ya que realmente quiero saber si estoy equivocado. Y de nuevo, lo que aprendí es que a partir de una respuesta válida puedo volver a Rvalues ​​y de Rvalues ​​a la misma respuesta; Pero no puedo comenzar solo con Rvalues ​​y esperar que la respuesta sea válida. Pueden describir pero no predecir.