Taller de Backtracking

Documentos relacionados
Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

Algoritmos genéticos

Algoritmos de Ordenamiento

Algoritmos y Estructuras de Datos Curso 06/07. Ejercicios

Se puede dibujar la siguiente figura, empezando y terminando en el mismo punto, sin levantar e lápiz del papel?

Un algoritmo sencillo de Sudokus de 9 9

El proyecto realizado consiste en un resolutor de sudokus mediante CSP.

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS SÍLABO

Tema 4: Definición de funciones

TEORÍA DE GRAFOS Ingeniería de Sistemas

Test de primalidad probabiĺıstico

Tema: Algoritmos para la ruta más corta en un Grafo.

Taller de Combinatoria

Optimización de Problemas de Producción

Introducción a los Computadores (CNM-130) Estructuras selectivas en Matlab

como les va con las practicas?

PASAPALABRA BLOQUE NÚMEROS

Introduc)on to Programming (in C++) Ejemplos de tratamiento de secuencia de secuencias. Emma Rollón Departament of Computer Science

B A S E S : C O M P E T E N C I A S U D O K U 1 7 A L 2 0 D E O C T U B R E P R E S E N T A C I Ó N G E N E R A L.

Complejidad computacional (Análisis de Algoritmos)

UNIVERSIDAD AUTÓNOMA DE YUCATÁN FACULTAD DE MATEMÁTICAS MISIÓN

OPERADORES GENETICOS SOBRE PERMUTACIONES APLICADOS A LA RESOLUCIÓN DEL SUDOKU

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información 1º año

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Introducción a la Geometría Computacional. Análisis de Algoritmos

POTENCIAS Y RAICES II. 1 Escribe todos los cuadrados perfectos comprendidos entre 200 y 300.

La segunda observación permite reformular el problema de una manera más simple:

Algoritmos en Teoría de Grafos

1. Conceptos básicos sobre el problema en cuestión y cuestiones afines. 2. Formulación de los correspondientes algoritmos y su pseudocódigo.

Ahora que hemos aprendido acerca de la suma y la resta, es el momento para multiplicar números enteros.

Teoría de Grafos Introducción Grafos isomorfos

Tema 13: Aplicaciones de programación funcional

Tema: Autómatas de Estado Finitos

public class AtaqueVoraz extends EsquemaVZ implements EstrategiaSolucion {

300CIG007 Computabilidad y Lenguajes Formales: Autómatas Finitos

Índice. Ya sé Excel, pero necesito más

Introducción a la Matemática Discreta

C U R S O : MATEMÁTICA

Ejercicios sobre recursividad

Primer Parcial de Programación 3 (1/10/2009)

Olimpiada Mexicana de Matemáticas. Guanajuato.

Apuntes elaborados por: Aaron Asencio, Eduardo Quevedo, Raquel López Revisado por: Javier Miranda el???

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Ejercicios Tema 6. Funciones

Algorítmica y Complejidad. Tema 3 Ordenación.

Tema 3. Patrones y Definiciones de Funciones

Árboles Binarios Ordenados Árboles AVL

TEMA IV TEORÍA DE GRAFOS

= RETURN =3 7-. ELSE K

Grafos. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Grafos 1 / 30

Lenguaje de Programación: C++, INPUT OUTPUT(Variables)

Análisis y Diseño de Algoritmos

IIC1103 Introducción a la Programación

Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap)

ÍNDICE INTRODUCCIÓN...13

Un grafo G = (V, E) se dice finito si V es un conjunto finito.

LECCION N 08 ARBOLES. Un árbol es un grafo A que tiene un único nodo llamado raíz que:

Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la información de este documento fue tomada textualmente de varios

Planificaciones Algoritmos y Programación I. Docente responsable: AZCURRA DIEGO ANDRES. 1 de 5

Olimpiada Matemática Internacional Formula of Unity / The Third Millennium Curso 2015/2016. Fase 1 Problemas del grado R5

greedy (adj): avaricioso, voraz, ávido, codicioso, glotón

Verificación. Taller de Programación

2007 Carmen Moreno Valencia

Combinatoria analítica y dinámica. Aplicaciones.

Prueba N o 1. Programación II

Ordenamiento Avanzado: Shellshort y Quicksort

ALGORITMOS HEURÍSTICOS Y APROXIMADOS. Análisis y diseño de algoritmos II- 2009

FICHAS DE ESTUDIO No.1. Definición del conjunto N NOMBRE FECHA

Descripciones de los niveles de logro modificados (ALD, siglas en inglés) de la prueba de evaluación MCA en matemáticas Grados 5 a 8

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

GUÍA DOCENTE Matemática Discreta

Notación Asintótica 2

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

PASOS PARA LA VALIDACION DE DATOS

Fundamentos de Investigación de Operaciones Modelos de Grafos

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot

A B MIN C D E F MAX x E.T.S.I. INFORMÁTICA 4º CURSO. INTELIGENCIA ARTIFICIAL E INGENIERÍA DEL CONOCIMIENTO

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Java Básico. Métodos estáticos

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Metaheurísticas y heurísticas. Algoritmos y Estructuras de Datos III

Curso 0 de Informática

Algoritmos de Strings. Héctor Navarro

Transcripción:

Taller de Backtracking Laboratorio de Algoritmos y Estructuras de Datos III Departamento de Computación Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires 8 de Abril de 2011 1 / 15

Menú del día 1 Repaso de Backtracking Generación de todas las permutaciones 2 SuDoku 2 / 15

Repaso de Backtracking Repaso de Backtracking Es una técnica algorítmica para recorrer sistemáticamente el espacio de soluciones de un problema. Ejemplos de problemas y sus espacios : Suma de Subconjuntos : Dado un conjunto de enteros, existe algún subconjunto cuya suma sea exactamente cero? 3 / 15

Repaso de Backtracking Repaso de Backtracking Es una técnica algorítmica para recorrer sistemáticamente el espacio de soluciones de un problema. Ejemplos de problemas y sus espacios : Suma de Subconjuntos : Dado un conjunto de enteros, existe algún subconjunto cuya suma sea exactamente cero? Ordenar arreglos 3 / 15

Repaso de Backtracking Repaso de Backtracking Es una técnica algorítmica para recorrer sistemáticamente el espacio de soluciones de un problema. Ejemplos de problemas y sus espacios : Suma de Subconjuntos : Dado un conjunto de enteros, existe algún subconjunto cuya suma sea exactamente cero? Ordenar arreglos El problema de la mochila, crucigramas, caminos simples en un grafo, etc. 3 / 15

Repaso de Backtracking Repaso de Backtracking La ventaja del backtracking es que recorre sistemáticamente. Entonces: Genera cada elemento del espacio una vez Evita saltearse configuraciones Evita repetir configuraciones Permite descartar un montón de soluciones inteligentemente 4 / 15

Repaso de Backtracking Repaso de Backtracking Se puede interpretar naturalmente como un árbol de soluciones parciales Cada vértice representa una solución parcial. Dos vértices x, y se conectan si x se puede extender de y Si el espacio de soluciones son todas las permutaciones de a 1,..., a N, a i A: las soluciones parciales son a 1,..., a k, a i A la forma de extender a 1,..., a k, es agregando a k+1 A {a 1,..., a k El árbol se puede podar. Es posible rechazar muchas soluciones mirando una solución parcial!! Ejemplo con los problemas vistos. 5 / 15

Repaso de Backtracking Generación de todas las permutaciones Generación de todas las permutaciones Backtracking se puede usar para generar todas las permutaciones No es el único algoritmo para tal fin, muchos otros en : Johnson-Trotter algorithm D. Knuth. The Art of Computer Programming, Volume 4 Fascicle 2: Generating All Tuples and Permutations. Addison Wesley, 2005. Por qué usarlo? 6 / 15

Repaso de Backtracking Generación de todas las permutaciones Generación de todas las permutaciones Generar todas las permutaciones de {0,..., N 1 void backtrack(vector<int>& perm, int actual, vector<bool>& usado){ if(actual == N) { procesar(perm); return; int n = perm.size(); forn(i,n) { if(usado[i]) continue; usado[i] = true; perm[actual] = val; backtrack(perm,actual+1,used); usado[i] = false; perm[actual] = -1; 7 / 15

Repaso de Backtracking Generación de todas las permutaciones Análisis En que orden se generan las permutaciones? Se procesan las soluciones parciales? 8 / 15

Repaso de Backtracking Generación de todas las permutaciones Más allá de Backtracking Hay algo más allá de Backtracking?? 9 / 15

SuDoku SuDoku Rellenar una cuadrícula de n 2 n 2 celdas dividida en subcuadrículas de n n con las cifras del 1 al n 2 partiendo de algunos números ya dispuestos en algunas de las celdas, si hay mas de una la menor lexicográficamente. 1 2 3 4 5 6 7 8 9 http://uva.onlinejudge.org/index.php?option=com_ onlinejudge&itemid=8&category=11&page=show_problem&problem= 930 Labo de Algo III (Departamento de Computación Facultad Taller deciencias Backtracking Exactas y Naturales Universidad 8 de Abril de de Buenos 2011 Aires) 10 / 15

SuDoku Solución sin podas bool backtrack(matrix& p, coord c, int n){ if(l.empty()) { return is_sol(p, n); int nn = p.size(); forsn(val, 1, nn+1) { p[c.first][c.second] = val; if(backtrack(p,siguiente(c,n),n)) { return true; p[c.first][c.second] = 0; return false; Labo de Algo III (Departamento de Computación Facultad Taller deciencias Backtracking Exactas y Naturales Universidad 8 de Abril de de Buenos 2011 Aires) 11 / 15

SuDoku Análisis Peor Caso? abo de Algo III (Departamento de Computación Facultad Taller deciencias Backtracking Exactas y Naturales Universidad 8 de Abril de de Buenos 2011 Aires) 12 / 15

SuDoku Análisis Peor Caso? abo de Algo III (Departamento de Computación Facultad Taller deciencias Backtracking Exactas y Naturales Universidad 8 de Abril de de Buenos 2011 Aires) 12 / 15

SuDoku Podas ideas? Labo de Algo III (Departamento de Computación Facultad Taller deciencias Backtracking Exactas y Naturales Universidad 8 de Abril de de Buenos 2011 Aires) 13 / 15

SuDoku Podas ideas? Verificar que no se agreguen números repetidos por columnas Verificar que no se agreguen números repetidos por filas Verificar que no se agreguen números repetidos por sub-cuadrículas Labo de Algo III (Departamento de Computación Facultad Taller deciencias Backtracking Exactas y Naturales Universidad 8 de Abril de de Buenos 2011 Aires) 13 / 15

SuDoku Solución con podas bool backtrack(matrix& p, coord c, int n){ if(l.empty()) { return is_sol(p, n); int nn = p.size(); forsn(val, 1, nn+1) { if(!ok(p,c,val)) /*+ podas! +*/ continue; p[c.first][c.second] = val; if(backtrack(p,siguiente(c,n),n)) { return true; p[c.first][c.second] = 0; return false; Labo de Algo III (Departamento de Computación Facultad Taller deciencias Backtracking Exactas y Naturales Universidad 8 de Abril de de Buenos 2011 Aires) 14 / 15

SuDoku Análisis. Caso Malo 9 9 1 2 3 Qué pasa si cambiamos el órden? Otras formas de resolver el sudoku : Andrew C. Bartlett, Amy N. Langville, An Integer Programming Model for the Sudoku Problem, The Journal of Online Mathematics and Its Applications, Volume 8. May 2008. Labo de Algo III (Departamento de Computación Facultad Taller deciencias Backtracking Exactas y Naturales Universidad 8 de Abril de de Buenos 2011 Aires) 15 / 15