¡Foto!

¡Envia tu foto al Fotomaton!

Backtracking: Volviendo atrás

8 comentarios · 9.514 lecturas · programacion

Volviendo hacia atrás en el blog algunas semanas -haciendo backtracking-, comentaba el uso de la recursividad en la programación y lo interesante que resultaba definir algo contenido en la misma definición.

El Backtracking es una técnica de programación de la que se puede partir de la definición de Recursividad (vease definición de recursividad) con la diferencia que, en el backtracking, al existir varios caminos diferentes a elegir, una vez llegado al final y no cumplirse la condición establecida, volvemos atrás para seguir buscando caminos diferentes o alternativos y posiblemente correctos.

La idea del backtracking, si aún no la has entendido, se ve bastante bien en estos ejemplos del Laberinto y las n-Damas (en Java).

sudoku

Finalmente, como lo prometido es deuda, subo la práctica comentada en el anterior artículo sobre recursividad que resuelve sudokus planteados por medio de la técnica del backtracking. Recordar que no es la mejor técnica ni mucho menos para resolver Sudokus, sino prácticamente usar la fuerza bruta para resolverlos con la posibilidad de volver atrás y buscar más caminos.

El programa está realizado para Free Pascal y permite:

  • Insertar números uno a uno (comprobando si es posible insertar el número según las reglas)
  • Cargar y salvar en un fichero de tipo propio los sudokus creados
  • Intentar resolver el sudoku mediante backtracking indicandote si tiene varias, única o ninguna solución y calculando el tiempo que tarda en resolverlo.
  • Borrar el sudoku actual del panel
  • Insertar un sudoku predefinido por coordenadas (ojo! este no comprueba si los números son válidos).

Hay bastante cosas que son mejorables, como por ejemplo quitar algunas variables globales o la inclusión de eliminar algunos números insertando un cero (por ejemplo), pero eso lo dejo para el que quiera modificarlo, asi como el que se anime y lo «traduzca» a otro lenguaje de programación estaré encantado en incorporarlo al artículo.

Programa para resolver sudokus en Free Pascal con algunos ficheros de ejemplo.


8 comentarios · Escrito el 23-Feb-2006 · Ver menciones
Recomendar por correo · Meneame · Añadir a del.icio.us

8 Comentarios


#1 Publicado hace 2 años
Driadan Lector

Navegando con Konqueror
Bajo Linux

[...]una vez llegado al final y no cumplirse la condición establecida, volvemos atrás para seguir buscando caminos diferentes o alternativos y posiblemente correctos[...]
Ojo! que no se cumpla la condicion establecida no quiere decir que no haya encontrado una posible solucion. Existen varios tipos de backtracking, por ejemplo para encontrar la solucion óptima, asi que puede haber llegado a una solucion pero aun asi seguir buscando para ver si hay otra mejor.

#2 Publicado hace 2 años
Ruyk Lector

Navegando con Mozilla Firefox
Bajo Linux

Lo cierto es que el backtracking por sí sólo no es una técnica muy querida por los programadores, ya que es bastante ineficiente, en el peor de los casos es tan ineficiente como un procedimiento recursivo normal. Sin embargo, se utiliza en algunos algoritmos, por ejemplo, utilizando la técnica de ramificación y poda de árboles de soluciones, en la que se va acotando una posible solución según se va realizando la recursividad. El bactracking se aplica en este caso cuando nuestra cota superior o inferior no mejoraría un resultado anterior, con lo que nos ahorramos bastantes llamadas recursivas ;) (Véase MTP2 o Xtreme Loonies xD)

#3 Publicado hace 2 años
Geekdraz Premium

Navegando con Mozilla Firefox
Bajo Windows XP

Sí, el backtracking, dado lo que consume debería llamarse "backtranking" ;)

#4 Publicado hace 2 años
Kenji Lector

Navegando con Internet Explorer
Bajo Windows XP

Me acabas de salvar el culo amigo!!

Estoy con pascal y para mi es impresionante que no tenga ni idea de programación y me manden hacer un "resuelve sudokus por bactraking". Si te conociera te invitaría a una cerveza y unas bravas.

XD!

GRACIAS!!!

#5 Publicado hace 2 años
pashanguita Lector

Navegando con Internet Explorer
Bajo Windows XP

La pregunta es cual seria la funcion de estimacion del algoritmo del tipo de ramificacion y poda para poder evitarme unas cuantas llamadas recursivas?

como podria seleccionar que jugadas me llevarian antes a la solución?

gracias

#6 Publicado hace 2 años
pashanguita Lector

Navegando con Internet Explorer
Bajo Windows XP

La pregunta es cual seria la funcion de estimacion del algoritmo del tipo de ramificacion y poda para poder evitarme unas cuantas llamadas recursivas?

como podria seleccionar que jugadas me llevarian antes a la solución?

gracias

#7 Publicado hace 2 años
chimichorro Lector

Navegando con Internet Explorer
Bajo Windows XP

Ser o n o ser ?

#8 Publicado hace 2 años
dark soul Lector

Navegando con Mozilla Firefox
Bajo Ubuntu Linux

La verdad es que lo de la solucion de sudokus, es una cuestion que se acaba de poner de moda para los profesores de informatica, llevo ya dos años que no me dejan tranquilo con los benditos sudokus, ya los odio mucho.

Cada algoritmo tiene sus ventajas, asta lo que tengo mirado hasta ahora(backtraking, ramificacion y poda, y dancing links), backtraking es el que todos entendemos, ramificacion y poda no esta mal pero lo veo que para un sudoku gasta demasiada memoria, y dancing links lo veo demasiado jodido de implementar, tengo que hacer un sudoku en C++ y dos imlementaciones graficas en qt y gtkmm y me voy a volver loco , asi que si veis una buena documentacion porfavor os agradeceria que me la pasarais a mi blog

Deja tu comentario


en Internet.




Consejos


  • Los comentarios fuera del tema del artículo (OFF-TOPIC) serán eliminados.
  • Escribir completamente en MAYUSCULAS en Internet equivale a GRITAR y está mal visto.
  • No utilices lenguaje SMS, en Emezeta no te cobramos por letras escritas.
  • No hagas publicidad de tu página o dejes enlaces en el comentario para aumentar el PR o la popularidad en buscadores. En Emezeta se aplica el tag nofollow, que hace que Google ignore esos enlaces.
  • No insultes. Al escribir un comentario tus datos quedan almacenados y serás el único responsable de tus palabras. Se permite la libertad de expresión y de opinión, pero no los comentarios ofensivos.
  • Puedes insertar algunas etiquetas HTML en los comentarios: em, a href, b, i, em, code, acronym y strong.
  • Es posible añadir una foto junto a tus comentarios, para ello sólo tienes que personalizarla en Gravatar. [?]

Envía tu foto


Fotomatón Emezeta

Envia tu fotografía al fotomatón de Emezeta. Puedes enviar varias y saldrás en la portada de Emezeta.


Artículo de http://www.emezeta.com/

10 consultas efectuadas / Página generada en 0.07 segundos

Programado íntegramente por José Román (Manz) en XHTML y CSS estándar.

Sindicado bajo Feed RSS. Contenido bajo licencia Creative Commons

Estadísticas de visitas · Términos y condiciones · Contacto · Publicidad · Preguntas frecuentes (FAQ)