Programación dinámica - Universidad de...
Transcript of Programación dinámica - Universidad de...
![Page 1: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/1.jpg)
1
Parte de Algoritmos de la asignatura de Programación
Master de Bioinformática
Programación dinámica
Web asignatura: http://dis.um.es/~domingo/algbio.html
E-mail profesor: [email protected]
Transparencias preparadas a partir de las del curso de Algoritmos y Estructuras de Datos II, del Grado de Ingeniería Informáticay An Introduction to Bioinformatics Algorithms
![Page 2: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/2.jpg)
2
Método general• La programación dinámica se suele utilizar en problemas
de optimización, donde una solución está formada por una serie de decisiones.
• Resuelve el problema original combinando las soluciones para subproblemas más pequeños.
• Se almacenan los resultados de los subproblemas en una tabla, calculando primero las soluciones para los problemas pequeños, y llegando hasta el tamaño deseado con un proceso iterativo.
• Con esto se pretende evitar la repetición de cálculos para problemas más pequeños.
![Page 3: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/3.jpg)
3
Método general• Ejemplo. Cálculo de los números de Fibonacci.• Con método recursivo
Fibonacci (n: integer) Si n<2 Devolver 1 Sino Devolver Fibonacci (n-1) + Fibonacci (n-2)
– Problema: Muchos cálculos están repetidos, tiempo de ejec. exponencial.
– Solución: Calcular los valores de menor a mayor empezando por 0, e ir guardando los resultados en una tabla.
• Con programación dinámica.Fibonacci (n: integer)
T[0] = 0; T[1] = 1 para i = 2,3, ...,n T[i] = T[i-1] + T[i-2] devolver T[n]
– Se utiliza la misma fórmula que en la versión anterior, pero de forma más inteligente. El tiempo de ejecución es Θ(n).
![Page 4: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/4.jpg)
4
Método general
• Aspectos a definir en un algoritmo de programación dinámica:
– Ecuación recurrente, para calcular la solución de los problemas grandes en función de los problemas más pequeños.
– Determinar los casos base.
– Definir las tablas utilizadas por el algoritmo, y cómo se rellenan.
– Cómo se recompone la solución global a partir de los valores de las tablas.
![Page 5: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/5.jpg)
5
Análisis de tiempos de ejecución
• El tiempo de ejecución depende de las características concretas del problema a resolver.
• En general, será de la forma:Tamaño de la tabla*Tiempo de rellenar cada elemento de la tabla.
• Un aspecto importante de los algoritmos de programación dinámica es que necesitan una tabla para almacenar los resultados parciales, que puede ocupar mucha memoria.
• Además, algunos de estos cálculos pueden ser innecesarios.
![Page 6: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/6.jpg)
6
Problema: Dado un conjunto de n tipos de monedas, cada una con valor vi, y con una cantidad de monedas de ese tipo ci, y dada una cantidad P, encontrar el número mínimo de monedas que tenemos que usar para obtener esa cantidad.
• El algoritmo voraz es muy eficiente, pero sólo funciona en un número limitado de casos.
• Utilizando programación dinámica:– Definimos el problema en función de problemas más
pequeños.– Determinar los valores de los casos base.– Definimos las tablas necesarias para almacenar los
resultados de los subproblemas.– Establecemos una forma de rellenar las tablas y de
obtener el resultado.
Problema del cambio de monedas
![Page 7: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/7.jpg)
7
Definición de la ecuación recurrente:• Cambio (i, Q), el problema de calcular el número mínimo de monedas
necesario para devolver una cantidad Q, usando los i primeros tipos de monedas (es decir los tipos 1...i).
• La solución de Cambio(i, Q) puede que utilice k monedas de tipo i o puede que no utilice ninguna.– Si no usa ninguna moneda de ese tipo: Cambio(i, Q) = Cambio(i - 1, Q)– Si usa k monedas de tipo i: Cambio(i, Q) = Cambio(i, Q – k*vi) + k
• En cualquier caso, el valor será el mínimo:
Cambio(i, Q) = mink=0,1,...,min{Q/vi,ci} {Cambio(i-1, Q-k* vi)+k}
Casos base: Cambio(i, Q)• Si (i≤0) o (Q<0) entonces no existe ninguna solución al problema, y
Cambio(i, Q) = +∞.• En otro caso para cualquier i>0, Cambio(i, 0) = 0.
Problema del cambio de monedas
![Page 8: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/8.jpg)
8
Problema del cambio de monedas
Definición de las tablas utilizadas:• Necesitamos almacenar los resultados de todos los
subproblemas.• El problema a resolver será: Cambio (n, P).• Por lo tanto, necesitamos una tabla de nxP, de enteros, que
llamaremos D, siendo D[i, j ]= Cambio(i, j).• Ejemplo. n= 3, P= 8, v= (1, 4, 6), no límite en c
Forma de rellenar las tablas:• De arriba hacia abajo y de izquierda a derecha, aplicar la
ecuación de recurrencia:
D[i, j] = mink=0,1,...,min{Q/vi,ci} {D(i-1, Q-k* vi)+k}
D Cantidad a devolver
Monedas 0 1 2 3 4 5 6 7 8
C1= 1C2 = 4C3 = 6
![Page 9: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/9.jpg)
9
Problema del cambio de monedas
• Algoritmo.Devolver-cambio (P: int; V: array [1..n] of int; C: array [1..n] of int; var D: array
[1..n, 0..P] of int);para i = 1,2,...,n D[i, 0] = 0para i = 1,2,...,n para j = 1,2,...,P {Tener en cuenta si el valor } D[i, j] = mink=0,1,...,min{Q/vi,ci} {D(i-1, Q-k* vi)+k} { cae fuera de la tabla}
• Ejemplo. n= 3, P= 8, v= (1, 4, 6), no límite en c
0 1 2 3 4 5 6 7 8
C1= 1 0 1 2 3 4 5 6 7 8C2 = 4 0 1 2 3 1 2 3 4 2C3 = 6 0 1 2 3 1 2 1 2 2
![Page 10: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/10.jpg)
10
Problema del cambio de monedas• ¿Cómo calcular cuántas monedas de cada tipo deben usarse, es decir la
solución (x1, x2, ..., xn)?
• Se usa otra tabla de decisiones tomadas:
Aux
• Algoritmo para obtener una solución:
para i=n,n-1,...,1
xi=Aux[i,P]
P=P-xi*vi
→ Hacer un programa Perl para este problema.
0 1 2 3 4 5 6 7 8
C1 = 1 0 1 2 3 4 5 6 7 8C2 = 4 0 0 0 0 1 1 1 1 2C3 = 6 0 0 0 0 0 0 1 1 0
![Page 11: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/11.jpg)
11
Programación dinámica en Bioinformática
Interesa conocer la similaridad entre genes, o de varios genes con determinadas cadenas.La Programación Dinámica se usa para estudiar similaridad entre genes.Veremos el algoritmo de Mayor Subcadena Común (Longest Common Subsequence, LCS)
⇒ trabajo individual (6 puntos en la calificación final): a partir de la explicación y el programa del LCS:
seleccionar otro de los algoritmos de programación dinámica del libro,
explicar su uso en bioinformática,
explicar el funcionamiento del algoritmo,
programarlo y evaluar el funcionamiento
![Page 12: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/12.jpg)
12
Problema de la Distancia de Manhattan
Buscamos un camino del Origen al Destino con el que podamos visitar la mayo cantidad de atracciones (*). Solo se puede andar a la derecha y abajo. Destino
*
*
*
*
*
**
* *
*
*
Origen
*
![Page 13: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/13.jpg)
13
Problema de la Distancia de Manhattan
Se quiere encontrar el camino de longitud mayor en una malla con pesos
Entrada: Una malla con pesos G con dos vértices distinguidos, Origen y Destino
Salida: Un camino en G de longitud máxima para ir del Origen al Destino
![Page 14: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/14.jpg)
14
Problema de la Distancia de Manhattan
3 2 4
0 7 3
3 3 0
1 3 2
4
4
5
6
4
6
5
5
8
2
2
5
0 1 2 3
0
1
2
3
Coordenada j
Coordenada i
13
origen
destino
4
3 2 4 0
1 0 2 4 3
3
1
1
2
2
2
419
95
15
23
0
20
3
4
![Page 15: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/15.jpg)
15
Problema de la Distancia de Manhattan
→ ¿Cómo podría ser un algoritmo de avance rápido para este problema?
¿Se obtendría la solución óptima?
¿Qué tiempo de ejecución tendría?
→ ¿Cómo podría ser un algoritmo por backtracking para este problema?
¿Se obtendría la solución óptima?
¿Qué tiempo de ejecución tendría?
![Page 16: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/16.jpg)
16
1
5
0 1
0
1
i
1
5S1,0 = 5
S0,1 = 1
Para hacerlo por Programación Dinámica:
• Calcular el peso del camino óptimo para cada vértice de la malla
• En cada vércice el peso es el máximo del de los vértices anteriores sumado con el peso de la arista que los une
Problema de la Distancia de Manhattanj
![Page 17: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/17.jpg)
17
MTP: Dynamic Programming (cont’d)
1 2
5
3
0 1 2
0
1
2
source
1 3
5
8
4
S2,0 = 8
i
S1,1 = 4
S0,2 = 33
-5
j
![Page 18: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/18.jpg)
18
MTP: Dynamic Programming (cont’d)
1 2
5
3
0 1 2 3
0
1
2
3
i
source
1 3
5
8
8
4
0
5
8
103
5
-5
9
131-5
S3,0 = 8
S2,1 = 9
S1,2 = 13
S3,0 = 8
j
![Page 19: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/19.jpg)
19
MTP: Dynamic Programming (cont’d)
greedy alg. fails!
1 2 5
-5 1 -5
-5 3
0
5
3
0
3
5
0
10
-3
-5
0 1 2 3
0
1
2
3
i
source
1 3 8
5
8
8
4
9
13 8
9
12
S3,1 = 9
S2,2 = 12
S1,3 = 8
j
![Page 20: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/20.jpg)
20
MTP: Dynamic Programming (cont’d)
1 2 5
-5 1 -5
-5 3 3
0 0
5
3
0
3
5
0
10
-3
-5
-5
2
0 1 2 3
0
1
2
3
i
source
1 3 8
5
8
8
4
9
13 8
12
9
15
9
j
S3,2 = 9
S2,3 = 15
![Page 21: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/21.jpg)
21
MTP: Dynamic Programming (cont’d)
1 2 5
-5 1 -5
-5 3 3
0 0
5
3
0
3
5
0
10
-3
-5
-5
2
0 1 2 3
0
1
2
3
i
source
1 3 8
5
8
8
4
9
13 8
12
9
15
9
j
0
1
16S3,3 = 16
(showing all back-traces)
Done!
![Page 22: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/22.jpg)
22
Problema de la Distancia de Manhattan
Se utiliza una ecuación de recurrencia para calcular el valor en cada punto:
si, j = max si-1, j + peso de la arista entre (i-1, j) y (i, j)
si, j-1 + peso de la arista entre (i, j-1) y (i, j)
El tiempo de ejecución es n x m
Y la solución que se obtiene es óptima
![Page 23: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/23.jpg)
23
Problema de la Secuencia Común más Larga (LCS)
• Dadas dos secuencias
v = v1 v2…vm y w = w1 w2…wn
• La LCS de v y w es una secuencia de posiciones en
v: 1 < i1 < i2 < … < it < m
y otra secuencia de posiciones en
w: 1 < j1 < j2 < … < jt < n
tal que la it -sima letra de v es igual a la jt-sima letra de w
y t es máximo
![Page 24: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/24.jpg)
24
Problema de la Secuencia Común más Larga (LCS)
A T -- C T G A T C
-- T G C T -- A -- C
elements of v
elements of w
--
A1
2
0
1
2
2
3
3
4
3
5
4
5
5
6
6
6
7
7
8
Coord. j:
Coord. i:
Las coincidencias en rojoPosiciones de v:
Posiciones de w:
2 < 3 < 4 < 6 < 8
1 < 3 < 5 < 6 < 7
Cada subsecuencia común es un camino en la malla
0
0
(0,0)(1,0)(2,1)(2,2)(3,3)(3,4)(4,5)(5,5)(6,6)(7,6)(8,7)
![Page 25: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/25.jpg)
25
Problema de la Secuencia Común más Larga (LCS)
Queremos encontrar la LCS de dos cadenas
Entrada: Un grafo con pesos G con dos vértices distinguidos, Origen y Destino. Hay aristas en horizontal, vertical y diagonal, con peso 0 las verticales y horizontales y 1 las diagonales si coincide el carácter
Salida: El camino más largo en la malla para ir del Origen al Destino
![Page 26: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/26.jpg)
26
Problema de la Secuencia Común más Larga (LCS)
T
G
C
A
T
A
C
1
2
3
4
5
6
7
0i
A T C T G A T C0 1 2 3 4 5 6 7 8
j
Cada camino es una subsecuencia común.
Cada elemento añade un carácter a la subsecuencia común.
Problema LCS: Encontrar un camino con el máximo número de diagonales.
![Page 27: Programación dinámica - Universidad de Murciadis.um.es/~domingo/apuntes/AlgBio/1213/dinamica.pdf · 7 Definición de la ecuación recurrente: • Cambio (i, Q), el problema de calcular](https://reader030.fdocuments.mx/reader030/viewer/2022021623/5bb90db209d3f2931b8d3719/html5/thumbnails/27.jpg)
27
Problema de la Secuencia Común más Larga (LCS)
La ecuación de recurrencia es:
si, j = maxsi-1, j
si, j-1
si-1, j-1 + 1 si vi = wj
→ Analizar el programa LCS.pl y explicar cómo se ha implementadoel algoritmo, cómo se obtiene la subsecuencia y cuál es el costedel tiempo de ejecución.