dr. jesÚs a. gonzÁlez bernal ciencias ... - …jagonzalez/ada/progdin.pdf · 2 introducción a...

39
DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Análisis y Diseño de Algoritmos Programación Dinámica

Upload: lyngoc

Post on 25-Sep-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

D R . J E S Ú S A . G O N Z Á L E Z B E R N A L C I E N C I A S C O M P U T A C I O N A L E S

I N A O E

Análisis y Diseño de Algoritmos

Programación Dinámica

Page 2: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

2

Introducción a Programación Dinámica

�  Parecido a divide y conquista ¡  Resuelve problemas combinando soluciones ¡  Programación se refiere a resolver problemas en forma tabular ¡  Programación dinámica aplica cuando los subproblemas no

son independientes ÷ Comparten subproblemas

¡  Resuelve cada subproblema sólo una vez, guarda la solución, ahorra tiempo

�  Generalmente utilizada en problemas de optimización

2

Page 3: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

3

Introducción a Programación Dinámica

�  Cuatro pasos 1.  Caracterizar la estructura de una solución óptima 2.  Recursivamente definir el valor de una solución óptima 3.  Calcular el valor de una solución óptima de un modo bottom-

up 4.  Construir una solución óptima a partir de la información

calculada

3

Page 4: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

4 4

Multiplicación de Matrices

�  Dadas 2 matrices: ¡  Apxq * Bqxr = Cpxr , A2x3 * B3x2 = C2x2 ¡  Se requieren p x q x r multiplicaciones

4

⎥⎦

⎤⎢⎣

++++

++++=

⎥⎥⎥

⎢⎢⎢

⎥⎦

⎤⎢⎣

126105841169574123102811139271

121110987

*654321

xxxxxxxxxxxx

Page 5: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

5

Multiplicación de Matrices en Cadena

�  Entrada: una cadena de n matrices <A1, A2, …, An> �  Salida: el producto de las matrices A1A2…An. �  Algoritmo

¡  Acomodar los paréntesis a manera de minimizar el número de productos escalares al multiplicar las matrices

¡  A1A2A3 se puede agrupar como: ÷  (A1A2)A3, ó como A1 (A2A3)

5

Page 6: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

6

Ejemplo

�  Si A1 es de 10 x 100, A2 de 100 x 5 y A3 de 5 x 50 à ¡  A1 (A2A3) à 100x5x50 + 10x100x50 = 25,000 + 50,000 =

75,000 multiplicaciones, (A2A3 es una matriz de 100x50) ¡  (A1A2)A3 à 10x100x5 + 10x5x 50 = 5,000 + 2,500 = 7,500

multiplicaciones (A1A2 es una matriz de 10x5)

Page 7: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Solución por Fuerza Bruta

�  Intentamos resolver el problema probando todas las maneras de agrupar con paréntesis

�  No es una solución eficiente �  Sea P(n) el número de formas diferentes de acomodar los

paréntesis en una secuencia de n matrices �  Tenemos la recurrencia:

�  (la secuencia de los números de catalán) �  P(n) = C(n-1), donde:

¡  El número de soluciones es exponencial en n ÷ à Resolver por programación dinámica

7

⎟⎟⎠

⎞⎜⎜⎝

⎛Ω=⎟⎟

⎞⎜⎜⎝

+= 2/3

4211)(

nnn

nnC

n

Page 8: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 1: Caracterizar la Estructura de la Solución Óptima (La estructura para agrupar los paréntesis)

�  Sea Ai..j la matriz resultante del producto AiAi+1…Aj donde i<j

�  Si se divide el producto entre Ak y Ak+1 para i ≤ k < j �  Se calcula por separado Ai..k y Ak+1..j

¡  La solución a cada subproblema debe ser óptima para que la solución de A1..An sea óptima

¡  Costo = Costo(Ai..k) + Costo(Ak+1..j) + Costo de multiplicar ambas matrices

�  Si hubiera otra forma de agrupar que nos de mejor costo entonces la anterior no sería la óptima

8

Page 9: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 1: Caracterizar la Estructura de la Solución Óptima (La estructura para agrupar los paréntesis)

9

�  Subestructura óptima: ¡  Construir soluciones óptimas para todos los subproblemas (así

trabaja programación dinámica) ÷ Por eso se llama subestructura óptima

Page 10: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 2. Definir una Solución Recursiva 10

�  Definimos costo de una solución óptima recursivamente en términos de la solución óptima a subproblemas

�  Subproblemas ¡  Problema de determinar el costo mínimo de agrupar las

matrices con paréntesis para AiAi+1…Aj para 1 ≤ i ≤ j ≤ n ¡  Sea m[i,j] el número mínimo de multiplicaciones escaleres

para calcular Ai..j

÷ El costo total para obtener A1..n sería m[1,n]

Page 11: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 2. Definir una Solución Recursiva 11

�  Definimos m[i,j] ¡  Si i = j, m[i,j] = 0 (problema trivial, una sóla matriz, no son necesarias

multiplicaciones de escalares) ¡  Si i < j, asumimos una división óptima entre Ak y Ak+1 (i ≤k<j)

m[i,j] = costo de calcular Ai..k + costo de calcular Ak+1..j + costo de calcular Ai..kAk+1..j

=m[i,k] + m[k+1,j]+pi-1pkpj

Sin embargo, no conocemos el valor de k e intentaremos todas las j-i posibilidades

¡  La definición recursiva para el mínimo costo de agrupar los paréntesis del producto AiAi+1…Aj es:

Page 12: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 3: Calculando los Costos Óptimos 12

�  Podemos utilizar la recurrencia anterior para calcular el costo mínimo de m[1,n] para multiplicar A1A2…An ¡  Pero el algoritmo todavía es exponencial (no mejor que fuerza

bruta) ¡  Algo bueno es que tenemos relativamente pocos subproblemas

÷ Uno para cada elección de i y j donde 1 ≤ i ≤ j ≤ n, ó

÷ El algoritmo puede encontrar subproblemas repetidos ¢  Traslape (Overlapping) ¢  Utilizamos método bottom-up tabular à paso 3

)(2

2nnn

Θ=+⎟⎟⎠

⎞⎜⎜⎝

Page 13: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 3: Calculando los Costos Óptimos 13

�  Método bottom-up ¡  Resolvemos subproblemas pequeños primero y los más

grandes serán más fáciles de resolver

�  Definimos 2 arreglos ¡  m[1..n, 1..n], para almacenar costos mínimos ¡  s[1..n, 1..n], para almacenar las divisiones óptimas, índice de k

÷ Para construir la solución óptima

Page 14: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 3: Calculando los Costos Óptimos 14

�  Tiempo de ejecución de O(n3) y requiere Θ(n2) memoria para almacenar m y s.

Page 15: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 3: Calculando los Costos Óptimos 15

Page 16: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 3: Calculando los Costos Óptimos 16

Page 17: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Paso 4. Construyendo la Solución Óptima 17

�  MATRIX-CHAIN-ORDER encuentra el número óptimo de multiplicaciones escalares

�  Construimos la solución óptima con la información en s[1..n, 1..n]

Page 18: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Elementos de la Programación Dinámica 18

�  Subestructura óptima ¡  Un problema con solución óptima que tiene sub-problemas

con soluciones óptimas ¡  Si se presenta esta propiedad, podría aplicar (probablemente)

programación dinámica

Page 19: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Elementos de la Programación Dinámica

�  Problemas traslapados ¡  El espacio de sub-problemas debe ser pequeño ¡  Un alg. recursivo los resolvería muchas veces

÷ Lo ideal (recursivo) sería sólo generar/resolver problemas nuevos ¡  Generalmente el número de sub-problemas diferentes es

polinomial en tamaño de la entrada

�  Divide y conquista genera nuevos problemas cada paso de la recursión

19

Page 20: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Traslape en Multiplicación en Cadena de Matrices 20

Page 21: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Algoritmo Recursivo para Multiplicación de Matrices en Cadena

21

Page 22: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Análisis de la Solución Recursiva 22

∑ ∑

∑ ∑ ∑

=

=

=

=

=

=

=

=

+Θ=

++−Θ+Θ=

−+Θ+Θ=

Θ+−++Θ=

>

=

⎪⎩

⎪⎨⎧

Θ+−++Θ

Θ=

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

)(2)(

)()()1()1(

)()()1()1(

))1()()(()1()(

11

))1()()(()1(

)1()(

n

k

n

k

n

k

n

k

n

k

n

k

n

k

n

k

kTn

kTkTn

knTkT

knTkTnT

nn

knTkTnT

Page 23: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Análisis de la Solución Recursiva

�  Por el método de substitución, probando que T(n)=Ω(2n) ¡  Mostrar: T(n) = Ω(2n) ≥ c2n

¡  Asumiendo: T(k) ≥ c2k para k < n ¡  Si 4c-Θ(n) ≤ 0, ó c ≤ Θ(n)/4

÷  (valor largo de n)

¡  Entonces, T(n) = Ω(2n) ¡  T(n) sigue siendo exponencial!

23

n

n

n

n

k

k

n

k

k

n

k

k

cccn

cn

cn

cn

cnnT

2422)()12(4)(

24)(

22)(

22)()(

1

2

0

2

0

1

1

1

−+Θ=

−+Θ=

+Θ=

+Θ=

+Θ≥

=

=

+

=

Page 24: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Memoization

�  Variación de programación dinámica ¡  Estrategia top-down, con el algoritmo recursivo

÷ Utiliza una tabla con soluciones de subproblemas

24

Page 25: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Memoization para Multiplicación de Matrices en Cadena

�  Tiempo: ¡  O(n3)

¡  Mejor que Ω(2n)

�  Memoria: ¡  O(n2)

25

Page 26: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Subsecuencia Común más Larga Longest Common Subsequence (LCS)

�  Una subsecuencia de otra secuencia es la misma secuencia quitándole cero o más elementos.

�  Dada la secuencia X = <x1, x2, …, xm>, otra secuencia Z = <z1, z2, …, zk> es una subsecuencia de X si existe una secuencia creciente <i1, i2, …, ik> (no necesariamente contiguos) de índices de X tal que para cada j = 1,2, …, k, tenemos que xij = zj.

26

Page 27: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Ejemplos de Subsecuencias Comunes

�  Z = <B, C, D, B> es subsecuencia de X = <A, B, C, B, D, A, B>, con la secuencia de índices <2, 3, 5, 7>

�  Dadas las secuencias X y Y, Z es una secuencia común de X e Y si Z es una subsecuencia de ambas. ¡  X = <A, B, C, B, D, A, B>, Y = <B, D, C, A, B, A>, la secuencia

<B, C, A> es una subsecuencia común de X e Y. ¡  La secuencia <B, C, B, A> es una LCS de X e Y, igual que <B,

D, A, B>

27

Page 28: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Problema LCS

�  Dadas dos secuencias X e Y, encontramos la subsecuencia común máxima de X e Y.

28

Page 29: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Problema LCS

�  Solución por fuerza bruta ¡  2m subsecuencias de X a buscar en Y

÷ Cada secuencia es un conjunto de índices {1, 2, …, m} ¡  Tiempo exponencial ¡  No práctico para secuencias largas

29

Page 30: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

LCS con Programación Dinámica

�  Subestructura óptima ¡  Definir

÷ Dado X = <x1, …, xm>, el iésimo prefijo de X, i = 0, …, m, es Xi = <x1, …, xi>. X0 está vacío.

¡  Teorema 16.1 ÷ Sean X = <x1, …, xm> y Y = <y1, …, yn> secuencias y Z = <z1, …, zk>

sea cualquier LCS de X y Y.

1.  Si xm = yn, entonces zk = xm = yn y Zk-1 es una LCS de Xm-1 y Yn-1 2.  Si xm ≠ yn, entonces zk ≠ xm implica que Z es una LCS de Xm-1 y Y. 3.  Si xm ≠ yn, entonces zk ≠ ym implica que Z es una LCS de X y Yn-1

÷ Por tanto, el problema de LCS tiene subestructura óptima

30

Page 31: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

LCS con Programación Dinámica

�  Traslape de subproblemas ¡  Sea c[i,j] la longitud de una LCS en las secuencias Xi y Yj

�  La subestructura óptima del problema LCS nos lleva a la sig. fórmula recursiva

31

LCS(X,Y)

LCS(X,Yn-1) LCS(Xm-1,Y) LCS(Xm-1,Yn-1)

LCS(X,Yn-2) LCS(Xm-1,Yn-1) LCS(Xm-1,Yn-2) LCS(Xm-1,Yn-1) LCS(Xm-2,Y) LCS(Xm-2,Yn-1)

Page 32: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

LCS con Programación Dinámica

�  Algoritmo recursivo exponencial para calcular longitud de una LCS de dos secuencias ¡  Pero sólo hay m x n subproblemas distintos

�  Solución ¡  Utilizar programación dinámica

÷ Procedimiento bottom up ÷ En c[i,j] guardamos la longitud del arreglo ÷ En b[i,j] guardamos el caso relacionando xi, yj, y zk

32

Page 33: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Pseudocódigo LCS 33

LCS-LENGTH tiene un orden de O(mn)

Page 34: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Construcción de una LCS 34

•  PRINT-LCS tiene un orden de O(m + n) •  Para construir la LCS

•  Iniciar en b[m,n] •  Seguir las flechas •  Flecha ë indica xi = yj, es un

elemento de la LCS •  Llamado: LCS(b,X,length[X], length[Y])

Page 35: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Triangulación Óptima de Polígono Optimal Polygon Triangulation

�  Un polígono se define como P = <v0, v1, …, vn-1>

35

v0

v1

v2

v3 v4

v5

v6

v0

v1

v2

v3 v4

v5

v6

Page 36: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Triangulación Óptima de Polígono Optimal Polygon Triangulation

�  Un polígono es convexo si un segmento de línea entre dos puntos, o en su interior, caen ya sea en sus bordes o en su interior.

36

Polígono no-convexo

Page 37: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Triangulación Óptima de Polígono Optimal Polygon Triangulation

�  Si vi y vj no son adyacentes, entonces el segmento vivj es una cuerda

�  Una triangulación es un conjunto de cuerdas T que divide P en triángulos disjuntos ¡  Las cuerdas no se intersectan ¡  T es maximal (cada cuerda ∉ T intersecta una cuerda ∈ T)

37

v0 v1

v2

v3 v4

v5

v6

Page 38: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Triangulación Óptima de Polígono Optimal Polygon Triangulation

�  Problema ¡  Dados

÷ P =<vo, v1, …, vn-1> ÷ Una función de pesos w sobre triángulos formada por P y T

¡  Encontrar T que minimice la suma de pesos ¡  Example: w(Δvivjvk) = |vivj| + |vjvk| + |vkvi| (dist. Euclidiana) ¡  Este problema se puede reducir al problema de multiplicación

de matrices en cadena

38

Page 39: DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS ... - …jagonzalez/ADA/ProgDin.pdf · 2 Introducción a Programación Dinámica ! Parecido a divide y conquista ! Resuelve problemas combinando

Triangulación Óptima de Polígono Optimal Polygon Triangulation

�  Subestructura óptima ¡  T tiene Δv0vkvn

¡  w(T) = w(Δv0vkvn) + m[0,k] + m[k + 1, n] ¡  Las dos soluciones a los subproblemas deben ser óptimas o

w(T) no lo sería. ¡  El algoritmo requiere Θ(n3) en tiempo y Θ(n2) en memoria

39