Académique Documents
Professionnel Documents
Culture Documents
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 ))
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.
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
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
2..2
3..3 1..1
2..2
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
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.
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
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
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
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.
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
El problema de la subsucesin comn ms larga o u a (LCS) Entrada: X y1 , . . . , y n > =< x1 , . . . , xm >, Y =<
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.
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
| 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
2 1 i m
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).
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
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
Guardar sola la la i 1 y la la i hasta donde va. No sirve para reconstruir una solucin. o