La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y análisis de algoritmos

Presentaciones similares


Presentación del tema: "Diseño y análisis de algoritmos"— Transcripción de la presentación:

1 Diseño y análisis de algoritmos
Técnica de diseño Backtracking II

2 Temario Técnica de diseño Backtracking Aplicaciones
Problema de las 8 reinas

3 Técnica de diseño Backtracking
El problema de suma de subconjuntos Problema Dado un conjunto de n números positivos y otro número positivo M, se trata de encontrar todos los subconjuntos de W cuya suma es M. Ejemplo: si W={11,13,24,7} y M=31, entonces la solución es {11,13,7} y {24,7} Primera representación de la solución: La solución puede representarse como un cubconjunto de los índices de los elementos de W. Para el ejemplo: s(1,2,4) y s(3,4) En general las soluciones son k-tuplas ,1<=k<=n Restricciones sobre las soluciones, primera representación Explícitas: Implícitas: (Para evitar generar varias instancias de la misma tupla)

4 Técnica de diseño Backtracking
El problema de suma de subconjuntos Segunda representación de la solución: La solución puede representarse como una n-tupla tal que de forma que si no se elige si se elige En el ejemplo anterior: (1,1,0,1), (0,0,1,1). Conclusión: Pueden existir varias maneras de formular un problema, con distintas representaciones de las soluciones. Aunque siempre verificando las soluciones un conjunto de restricciones explícitas e implícitas). En el presente problema , ambas representaciones, llevan a un espacio de etados que consta de

5 Técnica de diseño Backtracking
El problema de suma de subconjuntos Arbol del espacio de soluciones (n=4) para la primera representación con tuplas de largo variable Un arco de nivel i al nivel i+1 representa un valor para El espacio de soluciones está definido por todos los caminos desde la raíz hasta cualquier nodo del árbol. Los nodos se han numerado según un recorrido en anchura (utilizando para ello una cola)

6 Técnica de diseño Backtracking
El problema de suma de subconjuntos Arbol del espacio de soluciones (n=4) para la segunda representación con tuplas de tamaño fijo Un arco de nivel i al nivel i+1 toman valores para o 1 El espacio de soluciones está definido por todos los caminos desde la raíz a una hoja del árbol. Hojas, representan las 16-posibles 4-tuplas Los nodos se han numerado según un recorrido en profundidad (se explora primero el último de los nodos añadido a la lista de nodos por explorar, utilizando para ello una stack)

7 Técnica de diseño Backtracking
El problema de suma de subconjuntos Se estudiará una solución, con backtracking, para la segunda representación de la solución(tuplas de tamaño fijo): El elemento x[i] del arreglo solución, toma el valor 1 o 0 dependiendo si el número w[i] se incluye o no en la solución Generación de los hijos de un nodo: Para un nodo de nivel i, el hijo izquierdo corresponde a x[i]=1 y el derecho a x[i]=0 Función acotadora : la tupla (x[1],...,x[k]) sólo puede conducir a una solución si : Si además se sabe que los w[i] están ordenados de forma creciente, la tupla (x[1],...,x[k]), no puede conducir a una solución si : Es decir una función acotadora es (x[1],...,x[k]) verdadera si y ólo si

8 Técnica de diseño Backtracking
El problema de suma de subconjuntos Solución recursiva Procedimiento sumasub(ent s,k,r:entero) {arreglo s globales x,w, de 1 a n. Los valores x[k] 1 a k-1 ya han sido calculados } {s corresponde a la suma de w[i]*x[i] hasta k-1 y r la suma de k hasta n de w[i]} Variable i:entero Inicio x[k]:=1 {generación del hijo izquierdo} Si s+w[k] = M entonces {se ha encontrado un subconjunto} escribir (x[1..k]) {el resto 0} sino Si s+w[k]+ w[k+1]<=M entonces sumasub(s+w[k],k+1,r-w[k]) Fin-si {generación de hijo derecho} Si (s+r-w[k]=>M) and (s+w[k]+ w[k+1]<=M) entonces x[k]:=0 FIN. Llamada inicial ... sumasub(0,1,”suma de todos los w[i]”)

9 Técnica de diseño Backtracking
El problema de suma de subconjuntos Ejemplo n=6, M=30, W=(5,10,12,13,15,18), cada nodo rectángulo representa s,k,r, en cada llamada. Soluciones A=(1,1,0,0,1,0),B=(1,0,1,1,0,0), B=(0,0,1,0,0,1). Se construyen 23 nodos de un total de 127.

10 Técnica de diseño Backtracking
Coloreado de grafos Problema de decision Dados un grafo G y un número entero positivo m , es G ¿m-coloreable? Es decir, ¿se pueden pintar con colores los nodos de G de modo que no haya dos vértices adyacentes con el mismo color y se usen sólo m colores?. Problema de optimización Ya visto en enfoque greedy, el problema es, dado un grafo G, determinar el menor número m de colores con los que se puede colorear G. Una aplicación muy conocida Dado un mapa , puede pintarsesus regiones adyacentes (paises,provincias, etc) de tal forma que no haya dos regiones adyacentes de igual color y no se empleen más de m colores. Cada región se modela como un nodo y si dos regiones son adyacentes sus correspondientes se conectan con un arco.

11 Técnica de diseño Backtracking
Coloreado de grafos Problema a considerar es el decisión Dado un grafo G cualquiera, determinar todas las formas posibles en las que puede pintarse utilizando no más de m de colores . Representación: matriz de adyacencia Tipo grafo = arreglo[1..n,1..n] de booleano Sólo se requiere saber si arco existe o no para verificar restriccion. Representación de los colores: enteros entre 1 y m Tipo color = 0 .. m Representación de la solución Tipo sol = arreglo[1..n] de color

12 Técnica de diseño Backtracking
Coloreado de grafos Espacio de estados, por ejemplo n=3 y m=3 Grado del árbol m y altura n Cada nodo de nivel i tiene m hijos que corresponden a las m posibles asignaciones a x[i], 1<=i<=n

13 Técnica de diseño Backtracking
Coloreado de grafos Solución recursiva Procedimiento m_coloreado(ent k:entero;entsal x:sol) {se usa na variable g de tipo grafo. En x se tiene la parte de la solución ya calculada (es decir,hasta x[k-1]) y k es el índice del siguiente vértice al que se va asignar el color} Inicio repetir {generación de todos los colores ‘legales’ para x[k]} siguienteValor(x,k); {asigna a x[k]:=un color legal} si x[k]<>0 entonces {se ha encontrado un color legal} si k=n entonces escribir (x[1..n) sino m_coloreado(k+1,x) Fin-si hasta que x[k]=0 FIN.

14 Técnica de diseño Backtracking
Coloreado de grafos Solución recursiva Procedimiento siguienteValor(entsal x:sol; ent k:entero) {x[1]..x[k-1] tienen colores asociados, todos los nodos adyacentes tienen distinto color. X[k] tiene el anterior color para el que se ha probado (0 si no se ha probado con ninguno), Se calcula el siguiente color para x[k] diferente de todos los vertices adyacentes a k (0 si no hay ninguno)} Variables encontrado:booleano; j:entero Inicio repetir x[k]:=(x[k]+1) mod (m+1) {siguiente color} si x[k]<>0 entonces encontrado:= verdad; j:=1 mientras j<=n and encontrado haga si g[k,j] and (x[k]=x[j]) entonces encontado:=falso sino j:=j+1 Fin-si Fin-mientras hasta que x[k]=0 or encontrado FIN. Llamada.. m_coloredo(1,x)

15 Técnica de diseño Backtracking
Coloreado de grafos Cota superior de complejidad temporal Número de nodos internos del arbol del espacio de estados: La complejidad del ‘siguientevalor’ para cada nodo interno Cota del tiempo total:


Descargar ppt "Diseño y análisis de algoritmos"

Presentaciones similares


Anuncios Google