Vous êtes sur la page 1sur 20

Elementos de Programacin o Dinmica a

Home Page Title Page Contents

Profesor: Julio Csar Lpez e o


jlopez@eisc.univalle.edu.co

November 10, 2003

Page 1 of 20 Go Back Full Screen Close Quit

Elementos de Programacin Dinmica o a Cundo buscar una solucin con esta tcnica? a o e Subestructura Optima
Home Page Title Page Contents

Subproblemas dependientes. Subestructura Optima Un problema exhibe una Subestructura Optima si una solucin ptima al problema contiene o o impl citamente soluciones ptimas a subproblemas. o La Subestructura ptima para un problema, o normalmente sugiere el conjunto de subproblemas que pueden llegar a aparecer. Es muy importante que sean pocos (O(nk ))

Page 2 of 20 Go Back Full Screen Close Quit

Elementos de Programacin Dinmica o a Subproblemas dependientes El conjunto de subproblemas debe ser pequeo n (polinomial en el tamao de la entrada), es decir, n un algoritmo recursivo para el problema resuelve muchas veces los mismos subproblemas. En este caso se dice que los subproblemas se sobreponen, es decir, no son independientes. Un problema resuelto con la tcnica de Dividir e y Conquistar normalmente no tiene esta caracter stica. Idea importante: almacenar las respuestas que se han calculado para no volverlas a calcular. Esto no cuesta mucho en espacio pues el nmero de u subproblemas no es muy grande.

Home Page Title Page Contents

Page 3 of 20 Go Back Full Screen Close Quit

Elementos de Programacin Dinmica o a Miremos lo costoso que puede resultar no almacenar los resultados de los subproblemas ya resueltos:
Home Page Title Page Contents

Page 4 of 20 Go Back Full Screen Close Quit

Sucesion Matrices Recursivo (p, i, j) 1 if i = j 2 then return 0 3 m[i, j] 4 for k i to j 1 5 do q sucesin Matrices Recursivo (p, i, k) o + sucesin Matrices Recursivo (p, k + 1, j) o + p[i 1] p[k] p[j] 6 if q < m[i, j] 7 then m[i, j] q 8 return m[i, j]

Elementos de Programacin Dinmica o a El rbol de llamados recursivos que realiza el ana terior algoritmo, para el caso Sucesin Matrices Recursivo (p, 1, 4) o
Home Page Title Page Contents

1..4

1..1
Page 5 of 20 Go Back Full Screen Close Quit

2..4

1..2

3..4

1..3

4..4

2..2 3..4

2..3 4..4

1..1

2..2 3..3

4..4

1..1 2..3

1..2

3..3

3..3 4..4 2..2

3..3

2..2

3..3 1..1

2..2

g 1: Arbol de Recursin SMR(p,1,4) o

Elementos de Programacin Dinmica o a La relacin de recurrencia asociada al anterior procedio miento recursivo es la siguiente : T (1) 1 T (n) 1 + (
n1 k=1 (T (k)

+ T (n k) + 1)), n > 1

Para cada i = 1, 2, ..., n 1, T (i) aparecer como T (k) a y como T (n k), tenemos entonces :
Home Page Title Page Contents

T (n) 2

n1 i=1

T (i) + n

Utilizando el mtodo de sustitucin, se debe demostrar e o que T (n) = (2n), espec ficamente que T (n) 2n1 para cada n 1. T (1) 1 = 20 n1 T (n) 2 i=1 2i1 + n Hip. de induccin o n2 = 2 i=0 2i + n = 2(2n1 1) + n = (2n 2) + n 2n1 Moraleja: Arbol de recursin con muchas repeticiones o usar programacin dinmica. o a

Page 6 of 20 Go Back Full Screen Close Quit

Elementos de Programacin Dinmica o a Tcnica de memorizacin: e o Cmo mejorar el algoritmo recursivo, para que no o repita tantos clculos? a
Home Page Title Page Contents

Cmo lograr una solucin de arriba hacia abajo o o (top-down)? Memorizacin!! o Idea: Mantener el control recursivo, pero memorizando lo calculado en una tabla.

Page 7 of 20 Go Back Full Screen Close Quit

Sucesion Matrices Memorizada (p) 1 n length[p] 1 2 for i 1 to n 3 do for j i to n 4 do m[i, j] 5 return Mire Sucesin (p, 1, n) o

Elementos de Programacin Dinmica o a

Home Page Title Page Contents

Page 8 of 20 Go Back Full Screen Close Quit

Mire Sucesion (p, i, j) 1 if m [i, j] < 2 then return m[i, j] 3 if i = j 4 then m[i, j] 0 5 else for k i to j 1 6 do q Mirar Sucesin (p, i, k) + o Mirar Sucesin (p, k + 1, j)+ o p[i 1] p[k] p[j] 7 if q < m[i, j] 8 then m[i, j] q 9 return m[i, j]

Elementos de Programacin Dinmica o a Anlisis del algoritmo: a Cada una de las n2 entradas de m, se calcula una sola vez por medio del llamado al algoritmo recursivo.
Home Page Title Page Contents

Todas las otras veces que se necesite su valor, se obtiene en tiempo constante. La unica vez que se calcula, toma O(n) tiempo, sin tomar en cuenta los llamados recursivos, que se toman en cuenta de manera global. Entonces la complejidad del algoritmo es: (n2).O(n) + O(n2) = O(n3) Clculo a de m[i, j] 1i< jn Nmero u total de llamados recursivos

Page 9 of 20 Go Back Full Screen Close Quit

Home Page Title Page Contents

Elementos de Programacin Dinmica o a En general, si se deben resolver todos los subproblemas al menos una vez, se preeren las tablas dinmicas a llenadas de abajo a arriba. Sino, se preere la tcnica e de memorizacin. o

Page 10 of 20 Go Back Full Screen Close Quit

La Subsucesin com n ms larga o u a Con las aplicaciones de la biolgicas, podemos comao parar los ADN de dos o ms organismo diferentes. a Una lamento del ADN consiste de una cadena de moleculas llamadas bases, donde las posibles bases son adenina, guanina, citosina, tiamina. Se representan cada una de estas bases por una letra inicial, un lamento de ADN puede ser expresado como una cadena sobre el conjunto nito {A, C, G, T }. Por ejemplo el ADN de un organismo puede ser : S1 = ACCGGT CGAGT GCGCGGAAGCCGGCCGAA, mientras que ADN de otro organismo puede ser S2 = GT CGT T CGGAAT GCCGT T GCT CT GT AAA La meta es comparar los dos lamentos del ADN y determinar similaridad. La similaridad ser dinidas de varias formas : Si una cadena es subcadena de la otra. Encontrar una tercera cadena S3 en la cual las bases de S3 aparezcan tanto S1 y S2.

Home Page Title Page Contents

Page 11 of 20 Go Back Full Screen Close Quit

La Subsucesin com n ms larga o u a Formalizarmos la nocin de similaridad en el probo lema de subsucesin comn ms larga. o u a Dada X =< x1, ..., xm >, una sucesin Z =< z1, z2 o , .., zk > es una subsucesin de X si existen o < i1, i2, . . . , ik >, 1 i1 < i2 < . . . < ik n, tales que xij = zj , j = 1, . . . , k. Por ejemplo:X =< A, B, C, B, D, A, B > Z =< B, C, D, B > (i1 = 2, i2 = 3, i3 = 5, i4 = 7) Dadas X y Y , sucesiones, se dice que Z es una subsucesin com n de X y Y , si Z es subsucesin de o u o X y Y. Por ejemplo X =< A, B, C, B, D, A, B > Y =< B, D, C, A, B, A > < B, C, A > es una subsucesin comn de X y Y o u < B, C, B, A > tambin lo es e < B, C, A, B >, < B, D, A, B > tambin lo son e No hay una ms larga. a

Home Page Title Page Contents

Page 12 of 20 Go Back Full Screen Close Quit

La Subsucesin com n ms larga o u a


Home Page Title Page Contents

El problema de la subsucesin comn ms larga o u a (LCS) Entrada: X y1 , . . . , y n > =< x1 , . . . , xm >, Y =<

Page 13 of 20 Go Back Full Screen Close Quit

Salida: La longitud de una subsucesin ms larga o a de X y Y . Resolveremos este problema usando Programacin o Dinmica. a

La Subsucesin com n ms larga o u a Etapa 1: Caracterizar la estructura ptima o Teorema (Subestructura ptima de un LCS) o
Home Page Title Page Contents

Sean X =< x1, x2, . . . , xm >, Y =< y1, y2, . . . , yn > y Z =< z1, . . . , zk > una LCS de X y Y. Entonces: 1. Si xm = yn, entonces zk = xm = yn y Zk1 es una LCS de Xm1 y Yn1 2. Si xm = yn y zk = xm entonces Z es una LCS de Xm1 y Y 3. Si xm = yn, y zk = yn entonces Z es una LCS de X y Yn1 Entonces la estructura de una solucin ptima al o o problema LCS, incluye soluciones ptimas a subo problemas del mismo problema.

Page 14 of 20 Go Back Full Screen Close Quit

La Subsucesin com n ms larga o u a Etapa 2 : Una solucin recursiva o Sea Xi =< x1, . . . , xi > el i-simo prejo de X. e De la caracterizacin se tiene que: o Si xm = yn entonces | LCS(X, Y ) |=| LCS(Xm1, Yn1) | +1 Si xm = yn entonces
Page 15 of 20 Go Back Full Screen Close Quit

Home Page Title Page Contents

| LCS(X, Y ) |= max(| LCS(Xm1, Y ) |, | LCS(X, Yn1) |) Entonces, si c[i, j] = Longitud de la LCS (Xi, Yj ) : 0 si i = 0 o j = 0 si xi = yj c[i, j] = c[i 1, j 1] + 1 M ax{c[i 1, j], c[i, j 1]} si x = y i j

La Subsucesin com n ms larga o u a Etapa 3: Calcular el valor de una solucin o o ptima Existen mn subproblemas, utilizar Programacin o Dinnica. a
Home Page Title Page Contents

J n j
j-1

(i,j) Llenar C por filas !! o llenar C por columnas !! I 1 2


i-1

Page 16 of 20 Go Back Full Screen Close Quit

2 1 i m

g 2: Representacin del una solucin o o o ptima

La Subsucesin com n ms larga o u a Longitud LCS(x,y) 1 m length[x] 2 n length[y] 3 for i 1 to m 4 do c[i, 0] 0 5 for j 1 to n 6 do c[0, j] 0 7 for i 1 to m 8 do for j 1 to n 9 do if xi = yj 10 then c[i, j] c[i 1, j 1] + 1 11 b[i, j] 12 else if c[i 1, j] c[i, j 1] 13 then c[i, j] c[i 1, j] 14 b[i, j] 15 else c[i, j] c[i, j 1] 16 b[i, j] 17 return c y b El costo de ejecucin de procedimiento es O(mn), o donde cada entrada a la tabla toma tiempo O(1).

Home Page Title Page Contents

Page 17 of 20 Go Back Full Screen Close Quit

La Subsucesin com n ms larga o u a


j i 0 1
Home Page Title Page Contents

0 yi

1 B

2 D

3 C

4 A

5 B

6 A

xi A B C B D A B

0 0 0 0 0 0 0 0

0 0 1 1 1 1 1 1

0 0 1 1 1 2 2 2

0 0 1 2 2 2 2 2

0 1 1 2 2 2 3 3

0 1 2 2 3 3 3 4

0 1 2 2 3 3 4 4

2 3 4 5 6 7

Page 18 of 20 Go Back Full Screen Close Quit

g 3: Procedimiento LONGITUD-LCS En la g 3 se muestra las tablas que retorna LONGITUD-LCS con las secuencias X = (A, B, C, D, A, B) y Y= (B, D, C, A, B, A)

La Subsucesin com n ms larga o u a Etapa 4: Construir una solucin ptima o o Utilizar el arreglo b: : xi = yj una LCS de Xi, Yj b[i, j] = : LCS (Xi, Yj ) = LCS (Xi1, Yj ) : LCS (X , Y ) = LCS (X , Y ) i j i j1 Imprimir LCS (b, X, i, j) 1 if i = 0 or j = 0 2 then return 3 if b[i, j] = 4 then imprimir LCS (b, X, i 1, j 1) 5 print xi 6 elseifb[i, j] = 7 then imprimir LCS (b, X, i 1, j) 8 else imprimir LCS (b, X, i, j 1) Para la tabla b de la g 3, el procedimiento imprime BCBA. El costo del procedimiento es O(m + n), donde i, j se decrementan en cada estado de la recursin. o

Home Page Title Page Contents

Page 19 of 20 Go Back Full Screen Close Quit

La Subsucesin com n ms larga o u a


Home Page Title Page Contents

Mejorando la eciencia En espacio: Eliminar b. El espacio usado sigue siendo O(mn)

Page 20 of 20 Go Back Full Screen Close Quit

Guardar sola la la i 1 y la la i hasta donde va. No sirve para reconstruir una solucin. o

Vous aimerez peut-être aussi