Está en la página 1de 66

Programacin Dinmica

Dra. Laura Cruz Reyes Instituto Tecnolgico de Ciudad Madero Mxico

Programacin dinmica vs. divide y vencers


Divide y vencers:
Divide el problema en suproblemas. Integra las soluciones parciales para lograr una solucin final. Repite procesamiento en subproblemas idnticos

Programacin dinmica:
Divide el problema en suproblemas. Integra las soluciones parciales para lograr una solucin final. Durante el proceso de divisin-integracin guarda la solucin de los subproblemas encontrados para evitar resolverlos cuando los vuelva a encontrar.

Laura Cruz Reyes

Programacin Dinmica

Divide y vencers
Si un problema es demasiado grande para resolverlo de una vez, se descompone en varias partes ms fciles de resolver. Ms formalmente, dado un problema a resolver planteado en trminos de una entrada de tamao n, la tcnica de divide y vencers parte la entrada en k subproblemas, 1< k< n. Estos subproblemas se resuelven independientemente y despus se combinan sus soluciones parciales para obtener la solucin del problema original.
Laura Cruz Reyes Programacin Dinmica

Aplicaciones de divide y vencers


Ordenamiento Mezcla Quicksort Heap Bsqueda Bsqueda binaria

Laura Cruz Reyes

Programacin Dinmica

Programacin dinmica
Bajo el principio de divide y vencers se divide un problema en varios problemas ms pequeos que se pueden resolver independientemente. En la programacin dinmica, aplica cuando los subproblemas no son independienes. Se resuelven todos una sla vez y se almacenan las respuestas para dar solucin a problemas mayores.
Laura Cruz Reyes Programacin Dinmica

Programacin dinmica
Un problema puede ser resuelto por programacin dinmica si cumple el principio de Optimalidad:
Cualquier decisin que suponga encontrar la mejor forma de resolver un pequeo subproblema es tambin vlida cuando el subproblema pasa a ser una parte de un problema mayor
Laura Cruz Reyes Programacin Dinmica

Programacin dinmica
Dos dificultades que pueden surgir en la programacin dinmica son las siguientes:
Puede que no siempre sea posible combinar las soluciones de dos problemas pequeos para obtener la de uno mayor. El nmero de subproblemas a resolver puede ser inaceptablemente grande.
Laura Cruz Reyes Programacin Dinmica

Pasos de la programacin dinmica


El desarrollo de un algoritmo de programacin dinmica puede realizarse en 4 pasos. 1. Caracterizar la estructura de una solucin ptima. 2. Definir una estructura para guardar los elementos de la solucin ptima. 3. Definir recursivamente el valor de una solucin ptima y su estructura de almacenamiento. 4. Disear un algoritmo para obtener la solucin ptima y su valor usando abajo-arriba (button-up). 5. Disear un algoritmo para extraer la solucin ptima a partir de informacin previamente calculada.
Laura Cruz Reyes Programacin Dinmica

Aplicaciones de la programacin dinmica


En los siguientes problemas la programacin dinmica es ms eficaz que la tcnica de fuerza bruta. Con esta ltima, el nmero de posibles soluciones a evaluar es exponencial.
Problema Problema Problema Problema
Laura Cruz Reyes

del orden de multiplicacin de matrices del cambio de moneda de la mochila 0-1 de la subsecuencia comn ms larga
Programacin Dinmica

Problema del orden de multiplicacin de matrices

Multiplicacin de matrices
Algoritmo multiplicacinMatrices 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 = 0 4. for (k =0; k<n; k++) 5. cij += aik bkj

Laura Cruz Reyes

Programacin Dinmica

Nmero de multiplicaciones
Si se desea obtener la evaluacin del producto de n matrices A = A1 x A2 x.....x An Donde Ai es una matriz con ri-1 renglones y ri columnas. El orden de multiplicacin de las matrices afecta al nmero total de las operaciones requeridas para evaluar A.
Laura Cruz Reyes Programacin Dinmica

Nmero de multiplicaciones
En el algoritmo clsico de multiplicacin de una matriz m x n por una matriz n x p, el nmero de multiplicaciones es mnp. Sea el siguiente producto: A2 x A3 x A4 A= A1 x [10 x 20] [20 x 50] [50 x 1] [1 x 100] El orden de evaluacin A1 x (A2 x (A3 x A4)) requiere 125,000 operaciones. El orden de evaluacin (A1 x (A2 x A3)) x A4 requiere 2200 operaciones.
Laura Cruz Reyes Programacin Dinmica

Nmero de multiplicaciones
A= A1 x A2 x A3 x [10 x 20] [20 x 50] A4 [50 x 1] [1 x 100] El orden de evaluacin (A1 x (A2 x A3)) x A4 requiere 2200 operaciones (A2 x A3) con dimensiones [20 x 50] [50 x 1] respectivamente Requiere 20*50*1=1000 multiplicaciones Genera la matriz A2A3 con dimensiones [20 x 1] (A1 x A2A3) con dimensiones [10 x 20] [20 x 1] respectivamente Requiere 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] respectivamente Requiere 10*1*100=1000 multiplicaciones Genera la matriz A1A2A3A4 con dimensiones [10 x 100] Total de multiplicaciones = 1000+200+1000=2200

Laura Cruz Reyes

Programacin Dinmica

Problema del orden de multiplicacin 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 parntesis completamente al producto A1, A2,...An de manera que minimice el nmero de operaciones escalares.

Laura Cruz Reyes

Programacin Dinmica

Solucin ptima y su valor


Sea el siguiente producto: A= A1 x A2 x A3 x A4 [10 x 20] [20 x 50] [50 x 1] [1 x 100] Solucin ptima: colocacin de parntesis con menor costo ( ((A1(A2A3)) ((A4A5) A6)) Valor de la solucin ptima: mnimo nmero de multiplicaciones 2200 multiplicaciones Producto obtenido con el menor nmero de multiplicaciones A=( ((A1(A2A3)) ((A4A5) A6))

Laura Cruz Reyes

Programacin Dinmica

Paso 1: Caracterizar la estructura de una solucin ptima


Divisin del problema en subproblemas: Para colocar parntesis, dada una cadena de matrices Ai Ai+1 Aj se divide el
producto en trminos de k, con i k< j, quedando dos subcadenas: (A1 Ak) y (Ak+1 An )
1..4 1..1

k=1 k=2

2..4

1..2

k=2

3..4

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

k=3

4..4

k=3
2..3 4..4 1..1 3..3

2..2

3..4

k=1

2..2 3..3

k=3

k=1

2..3 3..3

1..2

k=2

3..3

3..3

4..4 2..2

2..2

k=3

k=2

k=2

1..1

k=1

2..2

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


Laura Cruz Reyes Programacin Dinmica

Paso 1: Caracterizar la estructura de una solucin ptima


1..4 1..1

k=1 k=2

2..4

1..2

k=2

3..4

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

k=3

4..4

k=3
2..3 4..4 1..1 3..3

2..2

3..4

k=1

2..2

3..3

k=3

k=1

2..3 3..3

1..2

k=2

3..3

3..3

4..4 2..2

2..2

k=3

k=2

k=2

1..1

k=1

2..2

k=3 k=1 k=2


Laura Cruz Reyes Programacin Dinmica

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

Paso 2: Definir una estructura para guardar los elementos de la solucin ptima Pare construir la solucin ptima, se define una matriz s[i,j], la cual contendr el valor de k que logra una colocacin ptima de parntesis.
1..4 1..1

k=1

2..4

1..2

k=2

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

1..3

k=3

4..4

k=1

2..3 3..3

1..2

k=2

3..3

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 );

2..2

k=2

Laura Cruz Reyes

Programacin Dinmica

Paso 3: Definir recursivamente el valor de una solucin ptima


Para calcular el nmero de multiplicaciones de una solucin, se define un arreglo m[i,j] el cual contendra el costo mnimo de la subcadena Ai Aj usando el punto de corte ptimo k: Ejemplo: Si k=2, m[1,4] = m[1,2]+m[3,4]+r0r2r4
1..2 1..4

k=2

3..4

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


1..3

1..4

k=3

4..4

Laura Cruz Reyes

Programacin Dinmica

Paso 3: Definir recursivamente el valor de una solucin ptima


Sea m[i,j] un arreglo que almacena el costo mnimo de la subcadena Ai Aj usando el punto de corte ptimo k. Por lo tanto, la tabla se llena con la siguiente regla:
Si i == j entonces m[i,j] = 0, quiere decir que la cadena es de una sola matriz as que no requiere de multiplicaciones escalares. Si i < j entonces m[i,j] = min(m[i,k]+ m[k+1,j] +ri-1rkrj), ik<j
El trmino m[i,k] es el costo mnimo de evaluar A = Ai x Ai+1 x...x Ak El trmino m[k+1,j] es el costo mnimo de evaluar A = Ak + 1 x Ak+2 x...x Aj El tercer trmino es el costo de multiplicar A x A .

Laura Cruz Reyes

Programacin Dinmica

Paso 4: Disear un algoritmo para obtener la solucin ptima y su valor


Tamao subcadena/ nivel de procesamiento

1 2 3 4

m11= 0 m12= 10,000 m13= 1200 m14= 2200


K=1 K=2
2..4

m22= 0 m23= 1000 m24= 3000


1..4

m33= 0 m34= 5000

m44= 0

1..1

1..2

K=2

Arriba (up)
3..4 1..3 4..4 1..1

K=3

4..4

K=3
2..3 4..4 1..1 3..3

2..2

3..4

K=1

2..2

3..3

K=3

K=1

2..3 3..3

1..2

K=2

3..3

3..3

4..4 2..2

2..2

K=3

K=2
Programacin Dinmica

K=2

1..1

K=1

2..2

Abajo (button)

Laura Cruz Reyes

Paso 4: Disear un algoritmo para obtener la solucin ptima y su valor


Valor de solucin ptima: Matriz de costos mnimos m[i,j]
0 0 0 0
Ta ma o

Solucin ptima: Matriz de cortes ptimos k s[i,j] 1 2 3


1

Laura Cruz Reyes

Programacin Dinmica

Paso 4: Disear un algoritmo para obtener la solucin ptima y su valor


Valor de solucin ptima: Matriz de costos mnimos m[i,j]
0 10000 0 1000 0 5000 0
Ta ma o 2 Ta ma o 1

Solucin ptima: Matriz de cortes ptimos k s[i,j] 1 1 2 2 3 3 4

Laura Cruz Reyes

Programacin Dinmica

Paso 4: Disear un algoritmo para obtener la solucin ptima y su valor


Valor de solucin ptima: Matriz de costos mnimos m[i,j]
0 10000 0 1200 1000 0 3000 5000 0
Ta ma o 3 Ta ma o 2 Ta ma o 1

Solucin ptima: Matriz de cortes ptimos k s[i,j] 1 1 2 1 2 3 2 3 4

Laura Cruz Reyes

Programacin Dinmica

Paso 4: Disear un algoritmo para obtener la solucin ptima y su valor


Valor de solucin ptima: Matriz de costos mnimos m[i,j]
0 10000 0 1200 1000 0 2200 3000 5000 0
Ta ma o 4

Solucin ptima: Matriz de cortes ptimos k s[i,j] 1 1 2 1 2 3 3 2 3 4

Ta ma o 3 Ta ma o 2 Ta ma o 1

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para obtener la solucin ptima y su valor


Algoritmo ordenCadenaMatrices(R)
Entradas:R es el vector matriz i tiene Salidas: M es la matriz S es la matriz de dimensiones de una cadena de n matrices, la dimensiones ri-1 x ri de costos mnimos, expresado en nmero de multiplicaciones de puntos-de-corte ptimos

1 2 3 4 5 6 7 8 9 10 11

n lenght(R)-1 for i = 1 to n do mii= 0 /*costo de cadenas de tamao 1*/ for l = 2 to n do /*tamao de la cadena*/ for i=1 to nl+1 do /*inicio de la cadena*/ j i+l1 /*fin de la cadena*/ mij for k = i to j-1 do /*punto-corte de cadena*/ q mik + mk+1,j + ri - 1* rk * rj if q < mij then mij q /* valor: mejor costo de cadena*/ sij k /*solucin: mejor punto-corte de cadena*/
Programacin Dinmica

Laura Cruz Reyes

Complejidad del algoritmo


Existen solamente n(n-1)/2 problemas diferentes (cadenas), y la programacin dinmica resuelve cada problema exactamente una vez*, por lo tanto T(n)= n2 /2= (n2)
* No se estn contabilizando las evaluaciones de un mismo problema con diferentes valores de k

Laura Cruz Reyes

Programacin Dinmica

Complejidad del algoritmo


Operacin bsica: nmero de subproblemas evaluados*
T(n)=subproblemas de tamao 1+ suproblemas de tamaos 2 a n

T ( n) = n +
l =2

n n l +1 j 1

1 = 1 = ( n )
3 i =1 k =1 l =2 i =1 k =1

n n l +1 i + l 2

* Si se estn contabilizando las evaluaciones de un mismo problema con diferentes valores de k

Laura Cruz Reyes

Programacin Dinmica

Paso 5: Disear un algoritmo para extraer la solucin ptima


Matriz s[i,j] 1 1 2 1 2 3 3 2 3 4

Solucin ptima: (A1 x (A2 x A3)) x A4


A1A4: s14=3 (A1x A2xA3)x (A4) A1A3: s13=1 (A1)x(A2x A3) A1A1: s11=1 A2A3: s23=2 (A!) (A2)x(A3) A2A2: s22=2 A3A3: s33=3 (A2) (A3) A4A4: s44=4 (A4)

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones


Algoritmo multiplicaCadenaMatrices(A,S,i,j)
Entradas: A es una cadena de matrices S es una matriz que contiene la solucin ptima i,j delimitan una subcadena contenida en A Salidas: producto de la cadena de matrices

1 2 3 4 5

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

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones

Algoritmo multiplicaCadenaMatrices(A,S,1,6) if 6>1 X = multiplicaCadenaMatrices(A,S,i=1,s1,6=3) Y = multiplicaCadenaMatrices(A,S,s1,6+1=4,j=6) return (multiplicar (X, Y))

R1 R3

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones R1


Algoritmo multiplicaCadenaMatrices(A,S,1,3) if 3>1 X = multiplicaCadenaMatrices(A,S,1,1) Y = multiplicaCadenaMatrices(A,S,2,3) return (multiplicar (X,Y))

A1 R2

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones

R2
Algoritmo multiplicaCadenaMatrices(A,S,2,3) if 3>2 X = multiplicaCadenaMatrices(A,S,2,2) Y = multiplicaCadenaMatrices return (multiplicar (X,Y))

A2 (A,S,3,3) A3 (A2A3)

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones R1


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

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


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

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones

Algoritmo multiplicaCadenaMatrices(A,S,1,6) if 6>1 X = multiplicaCadenaMatrices(A,S,1,3)(A1(A2A3)) Y = multiplicaCadenaMatrices(A,S,4,6)R3 return (multiplicar (X,Y))

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones R3


Algoritmo multiplicaCadenaMatrices(A,S,4,6) if 6>4 X = multiplicaCadenaMatrices(A,S,4,5) Y = multiplicaCadenaMatrices(A,S,6,6) return (multiplicar (X,Y))

R4

A6

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones

R4
Algoritmo multiplicaCadenaMatrices(A,S,4,5) if 5>4 X = multiplicaCadenaMatrices (A,S,4,4) Y = multiplicaCadenaMatrices (A,S,5,5) return (multiplicar (X,Y))

A4 A5

(A4A5)

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones

R3
Algoritmo multiplicaCadenaMatrices(A,S,4,6) if 6>4 X = multiplicaCadenaMatrices (A,S,4,5)A4A5 Y = multiplicaCadenaMatrices (A,S,6,6) return (multiplicar (X,Y))

A6

((A4A5)A6)

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para calcular un producto usando el mnimo nmero de operaciones

Algoritmo multiplicaCadenaMatrices(A,S,1,6)

if 6>1

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


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

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para obtener una cadena de matrices con parntesis

Algoritmo parentizaCadenaMatrices(A,S,i,j) EntradaS: A es una cadena de matrices sin parntesis Salidas: A es la cadena de matrices con parntesis 1 2 3 4 5

Laura Cruz Reyes

Programacin Dinmica

Algoritmo recursivo para obtener el costo ptimo de una multiplicacin 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 ri Salidas: M es la matriz de costos mnimos

1 2 3 4 5 6 7 8

if i = j then return 0 mij= /*inicializa costo cadena actual*/ for k = i to j-1 do /*punto-corte cadena*/ q ordenCadenaMatricesRecursivo(R,i,k)+ ordenCadenaMatricesRecursivo(R,k+1,j)+ri-1*rk*rj if q < mij then mij q return mij

Laura Cruz Reyes

Programacin Dinmica

Complejidad del algoritmo recursivo


El nmero de subproblemas evaluados es al menos exponencial en n
para n = 1 0 T (n) = n 1 1 + (T (k ) + T (n k ) + 1) para n > 1 k =1 para n = 1 0 T (n) = n 1 para n > 1 2 T (i ) + n i =1 T (n) 2n 1 T (n) = (2n 1 )
Laura Cruz Reyes Programacin Dinmica

Versin memorizada del programa recursivo


Variacin de la programacin dinmica que combina el enfoque natural de los algoritmos recursivos con la eficiencia de la programacin dinmica. 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 que se prende cuando esta ha sido calculada.
Laura Cruz Reyes Programacin Dinmica

Versin memorizada del programa recursivo


MEMOIZED-MATRIX-CHAIN(p) 1 n length[p] - 1 2 for i 1 to n 3 do for j 1 to n 4 do m[i,j] 5 return LOOKUP-CHAIN(p,1,n) LOOKUP-CHAIN(p,i,j) 1 if i = j 2 then return 0 3 m[i,j] 4 for k 1 to j -1 5 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] q 8 return m[i,j]

Laura Cruz Reyes

Programacin Dinmica

Complejidad del algoritmo recursivo-memorizado


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 versin pura es ms eficiente por un factor constante debido que no hay sobrecarga inherente a la recursin.
Laura Cruz Reyes Programacin Dinmica

Problema del cambio de moneda

Problema del cambio de moneda


Dada una divisa (unidad monetaria de un pas) con monedas de u1, u2,,un, y C unidades que deben ser devueltas a un cliente. Se busca el nmero mnimo de monedas que se necesitan para devolver las C unidades de cambio.
Laura Cruz Reyes Programacin Dinmica

m=6

C=10 m=2

m=1

m=5

u=1 C=9 u=1 C=8 u=1 C=7 u=1 C=6 u=1 C=5

u=5 C m=1 =5 u=5 C=0

u=10 C=0

m=4

m=3 m=2

rbol de problemas
m=1 u=5 C=0

m=5 u=1 m=4 C=4 u=1 C m=3 =3 u=1 m=2 C=2 u=1 m=1 C=1

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

m=1 S={10}
Programacin Dinmica

Laura Cruz Reyes

u=1 C=0

m=3 C = 7 u=1 m=2 u=1 m=5 C=5 m= 1 u=1


C=4

m=3 u=5

C=6

m=2 u=5
C=1

C=2

m=2

u=1 m=1
C=1 m=1

u=5

u=1
C=0

u=1
C=0

m=4

C=0

u=1
C=3

m=3

u=1
C=2

rbol de problemas
C=7 U={1,5, 10, 15, 21,25}

m=2

u=1
C=1

m=1

u=1
C=0

m=3 S={1,1,5}
Laura Cruz Reyes Programacin Dinmica

Valor de una solucin ptima


Sea m[C] un arreglo que almacena el menor nmero 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 = 0 entonces m[C] = 0, quiere decir que no se requiere ninguna moneda para devolver una cantidad igual a cero. Si C > 0 entonces m[C] = min(1+ m[C-u]), u U, quiere decir que se utilizar una moneda ptima de denominacin u ms las monedas requeridas para devolver una cantidad igual a C-u.

Laura Cruz Reyes

Programacin Dinmica

Complejidad del algoritmo


El tiempo de ejecucin depende del nmero de monedad con distintos valores n y de la cantidad de cambio que queremos devolver C, por lo tanto: T(n)= nC

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para cambio de monedas


Consultar el libro de Mark Allen (pag. 201)

Laura Cruz Reyes

Programacin Dinmica

Problema de la mochila 0-1

El Problema de la Mochila 0-1


Se 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 asignacin de los objetos se utiliza un vector X de n elementos xi, caracterizado porque cada elemento xi slo puede tomar los valores cero o uno para indicar si el objeto se mete o no a la mochila.

Laura Cruz Reyes

Programacin Dinmica

El Problema de la Mochila 0-1


Dada una mochila con capacidad C y un conjunto de n objetos; cada objeto i, 1 in, tiene un peso pi > 0 y un beneficio b i > 0. Se busca una asignacin en X (xi=1 si el objeto se lleva, xi=0 en caso contrario) de objetos a la mochila que obtenga el mximo beneficio: maximizar bixi,
i=1 n

y satisfaga la condicin:
n

pi xi C
Laura Cruz Reyes i=1 Programacin Dinmica

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 solucin es: (x1,x2,x3) = (0,1,1), con beneficio 64. Para este caso, la solucin ptima es: (x1,x2,x3) = (1,1,0) con beneficio 78.
Laura Cruz Reyes Programacin Dinmica

Valor de una solucin ptima


Sea m[i,j] un arreglo que almacena el valor mximo de los objetos que podemos transportar si el lmite de peso es j, con 0j C, y si solamente incluimos los objetos numerados desde 1 hasta el i, con 1i n. Por tanto, la solucin se puede encontrar en m[n,C]. La tabla se llena con la regla:
Si j=0 entonces m[i,0] = 0, quiere decir que ningn objeto se puede acomodar en una mochila de capacidad cero. Si j>0 entonces m[i,j] = max (m[i-1, j], m[i-1, j-pi] + bi), quiere decir que se evala la opcin de no aadir el objeto i a la carga contra la opcin de incluirlo, lo cual tiene como efecto incrementar el valor de la carga en bi, y reducir la capacidad disponible en pi.
Laura Cruz Reyes Programacin Dinmica

Valor de una solucin ptima


capacidad de la mochila C=11 Peso de los objetos P={1,2,5,6,7} Beneficio de los objetos B={1,6,18,22,28}
0 1 2 3 4 5 0 0 0 0 0 1 1 1 1 1 1 2 1 6 6 6 6 3 1 7 7 7 7 4 1 7 7 7 7 5 1 7 18 18 18 6 1 7 19 22 22 7 1 7 24 24 28 8 1 7 25 28 29 9 1 7 25 29 34 10 1 7 25 29 35 11 1 7 25 40 40

Laura Cruz Reyes

Programacin Dinmica

Complejidad del algoritmo


El tiempo de ejecucin depende del nmero de objetos por acomodar n y de la capacidad de la mochila C, por lo tanto: T(n)= nC

Laura Cruz Reyes

Programacin Dinmica

Algoritmo para la mochila 0-1


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

Laura Cruz Reyes

Programacin Dinmica

El Problema de la Mochila 0-1 con repeticin


Una variante del problema de la mochila 0-1 admite objetos repetidos en la mochila. Para representar el nmero 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 solucin 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.
Laura Cruz Reyes Programacin Dinmica

Problema de la subsecuencia comn ms larga

El problema de la subsecuencia comn ms larga


Dada una secuencia X = x1,x2,...xm, otra secuencia Z=z1,z2,...zk es una subsecuencia of X si existe una secuencia de ndices i1,i2,...ik de X que 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>.
Laura Cruz Reyes Programacin Dinmica

Algoritmo para subsecuencia comn ms larga


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

Laura Cruz Reyes

Programacin Dinmica

Bibliografa
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. Introduction to Algorithms. MIT Press, 1990. Sara Basse, Allen Van Gelder. Algoritmos Computacionales: Introduccin al anlisis y diseo. 3. edicin. 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.
Programacin Dinmica

Laura Cruz Reyes

También podría gustarte