Sudoku es un problema NP-completo

Imagen de Jorge Valverde

El sudoku es un juego de tipo puzzle que se ha hecho muy popular en todo el mundo, la simplicidad de sus reglas de juego y la complejidad para encontrar la solución al mismo, hacen una combinación un tanto difícil de explicar pero que, en una simple frase "te conviertes en adicto al sudoku".

Sin embargo, el sudoku no es un juego común y corriente, muy por el contrario, en el ámbito de las matemáticas es visto como un problema de satisfacción de restricciones. En el ámbito de la computación, el sudoku es un problema de tipo NP-completo, varios autores lo han demostrado de distintas maneras, por mi parte, basandome en algunos trabajos he hecho lo mío.

Adjunto el informe que preparé y el ejecutable .jar para ver la solución de un tablero de sudoku de 9x9. Espero les sea de utilidad.

Su voto: Nada Promedio: 2.9 (9 votos)
AdjuntoTamaño
sudoku is NP.pdf155.28 KB
Sudoku.rar61.5 KB

Sudoku (versatil)

hola Jorge... mira como di de casualidad con tu trabajo... el cual supongo lo presentaste para infoteo...
yo realicé un trabajo sobre el sudoku (pero era para el curso de Prolog, asi q podras darte cuenta q esta orientado al paradigma de programacion logica)
me gustaria darle una chequeada a tu trabajo (pero el .jar q colgaste, no se ejecuta... no se si es problema de mi pc, o el archivo que subiste)
y bueno... de repente para mas adelante fusionar nuestros trabajos, medir diferencias de algoritmos, o de paradigmas (de repente la recursividad y el motor de inferencias de prolog lo hacen mas rapido y blablabla)
y bueno, una amplia gama de posibilidades... jaja, supongo q el sudoku te apasiono tanto como a mi, q x eso mismo decidiste desarrollar tu proyecto al respecto :P
espero estemos en contacto :)
cualkier cosa, estare publicando mi paper de sudoku en mi blog mas adelante (http://infnato.blogspot.com)
estamos en contacto!!

Sudoku con backtracking

Imagen de Jorge Valverde

Hola Renato, el .jar del sudoku lo volvi a actualizar (no sé que pudo haber pasado pero por siacaso lo subí nuevamente).

Y bueno, para dar con una solución de un tablero de sudoku use el paradigma de programación llamado backtracking, el paradigma que usaste (programación lógica) es muy bueno y otorga al software las virtudes propias a dicho paradigma, y pues claro que sería bueno de ponernos en contacto para hacer una fusión de trabajos :).

Jorge Carlos Valverde Rebaza
Estudiante de Ciencia de la Computación
Universidad Nacional de Trujillo

Jorge Carlos Valverde Rebaza
Department of Computer Science - ICMC - USP
Master Student in Computer Science
São Carlos, SP, Brazil

¿Backtracking es un paradigma ?

Hola Jorge creo que estas cometiendo un grandísimo error, creo que debes corregirlo cuanto antes porque puedes llegar a confundir a mucha gente que recién se inicia en el tema y no tiene claro lo que es un paradigma de programación, y hago énfasis en la parte de que recién se
inicia ya que estos temas son fundamentales y deberían ser los primeros en tratarse si se esta siguiendo una curricula seria.

Un paradigma es mas una manera o enfoque de programacion
(http://es.wikipedia.org/wiki/Paradigma_de_programaci%C3%B3n) es algo mas general como Pensar en orientación al objeto, programación funcional, etc. el backtracking es más una técina para el diseño algoritmos (http://www.nist.gov/dads/HTML/backtrack.html). De hecho nisiquiera son excluyentes ya que puedes implementar un algoritmo que utilize backtracking en un paradigma
funcional.

Espero estas palabras aclaren un poco el panorama.

saludos

importante aclaracion

Es importante aclarar las ideas como lo hace el comentario anterior. Para las personas que conocen el tema quizás entiendan lo que se quiere decir y no se hagan problemas pero si el sitio web es de la "Sociedad de Estudiantes de Ciencia de la Computación" creo que es fundamental que se hable con propiedad, en especial de conceptos tan básicos como estos. No sea que seamos altisonantes por mera apariencia.

Backtracking

Imagen de Jorge Valverde

Muchas gracias por la aclaración, si tienen mucha razón, un lapsus, les pido mil disculpas por el terrible error cometido.

Backtracking ES UNA ESTRATEGIA que se utiliza para encontrar soluciones a distintos problemas.

Un paradigma es un enfoque partícular para la construcción de software, dentro de los distintos tipos de paradigmas d eprogramción se encuentran la programación imperativa , la funcional, la lógica, la orientada a objetos, etc.

Jorge Carlos Valverde Rebaza
Estudiante de Ciencia de la Computación
Universidad Nacional de Trujillo

Jorge Carlos Valverde Rebaza
Department of Computer Science - ICMC - USP
Master Student in Computer Science
São Carlos, SP, Brazil

Puzzles

Hola, lei tu informe y en él depúes de demostrar formalmente que el sudoku es un problema NP-completo tengo una interrogante: Si el sudoku es NP-completo y el sudoku es un juego de tipo puzzle, entonces, los demás juegos de tipo puzzle también serán NP-completos???.

Puzzles NP-completos

Imagen de Jorge Valverde

Bueno una opinión simple podría decirse que sí, pero formalmente tu pregunta tiene respuesta en éste documento en el que se hace un estudio de la complejidad de los problemas tipo puzzle.

Jorge Carlos Valverde Rebaza
Estudiante de Ciencia de la Computación
Universidad Nacional de Trujillo

Jorge Carlos Valverde Rebaza
Department of Computer Science - ICMC - USP
Master Student in Computer Science
São Carlos, SP, Brazil

Generalizando

Imagen de fcatho

Hola

Realicé un trabajo que pueda resolver tu duda. Quienes hicimos el trabajo intentamos demostrar un problema más general basándonos en los puzzles, pero lamentablemente solo encontrábamos información específica del 8Puzzle; así que tuvimos que ingeniar una demostración para un NPuzzle. El trabajo lo encuentras aquí.

Fredy

Codigo Fuente Sudoku

Un codigo mas sencillo de entender lo tenemos en

http://www.cesarliza.com/descargas/anydisal.htm

descargar Clase06-BackTrackingParte2.pps

Gracias

Muchas gracias por toda esta informacion, me hubiera gustado tenerla hace unos semestres , por que estaba haciendo un proyecto de simulacion en el cual tenia que implemartar un algoritmo propabilistico para dar solución al sudoku, lo cual al final hice pero me costo mucho tiempo diseñarlo.

Gracias.

Distribuir contenido