¿Cómo es posible que existan cuadrículas de soluciones de Sudoku? La respuesta correcta es: o como fue probado ¡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 - , - , y - y tres columnas de pilas - , - , y - 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 Bloques, etiquetados , , y en banda , , , y en banda , y , , y en banda , que también significa , , y en pila , , , y en pila , y , , y en pila .
Sustitución de números por posiciones de símbolos
Sustituiremos el números utilizados en la cuadrados para salir 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 diferentes soluciones usarán las mismas posiciones de símbolo para todos los 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 Fila , 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 Fila2, en ? 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 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 Fila 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 Fila , elegiremos :
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 bajando , y abajo con una envoltura, en lugar de abajo y abajo .
Ahora bien, si tratamos de completar Fila y Fila en y encontramos que tenemos un problema similar, a menos que hagamos lo mismo que Fila y elija uno de los tres símbolos para que sea anormal. Lo mismo se puede decir acerca de tener dos anormales de Row , 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 .
Patrón normal se define como tener un símbolo normal por fila en .
Patrón totalmente anormal se define como todo 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 posiciones por un total de .
Así que el número total de permutaciones de símbolos en filas en y para banda es para el Todo-Normal, para los anormales, para la normalidad y para los patrones Todo-Anormales. Llamemos a esto :
R = 1 + 3*3*3 + 3*3*3 + 1 = 56 permutations of 9 symbols in 3 rows.
se debe notar que 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 bloques y pilas
El resto es trivial, pero resaltaré las partes importantes.
Descripción de restricciones de columna para y
Todavía necesitamos describir las posiciones de las columnas para los símbolos en y , que son solo las permutaciones de los tres números en cada subfila, que es . Llamemos a esto :
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, y , 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 y 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 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 a través de 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 y Puedo usar y para pila como lo hice para Band1 y conocer todas las permutaciones de y . Nota sin importancia: más tarde podría hacer algunas renumeraciones para al describir Stack para ganar simetría para las descripciones finales de fila y columna.
se puede utilizar en la banda y banda para describir las posiciones de fila para , , , y .
se puede utilizar en la pila y pila para describir las posiciones de las columnas para , , , y .
Si conozco las posiciones de fila y columna para cada símbolo para , , , y 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 y las posiciones de fila en Band y banda como:
Row Contribution = R * P * R * R = 8,193,540,096
Puedo describir Stack y las posiciones de las columnas en Stack y pila como:
Column Contribution = R * P * R * R = 8,193,540,096
El total es simplemente multiplicar estos dos números y 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 s entre las dos contribuciones ya que el 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:
Así que de nuevo, ¿dónde está mi error?
Tengo un nombre ligeramente diferente. Bloquear es la parte superior izquierda 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
definir bloque del sudoku hay 9! posibilidades
definir bloque y bloque
Definir bloque bloque de anuncios de manera similar a Block y bloque en 2. Pero ahora los conjuntos representan los números de las columnas de los bloques. De nuevo hay posibilidades
Ahora has arreglado los números de las celdas de Block , Bloquear , Bloquear , Bloquear y bloque .
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 para asignar números a las celdas de Block , Bloquear , Bloquear , Bloquear , Bloquear 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 formas de seleccionar los conjuntos que contienen los números de las filas y columnas de Block Bloquear Bloquear y bloque 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 el conjunto que contiene los números de la segunda fila de Block y el conjunto que contiene los números de la tercera fila de Block Entonces tenemos tres conjuntos que contienen los números de la primera, segunda y tercera columna de Block Entonces, en total, tenemos que elegir 6 conjuntos para Block . para bloque Bloquear y bloque también tenemos que elegir seis conjuntos respectivamente. Así que cada uno de estos Las selecciones consisten en 24 conjuntos con 3 elementos que restringen los valores de Block Bloquear Bloquear y bloque
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 y bloque ) A las celdas en Bloque y bloque 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 y bloque .
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 y bloque 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 que pueda satisfacer los requisitos. pero bloque no puede satisfacer estos conjuntos.
| |
| |
| |
------+-------+-------
| |
| |
| |
------+-------+-------
| | 6 2 3
| | ?
| |
No hay un número válido para el celular. . 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 .
Steven Stadnicki
Steven Stadnicki
Sojourner9
milagro173
Sojourner9
Sojourner9
Sojourner9
milagro173
Sojourner9
Sojourner9
Sojourner9
Sojourner9
milagro173