algoritmos c5-diap

66
Dra. Laura Cruz Reyes Instituto Tecnológico de Ciudad Madero México Programación Dinámica

Upload: sherlockgomez

Post on 06-Jul-2015

735 views

Category:

Technology


0 download

DESCRIPTION

Programación dinámica

TRANSCRIPT

Page 1: Algoritmos c5-diap

Dra. Laura Cruz ReyesInstituto Tecnológico de Ciudad Madero

México

Programación Dinámica

Page 2: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Programación dinámica vs. divide y vencerás

Divide y vencerás: Divide el problema en suproblemas.Integra las soluciones parciales para lograr una solución final.Repite procesamiento en subproblemas idénticos

Programación dinámica: Divide el problema en suproblemas. Integra las soluciones parciales para lograr una solución final.Durante el proceso de división-integración guarda la solución de los subproblemas encontrados para evitar resolverlos cuando los vuelva a encontrar.

Page 3: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Divide y vencerás

• Si un problema es demasiado grande para resolverlo de una vez, se descompone en varias partes más fáciles de resolver.

• Más formalmente, dado un problema a resolver planteado en términos de una entrada de tamañon, la técnica de divide y vencerás parte la entrada en k subproblemas, 1< k< n.

• Estos subproblemas se resuelven independientemente y después se combinan sus soluciones parciales para obtener la solución del problema original.

Page 4: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Aplicaciones de divide y vencerás

Ordenamiento• Mezcla• Quicksort• Heap

Búsqueda• Búsqueda binaria

Page 5: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Programación dinámica

Bajo el principio de divide y vencerás se divide un problema en varios problemas más pequeños que se pueden resolver independientemente.

En la programación dinámica, aplica cuando los subproblemas no son independienes. Se resuelven todos una sóla vez y se almacenan las respuestas para dar solución a problemas mayores.

Page 6: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Programación dinámica

Un problema puede ser resuelto por programación dinámica si cumple el principio de Optimalidad:

Cualquier decisión que suponga encontrar la mejor forma de resolver un pequeño subproblema es también válida cuando el subproblema pasa a ser una parte de un problema mayor

Page 7: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Programación dinámica

Dos dificultades que pueden surgir en la programación dinámica son las siguientes:

Puede que no siempre sea posible combinar las soluciones de dos problemas pequeños para obtener la de uno mayor.El número de subproblemas a resolver puede ser inaceptablemente grande.

Page 8: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Pasos de la programación dinámica

El desarrollo de un algoritmo de programación dinámica puede realizarse en 4 pasos.

1. Caracterizar la estructura de una solución óptima.2. Definir una estructura para guardar los elementos de

la solución óptima.3. Definir recursivamente el valor de una solución óptima

y su estructura de almacenamiento.4. Diseñar un algoritmo para obtener la solución óptima

y su valor usando abajo-arriba (button-up).5. Diseñar un algoritmo para extraer la solución óptima a

partir de información previamente calculada.

Page 9: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Aplicaciones de la programación dinámica

En los siguientes problemas la programación dinámica es más eficaz que la técnica de fuerza bruta. Con esta última, el número de posibles soluciones a evaluar es exponencial.

Problema del orden de multiplicación de matricesProblema del cambio de monedaProblema de la mochila 0-1Problema de la subsecuencia común más larga

Page 10: Algoritmos c5-diap

Problema del orden de multiplicación de matrices

Page 11: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Multiplicación de matricesAlgoritmo multiplicaciónMatrices

Entradas: Matrices A y B, y enteros m, n, y p, que indican que A es una matriz de m × n y B es una matriz de n × p

Salidas: Matriz C, una matriz de m × p. C se pasa al algoritmo, el cual la llena.

multMat(A,B,C,m,n,p)1. for (i =0; i<m; i++)2. for (j =0; j<p; j++)3. cij = 04. for (k =0; k<n; k++)5. cij += aik bkj

Page 12: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Número de multiplicaciones

Si se desea obtener la evaluación del producto de n matrices

A = A1 x A2 x.....x An

Donde Ai es una matriz con ri-1 renglones y ricolumnas. El orden de multiplicación de las matrices afecta al número total de las operaciones requeridas para evaluar A.

Page 13: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Número de multiplicacionesEn el algoritmo clásico de multiplicación de una matriz m x npor una matriz n x p, el número de multiplicaciones es mnp.

Sea el siguiente producto:A = A1 x A2 x A3 x A4

[10 x 20] [20 x 50] [50 x 1] [1 x 100]

El orden de evaluación A1 x (A2 x (A3 x A4)) requiere 125,000 operaciones.

El orden de evaluación (A1 x (A2 x A3)) x A4 requiere 2200 operaciones.

Page 14: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

A = A1 x A2 x A3 x A4 [10 x 20] [20 x 50] [50 x 1] [1 x 100]

El orden de evaluación (A1 x (A2 x A3)) x A4 requiere 2200 operaciones

(A2 x A3) con dimensiones [20 x 50] [50 x 1] respectivamenteRequiere 20*50*1=1000 multiplicacionesGenera la matriz A2A3 con dimensiones [20 x 1]

(A1 x A2A3) con dimensiones [10 x 20] [20 x 1] respectivamenteRequiere 10*20*1=200 multiplicaciones Genera la matriz A1A2A3 con dimensiones [10 x 1]

(A1A2A3 x A4) con dimensiones [10 x 1] [1 x 100] respectivamenteRequiere 10*1*100=1000 multiplicaciones Genera la matriz A1A2A3A4 con dimensiones [10 x 100]

Total de multiplicaciones = 1000+200+1000=2200

Número de multiplicaciones

Page 15: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Problema del orden de multiplicación de matrices

Dada una cadena ‹A1, A2,...An› de n matrices, donde i=1,2,...,n, Ai tiene dimensiones ri-1 x ri .

Se busca poner paréntesis completamente al producto A1, A2,...An de manera que minimice el número de operaciones escalares.

Page 16: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Sea el siguiente producto:A = A1 x A2 x A3 x A4

[10 x 20] [20 x 50] [50 x 1] [1 x 100]

Solución óptima: colocación de paréntesis con menor costo( ((A1(A2A3)) ((A4A5) A6))

Valor de la solución óptima: mínimo número de multiplicaciones2200 multiplicaciones

Producto obtenido con el menor número de multiplicacionesA=( ((A1(A2A3)) ((A4A5) A6))

Solución óptima y su valor

Page 17: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

División del problema en subproblemas: Para colocar paréntesis, dada una cadena de matrices Ai Ai+1 … Aj se divide el producto en términos de k, con i ≤ k< j, quedando dos subcadenas: (A1 … Ak) y (Ak+1… An )

Paso 1: Caracterizar la estructura de una solución óptima

1..4

1..1 2..4

2..3 4..42..2

1..2

2..21..1

3..4

4..43..3

1..3

1..2 3..32..31..1

4..4

2..2 3..3 2..2 3..3

k=1 k=2 k=3

k=2 k=3 k=1

k=2 k=2

3..4

4..43..3k=3

k=1 k=3 k=2

La estructura debe permitir generar soluciones alternas, entre ellas la óptima

1..1 k=12..2

Page 18: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

A1 x A2 x A3 x A4k=3

(A1 x A2 x A3) x (A4 )k=1

((A1 ) x (A2 x A3)) x (A4 )k=2

((A1 ) x ((A2 ) x (A3 ))) x (A4 )

1..4

1..1 2..4

2..3 4..42..2

1..2

2..21..1

3..4

4..43..3

1..3

1..2 3..32..31..1

4..4

2..2 3..3 2..2 3..3

k=1 k=2 k=3

k=2 k=3 k=1

k=2 k=2

3..4

4..43..3k=3

k=1 k=3 k=2

1..1 k=12..2

Paso 1: Caracterizar la estructura de una solución óptima

Page 19: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Paso 2: Definir una estructura para guardar los elementos de la solución óptima

Pare construir la solución óptima, se define una matriz s[i,j], la cual contendrá el valor de k que logra una colocación óptima de paréntesis.

s[1,4]=k_óptima=3 ⇒ (A1 x A2 x A3) x (A4 );s[1,3]=k_óptima=1 ⇒ ((A1 ) x (A2 x A3)) x (A4 ); s[2,3]=k_óptima=2 ⇒ ((A1 ) x ((A2 ) x (A3 ))) x (A4 );

1..4

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

4..4

1..3

1..2 3..32..31..1

4..4

2..2 3..3

k=1 k=2 k=3

k=1

k=2

k=2

Page 20: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Paso 3: Definir recursivamente el valorde una solución óptima

Para calcular el número de multiplicaciones de una solución, se define un arreglo mm[[i,ji,j]] el cual contendra el costo mínimo de la subcadena AAii … AAjj usando el punto de corte óptimo k:

Ejemplo: Si k==22,, m[1,4] = m[1,2]+m[3,4]+r0r2r4

Ejemplo: Si k==33,, m[1,4] = m[1,3]+m[4,4]+r0r3r4

1..4

1..2 3..4k=2

1..4

1..3 4..4k=3

Page 21: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Paso 3: Definir recursivamente el valorde una solución óptima

Sea mm[[i,ji,j]] un arreglo que almacena el costo mínimo de la subcadena AAii … AAjj usando el punto de corte óptimo k. Por lo tanto, la tabla se llena con la siguiente regla:

Si ii == j== j entonces mm[[i,ji,j]] = 0, quiere decir que la cadena es de una sola matriz así que no requiere de multiplicaciones escalares.

Si i < ji < j entonces mm[[i,ji,j]] = min(mm[[i,ki,k]+ ]+ mm[[kk++11,j,j]] +ri-1rkrj), ii≤≤k<jk<j

• El término mm[[i,ki,k]] es el costo mínimo de evaluar A′ = Ai x Ai+1 x...x Ak• El término mm[[kk++11,j,j]] es el costo mínimo de evaluar A′′ = Ak + 1 x Ak+2 x...x Aj• El tercer término es el costo de multiplicar A′ x A′′ .

Page 22: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Tamaño subcadena/nivel de procesamiento

1 m11= 0 m22= 0 m33= 0 m44= 02 m12= 10,000 m23= 1000 m34= 50003 m13= 1200 m24= 30004 m14= 2200

Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor

Abajo(button)

Arriba(up)

1..4

1..1 2..4

2..3 4..42..2

1..2

2..21..1

3..4

4..43..3

1..3

1..2 3..32..31..1

4..4

2..2 3..3 2..2 3..3

K=1 K=2 K=3

K=2 K=3 K=1

K=2 K=2

3..4

4..43..3K=3

K=1 K=3 K=2

1..1 K=12..2

Page 23: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

0

0

0

0

4

3

2

1

Tamaño 1

Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor

Valor de solución óptima:

Matriz de costos mínimos m[i,j]

Solución óptima:

Matriz de cortes óptimos ks[i,j]

Page 24: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

0

50000

10000

100000

4

33

22

11

Tamaño 2Tamaño 1

Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor

Valor de solución óptima:

Matriz de costos mínimos m[i,j]

Solución óptima:

Matriz de cortes óptimos ks[i,j]

Page 25: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

0

50000

300010000

1200100000

4

33

222

111

Tamaño 2

Tamaño 3

Tamaño 1

Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor

Valor de solución óptima:

Matriz de costos mínimos m[i,j]

Solución óptima:

Matriz de cortes óptimos ks[i,j]

Page 26: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

0

50000

300010000

22001200100000

4

33

222

3111

Tamaño 2

Tamaño 3

Tamaño 4

Tamaño 1

Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor

Valor de solución óptima:

Matriz de costos mínimos m[i,j]

Solución óptima:

Matriz de cortes óptimos ks[i,j]

Page 27: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo para obtener la solución óptima y su valor

Algoritmo ordenCadenaMatrices(R)Entradas:R es el vector de dimensiones de una cadena de n matrices, la

matriz i tiene dimensiones ri-1 x riSalidas: M es la matriz de costos mínimos, expresado en número de multiplicaciones

S es la matriz de puntos-de-corte óptimos

1 n ← lenght(R)-12 for i = 1 to n do mii= 0 /*costo de cadenas de tamaño 1*/3 for l = 2 to n do /*tamaño de la cadena*/4 for i=1 to n–l+1 do /*inicio de la cadena*/5 j ← i+l–1 /*fin de la cadena*/6 mij ← ∞7 for k = i to j-1 do /*punto-corte de cadena*/

8 q ← mik + mk+1,j + ri - 1* rk * rj9 if q < mij10 then mij ← q /* valor: mejor costo de cadena*/11 sij ← k /*solución: mejor punto-corte de cadena*/

Page 28: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Existen solamente n(n-1)/2 problemas diferentes (cadenas), y la programación dinámica resuelve cada problema exactamente una vez*, por lo tanto

T(n)= n2 /2= θ(n2)

* No se están contabilizando las evaluaciones de un mismo problema con diferentes valores de k

Complejidad del algoritmo

Page 29: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Complejidad del algoritmo

211 13

2 1 1 2 1 1( ) 1 1 ( )

i ljn n l n n l

l i k l i kT n n n

+ −−− + − +

= = = = = =

= + = = Θ∑ ∑ ∑ ∑ ∑ ∑

Operación básica: número de subproblemas evaluados*

T(n)=subproblemas de tamaño 1+ suproblemas de tamaños 2 a n

* Si se están contabilizando las evaluaciones de un mismo problema con diferentes valores de k

Page 30: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Matriz s[i,j]

4

33

222

3111

Solución óptima: (A1 x (A2 x A3)) x A4

A1…A4: s14=3(A1x A2xA3)x (A4)

A1…A3: s13=1 A4…A4: s44=4(A1)x(A2x A3) (A4)

A1…A1: s11=1 A2…A3: s23=2(A!) (A2)x(A3)

A2…A2: s22=2 A3…A3: s33=3(A2) (A3)

Paso 5: Diseñar un algoritmo para extraer la solución óptima

Page 31: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo para calcular un productousando el mínimo número de operaciones

Algoritmo multiplicaCadenaMatrices(A,S,i,j)Entradas: A es una cadena de matrices

S es una matriz que contiene la solución óptimai,j delimitan una subcadena contenida en A

Salidas: producto de la cadena de matrices

1 if j > i2 then X ← multiplicaCadenaMatrices(A,S,i,sij)3 Y ← multiplicaCadenaMatrices(A,S,sij+1,j)4 return multiplicaMatrix(X,Y)5 else return Ai

Page 32: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo multiplicaCadenaMatrices(A,S,1,6)if 6>1

X = multiplicaCadenaMatrices(A,S,i=1,s1,6=3) R1Y = multiplicaCadenaMatrices(A,S,s1,6+1=4,j=6) R3

return (multiplicar (X, Y))

Algoritmo para calcular un productousando el mínimo número de operaciones

Page 33: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

R1R1Algoritmo multiplicaCadenaMatrices(A,S,1,3)

if 3>1

X = multiplicaCadenaMatrices(A,S,1,1) A1

Y = multiplicaCadenaMatrices(A,S,2,3) R2

return (multiplicar (X,Y))

Algoritmo para calcular un productousando el mínimo número de operaciones

Page 34: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

R2R2Algoritmo multiplicaCadenaMatrices(A,S,2,3)

if 3>2

X = multiplicaCadenaMatrices(A,S,2,2) A2

Y = multiplicaCadenaMatrices (A,S,3,3) A3

return (multiplicar (X,Y)) (A2A3)

Algoritmo para calcular un productousando el mínimo número de operaciones

Page 35: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

R1R1Algoritmo multiplicaCadenaMatrices(A,S,1,3)

if 3>1

X = multiplicaCadenaMatrices(A,S,1,1) A1

Y = multiplicaCadenaMatrices(A,S,2,3) (A2A3)return (multiplicar (X,Y)) (A1(A2A3))

Algoritmo para calcular un productousando el mínimo número de operaciones

Page 36: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo multiplicaCadenaMatrices(A,S,1,6)if 6>1

X = multiplicaCadenaMatrices(A,S,1,3)(A1(A2A3))Y = multiplicaCadenaMatrices(A,S,4,6)R3return (multiplicar (X,Y))

Algoritmo para calcular un productousando el mínimo número de operaciones

Page 37: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

R3Algoritmo multiplicaCadenaMatrices(A,S,4,6)

if 6>4

X = multiplicaCadenaMatrices(A,S,4,5) R4Y = multiplicaCadenaMatrices(A,S,6,6) A6return (multiplicar (X,Y))

Algoritmo para calcular un productousando el mínimo número de operaciones

Page 38: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

R4Algoritmo multiplicaCadenaMatrices(A,S,4,5)

if 5>4

X = multiplicaCadenaMatrices (A,S,4,4) A4

Y = multiplicaCadenaMatrices (A,S,5,5) A5

return (multiplicar (X,Y)) (A4A5)

Algoritmo para calcular un productousando el mínimo número de operaciones

Page 39: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

R3Algoritmo multiplicaCadenaMatrices(A,S,4,6)

if 6>4

X = multiplicaCadenaMatrices (A,S,4,5)A4A5

Y = multiplicaCadenaMatrices (A,S,6,6) A6

return (multiplicar (X,Y)) ((A4A5)A6)

Algoritmo para calcular un productousando el mínimo número de operaciones

Page 40: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo multiplicaCadenaMatrices(A,S,1,6)if 6>1

X = multiplicaCadenaMatrices(A,S,1,3) (A1(A2A3))Y = multiplicaCadenaMatrices(A,S,4,6) ((A4A5)A6)return (multiplicar(X Y))((A1(A2A3))((A4A5)A6)

Algoritmo para calcular un productousando el mínimo número de operaciones

Page 41: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo para obtener una cadena de matrices con paréntesis

Algoritmo parentizaCadenaMatrices(A,S,i,j)EntradaS: A es una cadena de matrices sin paréntesisSalidas: A es la cadena de matrices con paréntesis

12345

Page 42: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo recursivo para obtener el costoóptimo de una multiplicación de matrices

Algoritmo ordenCadenaMatricesRecursivo(R,i,j)Entradas:R es el vector de dimensiones de una cadena de n matrices, la

matriz i tiene dimensiones ri-1 x riSalidas: M es la matriz de costos mínimos

1 if i = j then2 return 03 mij= ∞ /*inicializa costo cadena actual*/4 for k = i to j-1 do /*punto-corte cadena*/

5 q ← ordenCadenaMatricesRecursivo(R,i,k)+ordenCadenaMatricesRecursivo(R,k+1,j)+ri-1*rk*rj

6 if q < mij7 then mij ← q8 return mij

Page 43: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Complejidad del algoritmo recursivo

1

1

1

0 para 1( )

1 ( ( ) ( ) 1) para 1

0 para 1( )

2 ( ) para 1

n

k

n

i

nT n

T k T n k n

nT n

T i n n

=

=

=⎧⎪= ⎨ + + − + >⎪⎩

==

+ >

1

1

1

( ) 2( ) (2 )

n

n

T nT n

⎧⎪⎨⎪⎩

= Ω

El número de subproblemas evaluados es al menos exponencial en n

Page 44: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Versión memorizada del programa recursivo

Variación de la programación dinámica quecombina el enfoque natural de los algoritmosrecursivos con la eficiencia de la programacióndinámica.Se mantiene una tabla con soluciones de subproblemas, pero el llenado de la tabla se realiza bajo el control de un algoritmo recursivo. Cada entrada de la tabla tiene una bandera quese prende cuando esta ha sido calculada.

Page 45: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Versión memorizada del programa recursivo

LOOKUP-CHAIN(p,i,j)1 if i = j2 then return 03 m[i,j] ← ∞4 for k ← 1 to j -15 do q ← LOOKUP-CHAIN

(p,i,k)+ LOOKUP-CHAIN

(p,k+1,j) + pi-1pkpj

6 if q < m[i,j]7 then m[i,j] ← q8 return m[i,j]

MEMOIZED-MATRIX-CHAIN(p)1 n ← length[p] - 12 for i ← 1 to n3 do for j ← 1 to n4 do m[i,j] ← ∞5 return LOOKUP-CHAIN(p,1,n)

Page 46: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Existen solamente n(n-1)/2 problemas diferentes (cadenas), y el algoritmo recursivo-memorizado resuelve cada problema exactamente una vez, por lo tanto:

T(n)= θ(n2)

Sin embargo, la versión pura es más eficiente por un factor constante debido que no hay sobrecarga inherente a la recursión.

Complejidad del algoritmo recursivo-memorizado

Page 47: Algoritmos c5-diap

Problema del cambio de moneda

Page 48: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Problema del cambio de moneda

Dada una divisa (unidad monetaria de un país) con monedas de u1, u2,…,un, y Cunidades que deben ser devueltas a un cliente.

Se busca el número mínimo de monedasque se necesitan para devolver las Cunidades de cambio.

Page 49: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Árbol de problemas

C=10U=1,5, 10, 15, 21,25

m=1S=10

u=1C=5

u=5C=0

u=1C=4

u=1C=3

u=1C=2

u=1C=1

u=1C=0

u=1C=9

u=1C=8

u=1C=7

u=1C=6

C=10

u=5C=5

u=10C=0

u=5C=0

m=5

m=4

m=3

m=2

m=5

m=4

m=3

m=2

m=1

m=1

m=1

m=1

m=6

m=2

Page 50: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Árbol de problemas

C=7U=1,5, 10, 15, 21,25

m=3S=1,1,5

m=1

C = 7

u=1 u=5

C=6 C=2

u=1 u=5

C=5 C=1

u=1 u=5 u=1

u=1

C=4 C=0

C=3

u=1

C=2

u=1

C=1

u=1

u=1

C=1

u=1

m=1

m=2

m=3

m=1

m=2

m=2

m=3

m=4

m=1

m=3

m=2

C=0 C=0

C=0

m=5

Page 51: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Sea mm[[CC]] un arreglo que almacena el menor número de monedas para devolver la cantidad C usando una moneda óptima u ∈ U. Por lo tanto, la tabla se llena con la siguiente regla:

Si C C = 0 entonces mm[[CC]] = 0, quiere decir que no se requiere ninguna moneda para devolver una cantidad igual a cero.

Si C > C > 00 entonces mm[[CC]] = min(1+ mm[[CC--uu]), ]), ∀ ∀ u ∈ U, quiere decir que se utilizará una moneda óptima de denominación u más las monedas requeridas para devolver una cantidad igual a C-u.

Valor de una solución óptima

Page 52: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

El tiempo de ejecución depende del número de monedad con distintos valores n y de la cantidad de cambio que queremos devolver C, por lo tanto:

T(n)= nC

Complejidad del algoritmo

Page 53: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo para cambio de monedas

Consultar el libro de Mark Allen (pag. 201)

Page 54: Algoritmos c5-diap

Problema de la mochila 0-1

Page 55: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

El Problema de la Mochila 0-1Se tienen n objetos, cada uno con un peso pi, y una mochila con una capacidad C. Si se mete un objeto i en la mochila, entonces se consigue un beneficio bi. El objetivo es llenar la mochila de manera que se maximice el beneficio total y no se exceda la capacidad de la mochila.

Para la asignación de los objetos se utiliza un vector X de nelementos xi, caracterizado porque cada elemento xi sólo puede tomar los valores cero o uno para indicar si el objeto se mete o no a la mochila.

Page 56: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

El Problema de la Mochila 0-1Dada una mochila con capacidad C y un conjunto de n objetos; cada objeto i, 1≤ i≤n, tiene un peso pi > 0 y un beneficio b i > 0.

Se busca una asignación en X (xi=1 si el objeto se lleva, xi=0 en caso contrario) de objetos a la mochila que obtenga el máximo beneficio:

n

maximizar ∑ bixi,i=1

y satisfaga la condición:n

∑ p i x i ≤ Ci=1

Page 57: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

El Problema de la Mochila 0-1

Un caso particular del problema de la mochila 0-1 es:n=3, C=15, (b1,b2,b3) = (38, 40, 24) y (p1,p2,p3) = (9,6,5).

Una posible solución es: (x1,x2,x3) = (0,1,1), con beneficio 64.

Para este caso, la solución óptima es: (x1,x2,x3) = (1,1,0) con beneficio 78.

Page 58: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Valor de una solución óptima

Sea mm[[i,ji,j]] un arreglo que almacena el valor máximo de los objetos que podemos transportar si el límite de peso es j, con 0≤j ≤ C, y si solamente incluimos los objetos numerados desde 1 hasta el i, con 1≤i ≤n. Por tanto, la solución se puede encontrar en mm[[n,Cn,C]. La tabla se llena con la regla:

Si j=j=00 entonces mm[[ii,,0]0] = 0, quiere decir que ningún objeto se puede acomodar en una mochila de capacidad cero.

Si j>j>00 entonces mm[[i,ji,j]] = max (mm[[ii--11, j, j], ], mm[[ii--11, j, j--pi] + ] + bi), ), quiere decir que se evalúa la opción de no añadir el objeto i a la carga contra la opción de incluirlo, lo cual tiene como efecto incrementar el valor de la carga en bi, y reducir la capacidad disponible en pi.

Page 59: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Valor de una solución óptima

capacidad de la mochila C=11Peso de los objetos P=1,2,5,6,7Beneficio de los objetos B=1,6,18,22,28

5

4

3

2

1

11109876543210

4035342928221877610

4029292824221877610

2525252524191877610

777777777610

111111111110

Page 60: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

El tiempo de ejecución depende del número de objetos por acomodar n y de la capacidad de la mochila C, por lo tanto:

T(n)= nC

Complejidad del algoritmo

Page 61: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo para la mochila 0-1

Consultar el libro de Brassard et.al(pag. 201)

Page 62: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

El Problema de la Mochila 0-1 con repetición

Una variante del problema de la mochila 0-1 admite objetos repetidos en la mochila. Para representar el número de objetos repetidos se utiliza el vector r.

n=5, C=17, (b1,b2,b3,b4,b5) = (4,5,10,11,13) (p1,p2,p3,p4,p5) = (3,4,7,8,9).

La solución óptima es:(x1,x2,x3,x4,x5) = (1,0,1,0,0) y(r1,r2,r3,r4,r5) = (1,0,2,0,0), con beneficio 24.

Page 63: Algoritmos c5-diap

Problema de la subsecuencia común

más larga

Page 64: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

El problema de la subsecuencia común más larga

Dada una secuencia X = ‹x1,x2,...xm›, otra secuencia Z=‹z1,z2,...zk› es una subsecuencia of Xsi existe una secuencia de índices ‹i1,i2,...ik› de Xque incrementa estrictamente tal que para todo j=1,2,...,k, we have xij = zj.

Por ejemplo, Z=<B,C,D,B> es una subsecuencia de X=<A,B,C,B,D,A,B> con la correspondiente secuencia de índices <2,3,5,7>.

Page 65: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Algoritmo para subsecuenciacomún más larga

Consultar el libro de Cormen et. al (pag. 353)

Page 66: Algoritmos c5-diap

Laura Cruz Reyes Programación Dinámica

Bibliografía

Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. Introduction to Algorithms. MIT Press, 1990.

Sara Basse, Allen Van Gelder. Algoritmos Computacionales: Introducción al análisis y diseño. 3ª. edición. Addison Wesley, 2002.

Mark Allen Weiss. Estructura de Datos en Java. Addison Weasley, 2000.

Gilles Brassard y Paul Bratley. Fundamentos de Algoritmia. Prentice Hall, 1997.