Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


BackTracking, Apuntes de Ingeniería Infórmatica

Asignatura: Diseño y análisis de algoritmos, Profesor: , Carrera: Ingeniería Informática, Universidad: URJC

Tipo: Apuntes

2016/2017

Subido el 19/06/2017

ironmand10s
ironmand10s 🇪🇸

3 documentos

1 / 67

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Backtracking
Dise˜no y An´alisis de Algoritmos
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43

Vista previa parcial del texto

¡Descarga BackTracking y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

Backtracking

Dise˜no y An´alisis de Algoritmos

Backtracking Contenidos

Contenidos

1 Introducci´on

Arboles de b´usqueda

3 N reinas

Otros problemas

5 Ramificaci´on y poda

Poda alfa-beta

Esquemas generales

Backtracking Introducci´on

Backtracking - Vuelta atr´as

Estrategia para encontrar soluciones a problemas con restricciones

definidos sobre espacios discretos (de elevado tama˜no)

Construye soluciones parciales progresivamente, las cuales deben

cumplir las restricciones del problema

El recorrido (en profundidad) tiene ´exito si, procediendo de esta

forma, se puede definir por completo una soluci´on (en una hoja de un

´arbol de recursi´on)

Puede detenerse al encontrar una soluci´on o seguir hasta encontrar

todas

Si en alguna etapa la soluci´on parcial construida hasta el momento no

se puede completar, se vuelve atr´as deshaciendo la soluci´on parcial,

hasta un punto donde puede seguir explorando posibles soluciones

Es un m´etodo de “fuerza bruta” pero “inteligente”

Backtracking Introducci´on

Ejemplo - 4 reinas

Backtracking Arboles de b´usqueda

Permutaciones de {a, b, c}

a c

b

b c

c b c a b a

a c a b

(a,b,c)

(a,c,b)

(b,a,c) (b,c,a) (c,a,b) (c,b,a)

Backtracking Arboles de b´usqueda

Permutaciones de {a, b, c}

a c
b
b c
c b c a b a
a c a b
(a,b,c) (a,c,b) (b,a,c) (b,c,a) (c,a,b) (c,b,a)
primer
elemento
segundo
elemento
tercer
elemento
3 llamadas
2 llamadas
1 llamada
permutación

Backtracking Arboles de b´usqueda

Implementaci´on - I

1 void permutaciones(int n){

2 int[] perm = new int[n];

3 boolean[] libres = new boolean[n];

4

5 for(int i=0; i<n; i++)

6 libres[i] = true;

7

8 perms(n, 0, perm, libres);

9 }

10

11 void imprimir(int[] v){

12 for(int i=0; i<v.length; i++)

13 System.out.print(v[i]+" ");

14

15 System.out.println();

16 }

Backtracking Arboles de b´usqueda

Implementaci´on - II

1 void perms(int n, int i, int[] solucion, boolean[] xs){

2 for(int k=0; k<n; k++)

3 if(xs[k]){

4 solucion[i] = k;

5 xs[k] = false;

7 if(i==n-1)

8 imprimir(solucion);

9 else

10 perms(n, i+1, solucion, xs);

12 xs[k] = true;

n: n´umero de elementos (profundidad del ´arbol)

i: posici´on del elemento a insertar

solucion: permutaci´on parcial construida

xs: indica los elementos incluidos en la soluci´on parcial

Backtracking Arboles de b´usqueda

Partes de {a, b, c}

Soluci´on - ´arbol binario

{c}
{b}
{ } {b,c}
{a} {a,c} {a,b}
{a,b,c}
se incluye: a
se incluye: b
se incluye: c

Backtracking Arboles de b´usqueda

Partes de {a, b, c}

Soluci´on - ´arbol binario

Arbol binario

En cada nodo decides si un elemento estar´a presente o no

Simplemente crea un vector un vector de valores booleanos

[1, 0 , 1] = {a, c}

No es necesario deshacer los cambios

Backtracking Arboles de b´usqueda

Implementaci´on - II

Soluci´on - ´arbol binario

1 void partes1(int n, int i, int[] c, boolean[] subc){

2 for(int k=0; k<=1; k++){

3 if(k==0)

4 subc[i] = false;

5 else

6 subc[i] = true;

8 if(i==n-1)

9 imprimir(c,subc);

10 else

11 partes1(n, i+1, c, subc);

n: n´umero de elementos (profundidad del ´arbol)

i: elemento a considerar (nivel del ´arbol)

c: vector de elementos

subc: valores booleanos que definen los subconjuntos

Backtracking Arboles de b´usqueda

Partes de {a, b, c}

Soluci´on - subconjunto en cada nodo

a c

b c

{c}

{b}

{a,b} {a,c} {b,c}

{a}

{a,b,c}

b

c

c

Backtracking Arboles de b´usqueda

Partes de {a, b, c}

Soluci´on - subconjunto en cada nodo

El ´arbol de recursi´on no es binario

En el nivel i las soluciones tienen i elementos

Crea un vector con los ´ındices de los elementos que se van incluyendo

[0, 2] = {a, c}

Tiene la mitad de nodos (factor constante) que el ´arbol binario del

primer algoritmo

Se obtiene un subconjunto en cada nodo (no solo en las hojas)

Backtracking Arboles de b´usqueda

Partes de {a, b, c}

Soluci´on - subconjunto en cada nodo

j

j+1 j+2 ... n-

Ahora es necesario llevar dos ´ındices

Posici´on en la soluci´on del elemento a incluir

´

Indice del elemento a incluir (qu´e elemento se incluye)