Você está na página 1de 105

Programacin dinmica

Introduccin El problema de la mochila 0-1 Camino de coste mnimo en un grafo multietapa Multiplicacin de una secuencia de matrices Comparaciones de secuencias Caminos mnimos entre todos los pares de nodos de un grafo rboles binarios de bsqueda ptimos Un problema de fiabilidad de sistemas El problema del viajante de comercio Planificacin de trabajos Una competicin internacional Triangulacin de polgonos

J. Campos - C.P.S.

2 7 17 30 40 47 53 64 69 79 92 98

Esquemas algortmicos - Programacin dinmicaPg. 1

Programacin dinmica: Introduccin


Recordemos el problema de la mochila:


Se tienen n objetos fraccionables y una mochila. El objeto i tiene peso pi y una fraccin xi (0xi1) del objeto i produce un beneficio bixi. El objetivo es llenar la mochila, de capacidad C, de manera que se maximice el beneficio.
maximizar sujeto a
1 i n

bi xi

1 i n

pi xi C

con 0 x i 1, bi > 0, pi > 0, 1 i n

Una variante: la mochila 0-1


xi slo toma valores 0 1, indicando que el objeto se deja fuera o se mete en la mochila. Los pesos, pi, y la capacidad son nmeros naturales. Los beneficios, bi, son reales no negativos.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 2

Programacin dinmica: Introduccin


Ejemplo:
n=3 C=15 (b1,b2,b3)=(38,40,24) (p1,p2,p3)=(9,6,5)

Recordar la estrategia voraz:


Tomar siempre el objeto que proporcione mayor beneficio por unidad de peso. Se obtiene la solucin: (x1,x2,x3)=(0,1,1), con beneficio 64 Sin embargo, la solucin ptima es: (x1,x2,x3)=(1,1,0), con beneficio 78

Por tanto, la estrategia voraz no calcula la solucin ptima del problema de la mochila 0-1.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 3

Programacin dinmica: Introduccin


R. Bellman: Dynamic Programming, Princeton University Press, 1957.

Tcnica de programacin dinmica


Se emplea tpicamente para resolver problemas de optimizacin. Permite resolver problemas mediante una secuencia de decisiones. Como el esquema voraz A diferencia del esquema voraz, se producen varias secuencias de decisiones y slamente al final se sabe cul es la mejor de ellas. Est basada en el principio de optimalidad de Bellman: Cualquier subsecuencia de decisiones de una secuencia ptima de decisiones que resuelve un problema tambin debe ser ptima respecto al subproblema que resuelve.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 4

Programacin dinmica: Introduccin


Supongamos que un problema se resuelve tras tomar un secuencia d1, d2, , dn de decisiones. Si hay d opciones posibles para cada una de las decisiones, una tcnica de fuerza bruta explorara un total de dn secuencias posibles de decisiones (explosin combinatoria). La tcnica de programacin dinmica evita explorar todas las secuencias posibles por medio de la resolucin de subproblemas de tamao creciente y almacenamiento en una tabla de las soluciones ptimas de esos subproblemas para facilitar la solucin de los problemas ms grandes.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 5

Programacin dinmica: Introduccin


Ms formalmente:
Sea E0 el estado inicial del problema. Sea D1 = {v 11 , K , v 1n 1 } el conjunto de valores de decisin posibles para la decisin d1. Sea E1i el estado del problema tras la eleccin del valor v1i, 1in1. Sea S1i una secuencia ptima de decisiones respecto al estado E1i.

Principio de optimalidad de Bellman: Una secuencia ptima de decisiones respecto a E0 es la mejor de las secuencias de decisin {v1i,S1i}, 1in1. El mismo razonamiento puede aplicarse a cualquier subsecuencia de decisiones dk, , dl, 1kln, partiendo como estado inicial de Ek-1. Una solucin dinmica para este problema, simbolizado como (k,l), debe expresarse en trminos de los valores de decisin existentes para la decisin dk y el subproblema (k+1,l), resultante de aplicar cada valor de decisin.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 6

El problema de la mochila 0-1


Sea mochila(k,l,P) el problema:


maximizar bi xi
i=k l

sujeto a

i=k

pi xi P

con xi {0,1}, k i l

El problema de la mochila 0-1 es mochila(1,n,C).

Principio de optimalidad:
Sea y1,,yn una secuencia ptima de valores 0-1 para x1,,xn. Si y1=0, entonces y2,,yn forman una secuencia ptima para el problema mochila(2,n,C). Si y1=1, entonces y2,,yn forman una secuencia ptima para el problema mochila(2,n,C-p1). 2 ,K , y n Demostracin: Si existe una solucin mejor y para el problema correspondiente, 2 ,K , y n es mejor entonces y1 , y que y1 , y2 , K , yn para el problema mochila(1,n,C), en contra de la hiptesis.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 7

El problema de la mochila 0-1


Lo mismo se cumple en cualquier etapa de decisin:


Si y1,,yn es una solucin ptima del problema mochila(1,n,C), entonces para todo j, 1jn:

y1,,yj es solucin ptima de


j mochila 1, j , pi xi i =1

yj+1,,yn es solucin ptima de


j mochila j + 1, n , C pi xi i=1

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 8

El problema de la mochila 0-1


Ecuacin de recurrencia hacia adelante:


v Si g j ( c ) es el beneficio (o ganancia total) de una solucin ptima de mochila(j,n,c), entonces v v v g j (c ) = max g j + 1(c ), g j+ 1(c p j ) + b j

dependiendo de que el objeto j-simo entre o no en la solucin (ntese que slo puede entrar si c-pj0). Adems, v gn + 1 (c ) = 0, para cualquier capacidad c

v Ambas ecuaciones permiten calcular g1 (C ) , que es el valor de una solucin ptima de mochila(1,n,C).

(Ntese que la ecuacin de recurrencia es hacia adelante pero el clculo se realiza hacia atrs.)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 9

El problema de la mochila 0-1


Ecuacin de recurrencia hacia atrs:


w Si g j (c ) es el beneficio (o ganancia total) de una solucin ptima de mochila(1,j,c), entonces w w w g j (c ) = max g j 1(c ), g j 1(c p j ) + b j

dependiendo de que el objeto j-simo entre o no en la solucin (ntese que slo puede entrar si c-pj0). Adems, w g0 (c ) = 0, para cualquier capacidad c

w Ambas ecuaciones permiten calcular gn (C ) , que es el valor de una solucin ptima de mochila(1,n,C).

(Ahora la recurrencia es hacia atrs pero el clculo se realiza hacia adelante.)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 10

El problema de la mochila 0-1


Tanto la recurrencia hacia adelante como hacia atrs permiten escribir un algoritmo recursivo de forma inmediata.

funcin vector [1..n] funcin mochila1(p,b: mochila1(p,b: vector [1..n] de de nat; nat; C:nat) C:nat) devuelve devuelve nat nat principio principio devuelve devuelve g(n,C) g(n,C) fin fin funcin funcin g(j,c:nat) g(j,c:nat) devuelve devuelve nat nat principio principio si si j=0 j=0 entonces entonces devuelve devuelve 0 0 sino sino si si c<p[j] c<p[j] entonces entonces devuelve devuelve g(j-1,c) g(j-1,c) sino sino si g(j-1,c-p[j])+b[j] si g(j-1,c) g(j-1,c) g(j-1,c-p[j])+b[j] entonces entonces devuelve devuelve g(j-1,c) g(j-1,c) sino sino devuelve devuelve g(j-1,c-p[j])+b[j] g(j-1,c-p[j])+b[j] fsi fsi fsi fsi fsi fsi fin fin
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 11

El problema de la mochila 0-1


Problema: ineficiencia
Un problema de tamao n se reduce a dos subproblemas de tamao (n-1). Cada uno de los dos subproblemas se reduce a otros dos Por tanto, se obtiene un algoritmo exponencial.

Sin embargo, el nmero total de subproblemas a resolver no es tan grande:

w La funcin g j (c ) tiene dos parmetros: el primero puede tomar n valores distintos y el segundo, C valores. Luego slo hay nC problemas diferentes!

Por tanto, la solucin recursiva est generando y resolviendo el mismo problema muchas veces.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 12

El problema de la mochila 0-1


Para evitar la repeticin de clculos, las soluciones de los subproblemas se deben almacenan en una tabla.
w Matriz nC cuyo elemento (j,c) almacena g j (c ) Para el ejemplo anterior: n=3 C=15 (b1,b2,b3)=(38,40,24) (p1,p2,p3)=(9,6,5)
0 p1 = 9 0 p2 = 6 0 p3 = 5 0 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 24 6 0 40 40 7 0 40 40 8 0 40 40 9 38 40 40 10 38 40 40 11 38 40 64 12 38 40 64 13 38 40 64

14 38 40 64

15 38 78 78

w w w g j (c ) = max g j 1(c ) , g j 1(c p j ) + b j

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 13

El problema de la mochila 0-1


algoritmo ent vect [1..n] de algoritmo mochila( mochila( ent p,b: p,b: vect [1..n] de nat; nat; ent ent Cap:nat; Cap:nat; sal vect [0..n,0..Cap] de sal g: g: vect [0..n,0..Cap] de nat) nat) variables variables c,j:nat c,j:nat principio principio para ; para c:=0 c:=0 hasta hasta Cap Cap hacer hacer g[0,c]:=0 g[0,c]:=0 fpara fpara ; para ; para j:=1 j:=1 hasta hasta n n hacer hacer g[j,0]:=0 g[j,0]:=0 fpara fpara ; para para j:=1 j:=1 hasta hasta n n hacer hacer para para c:=1 c:=1 hasta hasta Cap Cap hacer hacer si si c<p[j] c<p[j] entonces entonces g[j,c]:=g[j-1,c] g[j,c]:=g[j-1,c] sino sino si g[j-1,c-p[j]]+b[j] si g[j-1,c] g[j-1,c] g[j-1,c-p[j]]+b[j] entonces entonces g[j,c]:=g[j-1,c] g[j,c]:=g[j-1,c] sino sino g[j,c]:=g[j-1,c-p[j]]+b[j] g[j,c]:=g[j-1,c-p[j]]+b[j] fsi fsi fsi fsi fpara fpara fpara fpara fin fin

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 14

El problema de la mochila 0-1


Clculos posibles a partir de la tabla g: beneficio total: g[n,Cap] los objetos metidos en la mochila:

algoritmo ent vect [1..n] de algoritmo objetos( objetos( ent p,b: p,b: vect [1..n] de nat; nat; ent ent Cap:nat; Cap:nat; ent vect [0..n,0..Cap] de ent g: g: vect [0..n,0..Cap] de nat) nat) principio principio test(n,Cap) test(n,Cap) fin fin algoritmo ent algoritmo test( test( ent j,c:nat) j,c:nat) principio principio si si j>0 j>0 entonces entonces si c<p[j] si c<p[j] entonces entonces test(j-1,c) test(j-1,c) sino sino si si g[j-1,c-p[j]]+b[j]>g[j-1,c] g[j-1,c-p[j]]+b[j]>g[j-1,c] entonces entonces test(j-1,c-p[j]); test(j-1,c-p[j]); escribir('meter escribir('meter ',j) ',j) sino sino test(j-1,c) test(j-1,c) fsi fsi fsi fsi fsi fsi fin fin
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 15

El problema de la mochila 0-1


Consideraciones finales
Cada componente de la tabla g se calcula en tiempo constante, luego el coste de construccin de la tabla es O(nC). El algoritmo test se ejecuta una vez por cada valor de j, desde n descendiendo hasta 0, luego su coste es O(n). Si C es muy grande, entonces esta solucin no es buena. Si los pesos pi o la capacidad C son reales, esta solucin no sirve.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 16

Camino de coste mnimo en un grafo multietapa


Grafo multietapa:
Un grafo multietapa G=(V,A) es un grafo dirigido en el que se puede hacer una particin del conjunto V de vrtices en k (k2) conjuntos distintos Vi, 1ik, tal que todo arco del grafo (u,v) es tal que uVi y vVi+1 para algn i, 1i<k. Los conjuntos V1 y Vk tienen un solo vrtice que se llama vrtice origen, o, y vrtice destino, d, respectivamente. V1
5

V2
2
3 1 7

V3
5
4 5 8 6 11

V4
7 8
4 5 9 12

V5

1
2

3 4

10 d

6
9

Consideraremos grafos etiquetados. Denotamos por c(u,v) el coste del arco (u,v).

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 17

Camino de coste mnimo en un grafo multietapa


El problema: Encontrar un camino de coste mnimo que vaya de o a d.


Todo camino de o a d tiene exactamente un vrtice en cada Vi, por eso se dice que cada Vi define una etapa del grafo. V1
5

V2
2
3 1 7

V3
5
4 5 8 6 11

V4
7 8
4 5 9 12

V5

1
2

3 4

10 d

6
9

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 18

Camino de coste mnimo en un grafo multietapa


Ejemplo de aplicacin:
Se tienen n unidades de un recurso que deben asignarse a r proyectos. Si se asignan j, 0jn, unidades al proyecto i se obtiene un beneficio Ni,j. El problema es asignar el recurso a los r proyectos maximizando el beneficio total.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 19

Camino de coste mnimo en un grafo multietapa


Formulacin como grafo multietapa: Nmero de etapas: r+1 La etapa i, 1ir, representa el proyecto i. Hay n+1 vrtices vi,j, 0jn, en cada etapa i, 2ir. Las etapas 1 y r+1 tienen un vrtice, o=v1,0 y d=vr+1,n, respectivamente. El vrtice vi,j, 2ir, representa el estado en el que se asignan un total de j unidades del recurso a los proyectos 1, 2, , i-1. Los arcos son de la forma (vi,j,vi+1,l) para todo jl y 1i<r. El arco (vi,j,vi+1,l), jl, tiene asignado un coste Ni,l-j que corresponde a asignar l-j unidades del recurso al proyecto i, 1i<r.

Adems hay arcos de la forma (vr,j,vr+1,n), que tienen asignado un coste max {N r , p }.
0 p n j

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 20

Camino de coste mnimo en un grafo multietapa


Grafo resultante para r=3 y n=4. La asignacin ptima est definida por un camino de coste mximo de o a d. Para convertirlo en un problema de camino de coste mnimo basta cambiar los signos de las etiquetas.
v2,0
N 1,0 N 2,1 N 1,1 N 2,0

v3,0
i= 0,1,2,3,4

max {N 3, i }

v2,1
N 2,3

N 2,0 N 2,2 N 2,1

v3,1
i= 0,1,2,3

max {N 3, i }

o = v 1,0

N 1,2

v2,2

N 2,0 N 2,1

v3,2
N N 2,2 2,3

i= 0,1,2

max {N 3, i }

d = v 4,4

max {N 3, i }
i= 0,1

N 1,3

N 2,2

v2,3
N 1,4

N 2,0 N 2,1

v3,3
N 2,4 N 3,0

v2,4

N 2,0

v3,4

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 21

Camino de coste mnimo en un grafo multietapa


Solucin de programacin dinmica:


V1
5

V2
2
3 1 7

V3
5
4 5 8 6 11

V4
7 8
4 5 9 12

V5

1
2

3 4

10 d

6
9

Cada camino de o a d es el resultado de una secuencia de k-2 decisiones. Decisin i-sima: determinar, a partir de un vrtice vi de Vi, un arco que tenga a vi como origen y algn nodo de Vi+1 como destino. Principio de optimalidad: El camino de coste mnimo debe contener subcaminos de coste mnimo entre otros nodos. Dem.: En otro caso, podran sustituirse dichos subcaminos por otros mejores, resultando un camino total de coste menor.
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 22

Camino de coste mnimo en un grafo multietapa


Ecuacin de recurrencia hacia adelante: Sea s(i,j) un camino de coste mnimo C*(i,j) desde el vrtice j del conjunto Vi hasta el vrtice destino d. Entonces:
c ( j , d ) , C (k 1, j ) = , si ( j , d ) A en otro caso

C (i , j ) = min

l V i+ 1 ( j , l )A

c ( j , l ) + C (i + 1, l )} , para {

1 i k 2

V1
5

V2
2
3 1 7

V3
5
4 5 8 6 11

V4
7 8
4 5 9 12

V5

1
2

3 4

10 d

6
9

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 23

Camino de coste mnimo en un grafo multietapa


c ( j , d ) , C (k 1, j ) = , si ( j , d ) A en otro caso

C (i , j ) = min

l V i+ 1 ( j , l )A

c ( j , l ) + C (i + 1, l )} , para {

1 i k 2

V1
5

V2
2
3 1 7

V3
5
4 5 8 6 11

V4
7 8
4 5 9 12

V5

1
2

3 4

10 d

6
9

C (3, 5) = min {8 + C (4 ,7),11 + C (4 , 8),6 + C (4 ,9)} = 13 C (3,6) = 4 + C (4 , 8) = 13 C (2, 2) = min {3 + C (3, 5),1 + C (3,6)} = 14 C (2, 3) = 4 + C (3, 5) = 17 C (2, 4) = min {5 + C (3, 5),9 + C (3,6)} = 18 C (1,1) = min {5 + C (2, 2),7 + C (2, 3), 2 + C (2, 4)} = 19

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 24

Camino de coste mnimo en un grafo multietapa


Falta almacenar las decisiones hechas en cada etapa que minimizan el coste: Sea D(i,j) el valor de l que minimiza c ( j , l ) + C (i + 1, l ).

Entonces el camino de coste mnimo es: v1=1; v2=D(1,1); v3=D(2,D(1,1)); etc. V1


5

V2
2
3 1 7

V3
5
4 5 8 6 11

V4
7 8
4 5 9 12

V5

1
2

3 4

10 d

6
9

D(3, 5) = 7 ; D (3,6) = 8 D (2, 2) = 6; D (2, 3) = 5; D (2, 4) = 5 D (1,1) = 2

v1 = 1 v 2 = D (1,1) = 2 v 3 = D (2, D (1,1)) = 6 v 4 = D (3, D(2, D (1,1))) = 8

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 25

Camino de coste mnimo en un grafo multietapa


algoritmo ent algoritmo multietapa( multietapa( ent G=(V,A,c):grafo; G=(V,A,c):grafo; ent ent k,n:nat; k,n:nat; sal vect [1..k] de sal P: P: vect [1..k] de 1..n) 1..n)
{Los {Los vrtices vrtices estn estn numerados numerados de de forma forma que que los los ndices ndices de de los los vrtices vrtices de de una una etapa etapa son son mayores mayores que los ndices de los de la etapa anterior. que los ndices de los de la etapa anterior. * El El primer primer ndice ndice de de C C* y y D, D, que que slo slo identificaba identificaba la etapa, se ha suprimido.} la etapa, se ha suprimido.}

variables vect [1..n] de variables C: C: vect [1..n] de real; real; D: vect [1..n] de D: vect [1..n] de 1..n; 1..n; j,r:1..n j,r:1..n principio principio * C[n]:=0.0; C[n]:=0.0; {Clculo {Clculo de de C C* y y D} D} para para j:=n-1 j:=n-1 descendiendo descendiendo hasta hasta 1 1 hacer hacer A r:=vrtice A r:=vrtice t.q. t.q. (j,r) (j,r) c(j,r)+C[r] c(j,r)+C[r] es es mnimo; mnimo; C[j]:=c(j,r)+C[r]; C[j]:=c(j,r)+C[r]; D[j]:=r D[j]:=r fpara ; fpara ; P[1]:=1; {Construccin del del camino} camino} P[1]:=1; P[k]:=n; P[k]:=n; {Construccin para para j:=2 j:=2 hasta hasta k-1 k-1 hacer hacer P[j]:=D[P[j-1]] P[j]:=D[P[j-1]] fpara fpara fin fin

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 26

Camino de coste mnimo en un grafo multietapa


Coste del algoritmo:


Si G est representado mediante listas de adyacencia, entonces el clculo de r en el interior del primer bucle lleva un tiempo proporcional al grado del vrtice j. Por tanto, si a es el nmero de arcos del grafo, el coste total del algoritmo es (n+a). (El segundo bucle lleva un tiempo (k).)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 27

Camino de coste mnimo en un grafo multietapa


Anlogamente, se desarrolla la recurrencia hacia atrs.


Ecuacin de recurrencia hacia atrs: Sea s(i,j) un camino de coste mnimo C*(i,j) desde el vrtice origen o hasta el vrtice j del conjunto Vi. Entonces:
c (o , j ) , C (2, j ) = , si (o , j ) A en otro caso

C (i , j ) = min

l V i 1 (l , j ) A

c (l , j ) + C (i 1, l )} , para {

3 i k

V1
5

V2
2
3 1 7

V3
5
4 5 8 6 11

V4
7 8
4 5 9 12

V5

1
2

3 4

10 d

6
9

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 28

Camino de coste mnimo en un grafo multietapa


algoritmo ent algoritmo multietapaB( multietapaB( ent G=(V,A,c):grafo; G=(V,A,c):grafo; ent ent k,n:nat; k,n:nat; sal vect [1..k] de sal P: P: vect [1..k] de 1..n) 1..n)
{Los {Los vrtices vrtices estn estn numerados numerados de de forma forma que que los los ndices ndices de de los los vrtices vrtices de de una una etapa etapa son son mayores mayores que que los los ndices ndices de de los los de de la la etapa etapa anterior. anterior. * El primer ndice de C y D, que slo El primer ndice de C* y D, que slo identificaba identificaba la etapa, se ha suprimido.} la etapa, se ha suprimido.}

variables vect [1..n] de variables C: C: vect [1..n] de real; real; D: vect [1..n] de D: vect [1..n] de 1..n; 1..n; j,r:1..n j,r:1..n principio principio * C[1]:=0.0; C[1]:=0.0; {Clculo {Clculo de de C C* y y D} D} para para j:=2 j:=2 hasta hasta n n hacer hacer r:=vrtice A r:=vrtice t.q. t.q. (r,j) (r,j) A c(r,j)+C[r] c(r,j)+C[r] es es mnimo; mnimo; C[j]:=c(r,j)+C[r]; C[j]:=c(r,j)+C[r]; D[j]:=r D[j]:=r fpara ; fpara ; P[1]:=1; P[1]:=1; P[k]:=n; P[k]:=n; {Construccin {Construccin del del camino} camino} para j:=k-1 descendiendo hasta 2 hacer para j:=k-1 descendiendo hasta 2 hacer P[j]:=D[P[j+1]] P[j]:=D[P[j+1]] fpara fpara fin fin
Nota: La eficiencia es la misma si G est representado mediante listas de adyacencia inversa.
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 29

Multiplicacin de una secuencia de matrices


Se desea calcular el producto matricial:


M = M 1M 2L M n

Como es asociativo, existen varias formas (Recordar que el algortimo resultante de la definicin del producto de dos matrices pq y qr necesita pqr multiplicaciones de escalares.) Ejemplo: se quiere calcular el producto ABCD, de las matrices A(135), B(589), C(893) y D(334). (( AB)C ) D) ( AB) (CD) ( A (BC )) D A ((BC ) D) A (B (CD)) n multip. 10582 54201 2856 4055 26418

El caso ms eficiente es casi 19 veces ms rpido que el ms lento!

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 30

Multiplicacin de una secuencia de matrices


Cmo hallar el mejor mtodo?


1. Insertar los parntesis de todas las formas posibles (significativamente diferentes). 2. Calcular para cada una el nmero de multiplicaciones escalares requeridas.

Cuntas formas posibles T(n) de insertar parntesis existen en un producto de n matrices?


Si cortamos entre la i y la (i+1)-sima:
M = ( M 1M 2L M i ) ( M i + 1M i + 2L M n )

Entonces tenemos T(i)T(n-i) formas distintas. Como i puede tomar valores entre 1 y n-1:
T (n) =
n 1 i =1

T (i ) T ( n i ) ,

para n > 1

T (1) = 1

Nmeros de Catalan
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 31

Multiplicacin de una secuencia de matrices


Los nmeros de Catalan crecen exponencialmente.


De hecho puede demostrarse que:
2n 2 1 T (n ) = n 1 n

Por ejemplo:
n 1 2 3 4 5 10 15 T (n) 1 1 2 5 14 4862 2674440

Luego el mtodo directo no sirve.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 32

Multiplicacin de una secuencia de matrices


S. Godbole: On efficient computation of matrix chain products, IEEE Transactions on Computers, 22(9), pp. 864-866, 1973.

Aplicacin del principio de optimalidad:


Si el mejor modo de realizar el producto exige dividir inicialmente entre las matrices i e (i+1)-sima, los productos M1M 2L M i y M i + 1M i + 2L M n debern ser realizados de forma ptima para que el total tambin sea ptimo.

Mtodo:
Construir la matriz [mij], 1ijn, donde mij da el ptimo (i.e., el nmero de multiplicaciones escalares requeridas) para la parte Mi Mi + 1L M j del producto total. La solucin final vendr dada por m1n.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 33

Multiplicacin de una secuencia de matrices


Construccin de [mij], 1ijn: Guardar las dimensiones de las Mi, 1in, en un vector d, de 0..n componentes, de forma que Mi tiene dimensiones di-1di. La diagonal s de [mij] contiene los mij tales que j-i=s:
s = 0: s = 1: mi , i = 0, para i = 1, 2,K , n mi , i + 1 = di 1di di + 1 , para i = 1, 2,K , n 1
i k i + s 1

1 < s < n : m i ,i + s =

min

( mik + m k + 1, i + s + di 1dkdi + s ) ,

para i = 1, 2,K , n s

El tercer caso representa que para calcular Mi Mi + 1L M i + s se intentan todas las posibilidades ( Mi Mi + 1L M k ) ( M k + 1M k + 2L M i + s ) y se escoge la mejor. De forma ms compacta:
0, si i = j mij = min {m + m ik k + 1, j + di 1dkd j }, si i < j i k < j

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 34

Multiplicacin de una secuencia de matrices


Para el ejemplo anterior:


A(135), B(589), C(893) y D(334) Se tiene d=(13,5,89,3,34). Para s=1: m12=5785, m23=1335, m34=9078. Para s=2:

m13 = min ( m 11 + m 23 + 13 5 3, m 12 + m 33 + 13 89 3) = min (1530,9256) = 1530 m 24 = min ( m 22 + m 34 + 5 89 34 , m 23 + m 44 + 5 3 34) = min (24208,1845) = 1845

Para s=3: m14 = min ({k = 1} m 11 + m 24 + 13 5 34 , {k = 2} m 12 + m 34 + 13 89 34 , {k = 3} m 13 + m 44 + 13 3 34) = min (4055, 54201, 2856) = 2856 La matriz es:
j =1 2 3 4 i = 1 0 5785 1530 2856 s=3 2 3 4
J. Campos - C.P.S.

1335 1845 s=2 0 9078 s =1 0 s =0

Esquemas algortmicos - Programacin dinmicaPg. 35

Multiplicacin de una secuencia de matrices


Solucin recursiva inmediata:


Aplicacin de la ecuacin recurrente. Problema: complejidad exponencial.

Almacenamiento de las soluciones de los subproblemas en una tabla:


Nmero de subproblemas: (n2).

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 36

Multiplicacin de una secuencia de matrices


algoritmo ent vect [0..n] de algoritmo parentOpt( parentOpt( ent d: d: vect [0..n] de nat; nat; sal vect [1..n,1..n] de sal m: m: vect [1..n,1..n] de nat; nat; sal vect [1..n,1..n] de sal km: km: vect [1..n,1..n] de 1..n) 1..n)
{m definida antes; ij] {m es es la la matriz matriz [m [m ij] definida antes; km[i,j] km[i,j] guarda guarda el el ndice ndice k k para para el el que que se se alcanza alcanza el el mnimo mnimo al al calcular calcular m[i,j].} m[i,j].}

variables variables i,r,j,k,q:nat; i,r,j,k,q:nat; principio principio para para i:=1 i:=1 hasta hasta n n hacer hacer m[i,i]:=0 m[i,i]:=0 fpara ; fpara ; para para r:=2 r:=2 hasta hasta n n hacer hacer para para i:=1 i:=1 hasta hasta n-r+1 n-r+1 hacer hacer j:=i+r-1; j:=i+r-1; ; m[i,j]:= ; m[i,j]:= para para k:=i k:=i hasta hasta j-1 j-1 hacer hacer q:=m[i,k]+m[k+1,j]+d[i-1]*d[k]*d[j]; q:=m[i,k]+m[k+1,j]+d[i-1]*d[k]*d[j]; si si q<m[i,j] q<m[i,j] entonces entonces m[i,j]:=q; m[i,j]:=q; km[i,j]:=k km[i,j]:=k fsi fsi fpara fpara fpara fpara fpara fpara fin fin
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 37

Multiplicacin de una secuencia de matrices


Coste en tiempo:
(n3)

Coste en memoria:
(n2)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 38

Multiplicacin de una secuencia de matrices


Falta hacer el producto!


El elemento km[i,j] guarda el valor de k tal que la divisin ptima de Mi Mi + 1L M j parte el producto entre Mk y Mk+1. Por tanto:

funcin vect [1..n] de funcin multSec(M: multSec(M: vect [1..n] de matriz; matriz; km: vect [1..n,1..n] de km: vect [1..n,1..n] de 1..n; 1..n; i,j:1..n) i,j:1..n) devuelve devuelve matriz matriz variables variables X,Y:matriz X,Y:matriz principio principio si si j>i j>i entonces entonces X:=multSec(M,km,i,km[i,j]); X:=multSec(M,km,i,km[i,j]); Y:=multSec(M,km,km[i,j]+1,j]; Y:=multSec(M,km,km[i,j]+1,j]; devuelve devuelve mult(X,Y) mult(X,Y) sino sino devuelve devuelve M[i] M[i] fsi fsi fin fin

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 39

Comparaciones de secuencias
D. Sankoff y J.B. Kruskal: Time Wraps, String Edits, and Macromolecules: The Theory and Practice of Sequence Comparison, Addison-Wesley, 1983.

Problemas relacionados con biologa molecular. Un problema:


Mnimo nmero de pasos de edicin para transformar una cadena en otra. Sean A=a1a2an y B=b1b2bm dos cadenas de caracteres. Se quiere modificar A carcter a carcter hasta convertirlo en B. Se permiten tres tipos de cambios (pasos de edicin) y cada uno tiene coste unidad: 1. Insertar un carcter en la cadena. 2. Borrar un carcter de la cadena. 3. Sustituir un carcter por otro diferente.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 40

Comparaciones de secuencias
Ejemplo: Una solucin: abbc
1: borrar a

abbc

n de pasos?

babb

babb
3: sustituir c por b 2: insertar a

bbc

babc

Otra solucin (mejor): abbc


1: insertar b

babb
2: borrar c

babbc

Aplicaciones en comparacin y mantenimiento de versiones de ficheros:


Si se tienen varias versiones parecidas de un fichero es ms eficiente almacenar slo la primera versin y para el resto de versiones almacenar los pasos de edicin (normalmente inserciones y borrados) desde la primera.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 41

Comparaciones de secuencias
R.A. Wagner y M.J. Fischer: The string-to-string correction problem, Journal of the ACM, 21, pp. 168-173, 1974.

Solucin de programacin dinmica:


Sean A(i) y B(i) las subcadenas prefijo de A y B (i.e., A(i)=a1a2ai, B(i)=b1b2bi). C(i,j) el coste mnimo de transformar A(i) en B(j). Se considera el problema: A(n) B(m)

Fijmonos en los posibles tratamientos de an: bien es borrado, y el problema se reduce a transformar A(n-1) en B(m) y luego borrarlo; bien se le hace coincidir con algn carcter de B anterior a bm, en cuyo caso el problema se reduce a transformar A(n) en B(m-1) y luego insertar un carcter igual a bm; bien se le sustituye por un carcter igual a bm, y el problema se reduce a transformar A(n-1) en B(m-1) y luego sustituir an; o bien an coincide con bm, y entonces basta con transformar A(n-1) en B(m-1).
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 42

Comparaciones de secuencias
Si denotamos:
0, si ai = bj c (i , j ) = 1, si ai bj

Se tiene:
(borrando an ) C (n 1, m ) + 1 C (n , m ) = min C (n , m - 1) + 1 (insertando bm ) C (n 1, m 1) + c (n , m ) (otros casos)
C (i , 0) = i , for all i , 0 i n

C (0, j ) = j , for all

j, 0 j m

Solucin recursiva obvia: coste exponencial! Sin embargo, slo existen nm subproblemas diferentes (C(i,j), 1in, 1jm). Orden de clculo: j

i
J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 43

Comparaciones de secuencias
algoritmo ent algoritmo compSec( compSec( ent A:cad[n]; A:cad[n]; ent ent B:cad[m]; B:cad[m]; sal vect [0..n,0..m] de sal C: C: vect [0..n,0..m] de nat; nat; sal vect [1..n,1..m] de sal T: T: vect [1..n,1..m] de Transf) Transf)
{Transf=tipo {Transf=tipo de de las las posibles posibles transformaciones; transformaciones; Transf=(borrar,insert,sustit,nada)} Transf=(borrar,insert,sustit,nada)}

variables variables i,j,x,y,z:nat i,j,x,y,z:nat principio principio para ; para i:=0 i:=0 hasta hasta n n hacer hacer C[i,0]:=i C[i,0]:=i fpara fpara ; para ; para j:=0 j:=0 hasta hasta m m hacer hacer C[0,j]:=j C[0,j]:=j fpara fpara ; para para i:=1 i:=1 hasta hasta n n hacer hacer para para j:=1 j:=1 hasta hasta m m hacer hacer x:=C[i-1,j]+1; x:=C[i-1,j]+1; y:=C[i,j-1]+1; y:=C[i,j-1]+1; si si A[i]=B[j] A[i]=B[j] entonces entonces z:=C[i-1,j-1] z:=C[i-1,j-1] sino sino z:=C[i-1,j-1]+1 z:=C[i-1,j-1]+1 fsi ; fsi ; C[i,j]:=min(x,y,z); C[i,j]:=min(x,y,z); T[i,j]:=Transf(x,y,z) T[i,j]:=Transf(x,y,z)
{T[i,j] {T[i,j] es es el el ltimo ltimo cambio cambio que que da da el el mnimo mnimo valor valor a a C[i,j]} C[i,j]}

fpara fpara fpara fpara fin fin


J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 44

Comparaciones de secuencias
algoritmo ent algoritmo res( res( ent i,j:nat) i,j:nat)
{Para {Para resolver resolver el el problema, problema, ejecutar ejecutar res(n,m).} res(n,m).}

variable variable k:nat k:nat principio principio seleccin seleccin i=0: i=0: para para k:=1 k:=1 hasta hasta j j hacer hacer escribir('Aadir',B[k],'en escribir('Aadir',B[k],'en el el lugar',k) lugar',k) fpara fpara j=0: j=0: para para k:=1 k:=1 hasta hasta i i hacer hacer escribir('Borrar escribir('Borrar car.n',k) car.n',k) fpara fpara otros : otros : seleccin seleccin T[i,j]=borrar: T[i,j]=borrar: res(i-1,j); res(i-1,j); escribir('Borrar escribir('Borrar car.n',i) car.n',i) T[i,j]=insert: T[i,j]=insert: res(i,j-1); res(i,j-1); escribir('Insertar escribir('Insertar car.n',j, car.n',j, 'de 'de B B tras tras la la posicin',i) posicin',i) T[i,j]=sustit: T[i,j]=sustit: res(i-1,j-1); res(i-1,j-1); escribir('Sustit. escribir('Sustit. car.n',i, car.n',i, 'de 'de A A por por n',j,'de n',j,'de B') B') T[i,j]=nada: T[i,j]=nada: res(i-1,j-1) res(i-1,j-1) fseleccin fseleccin fseleccin fseleccin fin fin
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 45

Comparaciones de secuencias

Coste:
En tiempo: (nm) En espacio: (nm)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 46

Caminos mnimos entre todos los pares de nodos de un grafo


R.W. Floyd: Algorithm 97: Shortest path, Communications of the ACM, 5(6), p. 345, 1962.

Problema:
Clculo de los caminos de coste mnimo entre todos los pares de vrtices de un grafo dirigido sin ciclos de peso negativo.

Principio de optimalidad:
Si i1, i2, , ik, ik+1, , in es un camino de coste mnimo de i1 a in, entonces: i1, i2, , ik es un camino de coste mnimo de i1 a ik, y ik, ik+1, , in es un camino de coste mnimo de ik a in.

Aplicacin del principio:


Si k es el vrtice intermedio de mayor ndice en el camino ptimo de i a j, entonces el subcamino de i a k es un camino ptimo de i a k que, adems, slo pasa por vrtices de ndice menor que k. Lo anlogo ocurre con el subcamino de k a j.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 47

Caminos mnimos entre todos los pares de nodos de un grafo


Sea C(i,j) el coste de la arista (i,j) o infinito si esa arista no existe. Sea C(i,i)=0. Sea Dk(i,j) la longitud (o distancia) del camino de coste mnimo de i a j que no pasa por ningn vrtice de ndice mayor que k. Sea D(i,j) la longitud del camino de coste mnimo de i a j. Entonces: D (i , j ) = min min Dk 1 (i , k ) + Dk 1 (k , j ) , C (i , j ) 1 k n

D0 (i , j ) = C (i , j ) , 1 i n , 1 j n

Ahora, un camino ptimo de i a j que no pase por ningn vrtice de ndice mayor que k bien pasa por el vrtice k no. Si pasa por k entonces:
Dk (i , j ) = Dk 1 (i , k ) + Dk 1 (k , j )

Si no pasa por k entonces ningn vrtice intermedio tiene ndice superior a k-1:
Dk (i , j ) = Dk 1 (i , j )

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 48

Caminos mnimos entre todos los pares de nodos de un grafo


En resumen:
Se tiene la siguiente ecuacin recurrente que define el mtodo de programacin dinmica.
Dk (i , j ) = min Dk 1 (i , j ) , Dk 1 (i , k ) + Dk 1 (k , j ) ,
k 1

D0 (i , j ) = C (i , j ) , 1 i n , 1 j n

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 49

Caminos mnimos entre todos los pares de nodos de un grafo


{Pre: {Pre: g g es es un un grafo grafo dirigido dirigido etiquetado etiquetado sin sin ciclos negativos} ciclos negativos}

funcin funcin Floyd(g:grafo) Floyd(g:grafo) devuelve [vrt,vrt] devuelve vector vector [vrt,vrt] de de etiq etiq variables vector [vrt,vrt] variables D: D: vector [vrt,vrt] de de etiq; etiq; u,v,w:vrt; u,v,w:vrt; et,val:etiq et,val:etiq principio principio
{inicialmente {inicialmente la la distancia distancia entre entre dos dos vrtices vrtices tiene el valor de la arista que los une; tiene el valor de la arista que los une; las las diagonales diagonales se se ponen ponen a a cero} cero}

para para todo todo v v en en vrt vrt hacer hacer para para todo todo w w en en vrt vrt hacer hacer D[v,w]:=etiqueta(g,v,w) D[v,w]:=etiqueta(g,v,w) fpara ; fpara ; D[v,v]:=0 D[v,v]:=0 fpara ; fpara ; ... ...

{ { si si no no hay hay arco} arco}

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 50

Caminos mnimos entre todos los pares de nodos de un grafo


... ... para para todo todo u u en en vrt vrt hacer hacer para para todo todo v v en en vrt vrt hacer hacer para para todo todo w w en en vrt vrt hacer hacer si si D[v,u]+D[u,w]<D[v,w] D[v,u]+D[u,w]<D[v,w] entonces entonces D[v,w]:=D[v,u]+D[u,w] D[v,w]:=D[v,u]+D[u,w] fsi fsi fpara fpara fpara fpara fpara ; fpara ; devuelve devuelve D D fin fin
{Post: {Post: D=caminosMnimos(g)} D=caminosMnimos(g)}

Nota: pivotes(u) devuelve el conjunto de vrtices que han sido pivotes en pasos anteriores del algoritmo.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 51

Caminos mnimos entre todos los pares de nodos de un grafo


Eficiencia temporal: (n3)


representacin con matriz de adyacencia: igual que reiterar Dijkstra (Algoritmos voraces, pg. 16), aunque el interior del bucle en Floyd es ms simple representacin con listas de adyacencia: Dijkstra + colas con prioridad est en (anlog n)

Espacio:
Floyd exige (n2) mientras que Dijkstra precisa (n)

Ejercicio: clculo de las secuencias de nodos que componen los caminos mnimos
si el camino mnimo de m a n pasa primero por p y despus por q, la secuencia de vrtices que forman el camino mnimo de p a q forma parte de la secuencia de vrtices que forman el camino mnimo de m a n usar un vector bidimensional C indexado por vrtices: C[v,w] contiene un nodo u que forma parte del camino mnimo entre v y w

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 52

rboles binarios de bsqueda ptimos


Recordar rbol binario de bsqueda:


La clave de todo nodo es mayor o igual que las de sus descendientes izquierdos y menor que las de sus descendientes derechos.

El problema:
Se tiene un conjunto de claves distintas w1 < w 2 <L < wn (ordenadas alfabticamente) que deben almacenarse en un rbol binario de bsqueda. Se conoce la probabilidad pi, 1in, con la que se pide buscar la clave wi y su informacin asociada. Se conoce tambin la probabilidad qi, 0in, de bsqueda de una clave inexistente situada entre wi y wi+1 (con el significado obvio para q0 y qn). Se tiene que
i=1

pi + qi = 1
i =0

Se quiere construir un rbol binario de bsqueda para guardar las claves que minimice el nmero medio de comparaciones para encontrar una clave o para garantizar que no est.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 53

rboles binarios de bsqueda ptimos


Recordar que la profundidad de la raz es 0, la de sus hijos es 1, etc. Si construimos un rbol en el que la clave wi est en un nodo de profundidad di, 1in, entonces se necesitan di+1 comparaciones para encontrarla. Si con probabilidad qi, 0in, buscamos una clave que no est en el rbol pero que, en caso de estar, ocupara un nodo de profundidad di entonces se necesitan di comparaciones para garantizar que no est. Por tanto, el nmero medio de comparaciones para encontrar una clave o para garantizar que no est (funcin que queremos minimizar) es:
C=
i =1

pi (di + 1) + qi di
i =0

Ejemplo:
qi = 0, 0 i 7

Palabra a al ama eso si sin su

Probabilidad 0, 22 0,18 0, 20 0,05 0, 25 0,02 0,08

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 54

rboles binarios de bsqueda ptimos


si

Solucin 1: Creada con estrategia voraz. C=2,43


a ama al eso sin su

eso al a ama si sin su

Solucin 2: rbol perfectamente equilibrado. C=2,70

Solucin 3: Es ptima. C=2,15


a al

ama si eso sin su

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 55

rboles binarios de bsqueda ptimos


E.N. Gilbert y E.F. Moore: Variable length encodings, Bell System Technical Journal, 38(4), pp. 933-968, 1959.

Solucin de programacin dinmica:


Principio de optimalidad: Todos los subrboles de un rbol ptimo son ptimos con respecto a las claves que contienen. Consideremos un subrbol ptimo que contenga las claves wi+1, wi+2, , wj. La probabilidad de que una clave buscada est o debiera estar en ese subrbol es:
mij =
k=i + 1

pk + qk
k= i

Denotemos por Cij el nmero medio de comparaciones efectuadas en un subrbol ptimo que contiene las claves wi+1, wi+2, , wj durante la bsqueda de una clave en el rbol principal (y convenimos en que Cii=0). Supongamos ahora que wk ocupa la raz de ese subrbol.
k Sea Cij el nmero medio de comparaciones efectuadas en ese subrbol durante la bsqueda de una clave en el rbol principal.
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 56

rboles binarios de bsqueda ptimos


Entonces:
k = m +C Cij ij i , k 1 + Ckj

Ci,k-1 es el n medio de comparaciones en el subrbol izquierdo. Ckj es el n medio de comparaciones en el subrbol derecho. mij es el el n medio de comparaciones con la raz.

Ahora se trata de escoger la raz de forma que se minimice Cij:


Cij = mij + min Ci , k 1 + Ckj , si 0 i < j n
i < k j

Cii = 0, si 0 i n

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 57

rboles binarios de bsqueda ptimos


El ejemplo:

qi = 0, 0 i 7

Palabra a al ama eso si sin su

Probabilidad 0, 22 0,18 0, 20 0,05 0, 25 0,02 0,08

Cij = mij + min Ci , k 1 + Ckj , si 0 i < j n


i < k j

Cii = 0, si 0 i n
0 0 1 2 3 4 5 6 7 1 2 3 4 5 6 7

0,22 0

0,58 0,18 0

1,02 0,56 0,20 0

1,17 0,66 0,30 0,05 0

1,83 1,21 0,80 0,35 0,25 0

1,89 1,27 0,84 0,39 0,29 0,02 0

2,15 1,53 1,02 0,57 0,47 0,12 0,08 0

7 6 5 4 3 2 1

C=

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 58

rboles binarios de bsqueda ptimos


tipos vector [1..n] tipos probP= probP= vector [1..n] de de real; real; probQ= vector [0..n] probQ= vector [0..n] de de real; real; matC= vector [0..n,0..n] matC= vector [0..n,0..n] de de real; real; matSol= vector [0..n,0..n] matSol= vector [0..n,0..n] de de entero entero algoritmo ent algoritmo abbpt( abbpt( ent p:probP; p:probP; ent ent q:probQ; q:probQ; sal sal C:matC; C:matC; sal sal r:matSol) r:matSol)
{C {C es es la la matriz matriz definida definida previamente. previamente. En cada componente i,j de En cada componente i,j de r r se se guarda guarda el el k k para el que C[i,j] resulta mnimo.} para el que C[i,j] resulta mnimo.}

variables variables i,j,k,d:entero; i,j,k,d:entero; min,aux:real; min,aux:real; m:matC m:matC principio principio para para i:=0 i:=0 hasta hasta n n hacer hacer C[i,i]:=0; C[i,i]:=0; m[i,i]:=q[i]; m[i,i]:=q[i]; para para j:=i+1 j:=i+1 hasta hasta n n hacer hacer m[i,j]:=m[i,j-1]+p[j]+q[j] m[i,j]:=m[i,j-1]+p[j]+q[j] fpara fpara fpara ; fpara ; para para j:=1 j:=1 hasta hasta n n hacer hacer C[j-1,j]:=m[j-1,j]; C[j-1,j]:=m[j-1,j]; r[j-1,j]:=j r[j-1,j]:=j fpara ; fpara ;
{Ya {Ya estn estn determinados determinados los los rboles rboles de de 1 1 nodo.} nodo.}

... ...
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 59

rboles binarios de bsqueda ptimos


... ... para para d:=2 d:=2 hasta hasta n n hacer hacer para para j:=d j:=d hasta hasta n n hacer hacer i:=j-d; i:=j-d; min:=maxEntero; min:=maxEntero; para para k:=i+1 k:=i+1 hasta hasta j j hacer hacer aux:=C[i,k-1]+C[k,j]; aux:=C[i,k-1]+C[k,j]; si si aux<min aux<min entonces entonces min:=aux; min:=aux; r[i,j]:=k r[i,j]:=k fsi fsi fpara ; fpara ; C[i,j]:=m[i,j]+min C[i,j]:=m[i,j]+min fpara fpara fpara fpara fin fin

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 60

rboles binarios de bsqueda ptimos


tipos vector [1..n] tipos vectClaves= vectClaves= vector [1..n] de de cadena; cadena; rbol= nodo; rbol= nodo; nodo= registro nodo= registro dato:cadena; dato:cadena; iz,de:rbol iz,de:rbol freg freg algoritmo ent algoritmo creaABB( creaABB( ent w:vectClaves; w:vectClaves; ent ent r:matSol; r:matSol; sal sal a:rbol) a:rbol) algoritmo sal algoritmo creaRec( creaRec( sal a:rbol; a:rbol; ent ent i,j:entero) i,j:entero) principio principio si si i=j i=j entonces entonces a:=nil a:=nil sino sino nuevoDato(a); nuevoDato(a); a .dato:=w[r[i,j]]; a .dato:=w[r[i,j]]; creaRec(a .iz,i,r[i,j]-1); creaRec(a .iz,i,r[i,j]-1); creaRec(a .de,r[i,j],j) creaRec(a .de,r[i,j],j) fsi fsi fin fin principio principio creaRec(a,0,n) creaRec(a,0,n) fin fin
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 61

rboles binarios de bsqueda ptimos


Complejidad: (n3), usando (n2) posiciones de memoria.

Es posible transformar automticamente ciertos algoritmos cbicos de programacin dinmica, como este, en algoritmos cuadrticos

F.F. Yao: Efficient dynamic programming using quadrangle inequalities, Proceedings of the 12th Annual ACM Symposium on the Theory of Computing, pp. 429-435, 1980.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 62

rboles binarios de bsqueda ptimos


D.E. Knuth: Optimum binary search trees, Acta Informatica, 1, pp. 14-25, 1971.

En este caso concreto basta con demostrar que:


r[i,j-1] r[i,j] r[i+1,j], si j-i2 (por induccin en j-i [Knu87, p. 492]) Ahora, el coste de los dos bucles internos de abbpt es:
d j n i = jd

(r [ i + 1, j ] r [ i , j 1] + 1)
= r [ n d + 1, n ] r [0, d 1] + n d + 1 < 2n

Por tanto, el coste es (n2).

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 63

Un problema de fiabilidad de sistemas


El problema:
Disear un sistema compuesto de varios dispositivos conectados en serie.
D1 D2 D3 Dn

Sea ri la fiabilidad de Di, i.e., la probabilidad de que funcione correctamente. Entonces, la fiabilidad del sistema sistema entero es: n i = 1ri Por ejemplo, si n=10 y ri=0,99, 1i10, la fiabilidad de cada dispositivo es muy alta y sin embargo

i = 1ri
10

= 0,904

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 64

Un problema de fiabilidad de sistemas


Una forma de aumentar la fiabilidad es duplicar los dispositivos (en paralelo).
D1 D1 D1 Fase 1 D2 D2 D3 D3 D3 D3 Fase 3 Dn Dn Dn Fase n

Fase 2

Si la fase i contiene mi copias de Di, la probabilidad de que toda la fase falle es


(1 ri )m i

Luego la fiabilidad de la fase i es


1 (1 r i )mi

Por tanto, si ri=0,99 y mi=2, la fiabilidad de la fase i es 0,9999. En realidad, la fiabilidad de la fase i es algo menor que 1 (1 r i )mi (las copias de un mismo dispositivo no son completamente independientes pues su diseo es comn, por ejemplo); si denotamos la fiabilidad de la fase i por i ( mi ) entonces la fiabilidad del sistema es:

1 i n i ( mi )
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 65

Un problema de fiabilidad de sistemas


El problema: maximizar la fiabilidad duplicando los dispositivos y con alguna limitacin en el coste.
maximizar sujeto a
1 i n

i ( m i ) ci mi c

1 i m

m i 1 y entero , 1 i n

Donde ci es el coste de cada unidad de dispositivo i. Como ci>0 y mj1, entonces 1miui con
n ui = c + ci cj ci j =1

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 66

Un problema de fiabilidad de sistemas


Una solucin ptima m1, m2, , mn es el resultado de una secuencia de decisiones, una por cada mi. Denotemos:
fi (x ) = mximo sujeto a

1 j i

j (m j )
cj m j x

1 j i

1 mj u j, 1 j i

Entonces el valor de una solucin ptima es fn(c).

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 67

Un problema de fiabilidad de sistemas


La ltima decisin requiere elegir mn de entre {1,2,3,,un}. Una vez tomada la ltima decisin, las restantes decisiones deben utilizar el resto de fondos c-cnmn de forma ptima. Se cumple el principio de optimalidad y f n (c ) = max
n

n ( mn ) { 1 m u
n

f n 1 (c cnmn )

En general, para fi(x), i1, se tiene: f i (x ) = max i ( mi ) f i 1 (x ci mi )


1 mi ui

f 0 (x ) = 1, para todo

x, 0 x c

Se resuelve de forma similar al problema de la mochila 0-1 (ejercicio).

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 68

El problema del viajante de comercio


Recordar:
Encontrar un recorrido de longitud mnima para un viajante que tiene que visitar varias ciudades y volver al punto de partida, conocida la distancia existente entre cada dos ciudades. Es decir, dado un grafo dirigido con arcos de longitud no negativa, se trata de encontrar un circuito de longitud mnima que comience y termine en el mismo vrtice y pase exactamente una vez por cada uno de los vrtices restantes (circuito hamiltoniano).
Ms vueltas!

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 69

El problema del viajante de comercio


Sean G=(V,A) un grafo orientado, V={1,2,,n}, Lij la longitud de (i,j)A, Lij= si no existe el arco (i,j). El circuito buscado empieza en el vrtice 1. Se compone de (1,j), con j1, seguido de un camino de j a 1 que pasa exactamente una vez por cada vrtice de V\{1,j}. Principio de optimalidad: si el circuito es ptimo, el camino de j a 1 debe serlo tambin. Sea SV\{1} un subconjunto de vrtices e iV\S un vrtice; llamamos g(i,S) a la longitud del camino mnimo desde i hasta 1 que pase exactamente una vez por cada vrtice de S. Entonces: longitud del circuito ptimo =
= g (1, V \ {1}) = = min L1 j + g ( j , V \ {1, j })
2 j n
J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 70

El problema del viajante de comercio


Ms en general, si i1, S e iS:
g (i , S) = min Lij + g ( j , S \ { j })
j S

(*)

Adems:
g (i , ) = Li 1 , i = 2, 3, , n

Mtodo de resolucin: Usar (*) y calcular g para todos los conjunto S con un solo vrtice (distinto del 1). Volver a usar (*) y calcular g para todos los conjuntos S de dos vrtices (distintos del 1) y as sucesivamente. Cuando se conoce el valor de g para todos los conjuntos S a los que slo les falta un vrtice (distinto del 1) basta calcular g(1,V\{1}).

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 71

El problema del viajante de comercio


Ejemplo. Sea G el grafo completo de cuatro vrtices con longitudes:


0 5 L= 6 8 10 0 13 8 15 9 0 9 20 10 12 0

Inicializacin: g(2,) = 5; g(3,) = 6; g(4,) = 8.

Usar (*) para obtener: g(2,{3}) = L23 + g(3,) = 15; g(2,{4}) = L24 + g(4,) = 18; g(3,{2}) = 18; g(3,{4}) = 20; g(4,{2}) = 13; g(4,{3}) = 15.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 72

El problema del viajante de comercio


Ahora, utilizando de nuevo (*) para conjuntos de dos elementos:
g (2,{ 3, 4}) = min L23 + g (3,{4}) , L24 + g (4 ,{3}) = = min {29, 25} = 25; g (3,{ 2, 4}) = min L32 + g (2,{4}) , L24 + g (4 ,{2}) = = min {31, 25} = 25; g (4 ,{ 2, 3}) = min L42 + g (2,{3}) , L43 + g (3,{2}) = = min {23, 27} = 23.

{ { {

} }

Finalmente:
g (1,{ 2, 3, 4}) = min { L12 + g (2,{3, 4}) , L13 + g (3,{2, 4}) , L14 + g (4 ,{2, 3}) } = = min { 35, 40, 43 } = 35.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 73

El problema del viajante de comercio


Si adems se quiere saber cmo se construye el circuito ptimo:


Utilizar una funcin adicional J(i,S) es el valor de j que minimiza g(i,S) al aplicar la frmula (*).

En el ejemplo:
J(2,{3,4}) = 4; J(3,{2,4}) = 4; J(4,{2,3}) = 2; J(1,{2,3,4}) = 2. Y el circuito ptimo ser pues: 1 J(1,{2,3,4}) = 2 J(2,{3,4}) = 4 J(4,{3}) = 3 1

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 74

El problema del viajante de comercio


Coste del algoritmo:


clculo de g(j,): n-1 consultas a una tabla, clculo de los g(j,S) tales que 1card(S)=kn-2:
(n 1) n 2 k sumas en total k ,

clculo de g(1,V\{1}): n-1 sumas. Tiempo de clculo:


n 2 n 2 = n 2 2n 2(n 1) + (n 1) k k k =1

( )

Puesto que

k= 1

k k = r 2r 1

(Este tiempo es mejor que (n!) que resultara de la estrategia de fuerza bruta, pero) Coste en espacio (para conservar g y J): (n2n)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 75

El problema del viajante de comercio


Para hacernos una idea del coste

espacio tiempo nmero de tiempo vrtices fuerza bruta prog. dinmica prog. dinmica n 2n n n! n2 2n 5 10 15 20 120 3628800 1, 31 1012 2, 43 1018 800 102400 7372800 419430400 160 10240 491520 20971520

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 76

El problema del viajante de comercio


Implementacin recursiva ineficiente:


funcin funcin g(i,S) g(i,S) devuelve devuelve nat nat variables variables msCorto,distancia,j:nat msCorto,distancia,j:nat principio principio si si S= S= entonces entonces devuelve devuelve L[i,1] L[i,1] sino sino msCorto:= ; msCorto:= ; para para todo todo j j en en S S hacer hacer distancia:=L[i,j]+g(j,S\{j}); distancia:=L[i,j]+g(j,S\{j}); si si distancia<msCorto distancia<msCorto entonces entonces msCorto:=distancia msCorto:=distancia fsi fsi fpara ; fpara ; devuelve devuelve msCorto msCorto fsi fsi fin fin Se calcula repetidas veces el mismo valor de g: ((n-1)!)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 77

El problema del viajante de comercio


Utilizacin de una funcin con memoria:


{se {se usa usa una una tabla tabla gtab gtab cuyos cuyos elementos elementos se se inicializan inicializan con con -1} -1}

funcin funcin g(i,S) g(i,S) devuelve devuelve nat nat variables variables msCorto,distancia,j:nat msCorto,distancia,j:nat principio principio si si S= S= entonces entonces devuelve devuelve L[i,1] L[i,1] sino sino si 0 si gtab[i,S] gtab[i,S] 0 entonces entonces devuelve devuelve gtab[i,S] gtab[i,S] sino sino msCorto:= ; msCorto:= ; para para todo todo j j en en S S hacer hacer distancia:=L[i,j]+g(j,S\{j}); distancia:=L[i,j]+g(j,S\{j}); si si distancia<msCorto distancia<msCorto entonces entonces msCorto:=distancia msCorto:=distancia fsi fsi fpara ; fpara ; gtab[i,S]:=msCorto; gtab[i,S]:=msCorto; devuelve devuelve msCorto msCorto fsi fsi fsi fsi fin fin
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 78

Planificacin de trabajos

El problema:
Sea un sistema en el que la realizacin de un conjunto de trabajos requiere la ejecucin por parte de un conjunto de agentes (o procesadores) de una serie de tareas diferentes para cada trabajo.

n trabajos requiriendo cada uno m tareas: T1i, T2i, , Tmi, 1in la tarea Tji la realiza el procesador Pj, 1jm, y requiere un tiempo tji

Planificacin para los n trabajos:


Es una asignacin de tareas a intervalos de tiempo en los procesadores. la tarea Tji debe asignarse a Pj un procesador no puede tener ms de una tarea asignada en cada instante de tiempo para todo trabajo i, el procesamiento de Tji, j>1, no puede empezar hasta que Tj-1,i haya terminado

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 79

Planificacin de trabajos

Ejemplo:
Se tiene que planificar la ejecucin de dos trabajos en tres procesadores, de forma que los tiempos de cada tarea vienen dados por:
2 0 T = 3 3 5 2

Dos planificaciones posibles:


(a) tiempo 0 1 P1 T11 P2 T22 P3 tiempo 0 1 P1 T11 P2 T22 P3 2 T21 3 4 5 T22 T31 3 T21 T32 4 5 6 T31 7 8 9 6 7 8 9 10 11 12 T32 10 11 12

(b)

La planificacin (b) se dice no apropiativa (nonpreemptive) porque el procesamiento de una tarea no se interrumpe hasta que sta ha terminado. La planificacin (a) se dice apropiativa (preemptive) porque el trabajo 1 se apropia del procesador 2 antes de que ste termine con el trabajo 2.
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 80

Planificacin de trabajos
El tiempo de terminacin del trabajo i en la planificacin S es el instante, fi(S), en que todas las tareas del trabajo i han terminado. En el ejemplo (a), f1(Sa)=10 y f2(Sa)=12. En el ejemplo (b), f1(Sb)=11 y f2(Sb)=5. El tiempo de terminacin, f(S), de la planificacin S es:
F (S) = max
1 i n

{f i (S ) }

El tiempo medio de terminacin, MFT(S), se define como:


MFT(S) = 1 f i (S ) n 1 i n

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 81

Planificacin de trabajos
Planificacin con tiempo de terminacin ptimo (OFT) para un conjunto de trabajos: es una planificacin no apropiativa, S, para la que F(S) es mnimo entre todas las planificaciones no apropiativas. Planificacin apropiativa y con tiempo de terminacin ptimo (POFT): es una planificacin apropiativa, S, para la que F(S) es mnimo entre todas las planificaciones apropiativas. Planificacin con tiempo medio de terminacin ptimo (OMFT): es una planificacin no apropiativa, S, para la que MFT(S) es mnimo entre todas las planificaciones no apropiativas. Planificacin apropiativa y con tiempo medio de terminacin ptimo (POMFT): es una planificacin apropiativa , S, para la que MFT(S) es mnimo entre todas las planificaciones apropiativas.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 82

Planificacin de trabajos
El clculo de OFT y POFT para m>2 y el clculo de OMFT es computacionalmente difcil (es NP-duro). El clculo de OFT para m=2 puede hacerse mediante programacin dinmica.

Caso m=2:
Denotemos T1i como ai y T2i como bi. Una planificacin est completamente especificada fijando una permutacin de los trabajos en uno de los procesadores (coincidir con el otro procesador). Cada tarea empezar tan pronto como sea posible. Ejemplo con 5 trabajos:
P1 P2 a5 a1 a3 a2 b5 a4 b4

b1 b3 b2

planificacin (5,1,3,2,4)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 83

Planificacin de trabajos
Supongamos, para simplificar, que ai0, 1in (si hay trabajos con ai=0, se construye primero la planificacin ptima para los trabajos con ai0 y despus se aaden delante los trabajos con ai=0).

Principio de optimalidad: Una permutacin (planificacin) ptima es tal que, fijado el primer trabajo de la permutacin, el resto de la permutacin es ptimo con respecto al estado en que quedan los dos procesadores despus de terminar el primer trabajo.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 84

Planificacin de trabajos
Sea g(S,t) la longitud (duracin) de una planificacin ptima para el subconjunto de trabajos S suponiendo que el procesador 2 no estar disponible hasta el instante t. Entonces:
g (S , t ) = min ai + g S \ {i }, bi + max {t ai ,0}
i S

)}

con g(,t) = max{t,0} y ai0, 1in.


caso tai: 0 ai 0 caso t<ai: ai t bi t+bi-ai t+bi bj, jS\{i}

aj, jS\{i}

0 t ai ai+bi ai 0 aj, jS\{i} bi bi bj, jS\{i}

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 85

Planificacin de trabajos
La ecuacin recursiva resultante podra resolverse de forma anloga a la del problema del viajante de comercio, pero existe una solucin mejor Supongamos que i y j son los dos primeros trabajos (y en ese orden) en la planificacin ptima del subconjunto S; entonces:
g (S , t ) = ai + g (S \ {i }, bi + max {t ai ,0}) = = ai + aj + g (S \ {i , j }, bj + max {bi + max {t ai ,0} aj ,0}) 1444444 4 2444444 4 3
tij

Pero:

tij = bj + max {bi + max {t ai ,0} aj ,0} = = bj + bi aj + max {max {t ai ,0}, a j bi } = = bj + bi aj + max {t ai , a j bi ,0} = = bj + bi aj ai + max {t , ai + aj bi , ai }

Si los dos primeros trabajos fueran j e i:


g (S , t ) = aj + ai + g (S \ { j , i }, bi + bj ai a j + max {t , aj + ai bj , aj })

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 86

Planificacin de trabajos
Entonces:
g (S , t ) g (S , t ) max {t , ai + aj bi , ai } max {t , aj + ai bj , aj }

Para que esto sea cierto para todo valor de t, se precisa:


max { ai + a j bi , ai } max {aj + ai bj , aj }

Es decir:
ai + a j + max { bi , aj } aj + ai + max { bj , ai }

O sea:
min{ bi , a j } min {bj , ai }

(*)

Luego existe una planificacin ptima en la que cada par (i,j) de trabajos adyacentes verifica (*). Puede demostrarse que todas las planificaciones que verifican (*) tienen la misma longitud. Por tanto, basta generar una permutacin para la que se cumpla (*) para todo par de trabajos adyacentes.
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 87

Planificacin de trabajos
Ahora, si
min{ a1 , a2 , K , an , b1 , b2 , K bn } = ai

Entonces el trabajo i debera ser el primero en una planificacin ptima. En cambio, si


min{ a1 , a2 , K , an , b1 , b2 , K bn } = bj

Entonces el trabajo j debera ser el ltimo en una planificacin ptima. Luego podemos decidir la posicin de uno de los trabajos (el primero o el ltimo). Repitiendo el proceso, se puede construir la planificacin ptima.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 88

Planificacin de trabajos

Por tanto la solucin es:


i) ordenar los ai y bi en orden no decreciente; ii)si el siguiente nmero de la secuencia es ai y el trabajo i no ha sido planificado todava, planificar el trabajo i en la posicin ms a la izquierda de entre los que restan; si el siguiente nmero es bj y el trabajo j no ha sido planificado todava, planificar el trabajo j en la posicin ms a la derecha de entre los que restan; (ntese que el algoritmo sirve tambin si hay trabajos con ai=0)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 89

Planificacin de trabajos

Ejemplo:
Sean n=4, (a1,a2,a3,a4) = (3,4,8,10) y (b1,b2,b3,b4) = (6,2,9,15). La secuencia ordenada de los ai y los bi es: (b2,a1,a2,b1,a3,b3,a4,b4) = (2,3,4,6,8,9,10,15). Sea 1,2,3,4 la secuencia ptima. Como el nmero menor es b2, entonces 4=2. El siguiente nmero es a1 luego 1=1. El siguiente es a2 pero el trabajo 2 ya ha sido planificado. El siguiente es b1 pero 1 ya ha sido planificado. El siguiente es a3 luego hacemos 2=3. Por tanto, 3=4.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 90

Planificacin de trabajos

Coste: O(n log n) Ntese que la solucin directa de


g (S , t ) = min ai + g S \ {i }, bi + max {t ai ,0}
i S

)}

hubiera llevado al menos O(2n), que es el nmero de subconjuntos S diferentes para los que habra que calcular g(S,t).

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 91

Una competicin internacional


El problema:
Dos equipos A y B se enfrentan un mximo de 2n-1 veces, ganando el primer equipo que acumule n victorias. Supongamos que no es posible un partido nulo, que los resultados de cada partido son independientes y que hay una probabilidad constante p de que A gane un partido y q = 1-p de que lo gane B. Cul es la probabilidad, a priori, de que gane A?

El planteamiento:
Sea P(i,j) la probabilidad de que A gane la competicin sabiendo que le faltan todava i victorias y a B le faltan j. Entonces, antes del primer partido, la probabilidad de que A gane la competicin es P(n,n). Si A ya ha acumulado todas las victorias necesarias entonces es el ganador de la competicin, es decir: P(0,j) = 1, 1jn. Igualmente, P(i,0) = 0, para 1in. La ecuacin recurrente es: P(i,j) = pP(i-1,j) + qP(i,j-1), para i,j1.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 92

Una competicin internacional


La solucin directa:
funcin funcin P(i,j) P(i,j) devuelve devuelve real real
{pp {pp (pq) (pq) es es la la probabilidad probabilidad de de que que gane gane A A (B)} (B)}

principio principio si si i=0 i=0 entonces entonces devuelve devuelve 1 1 sino sino si si j=0 j=0 entonces entonces devuelve devuelve 0 0 sino sino devuelve devuelve pp*P(i-1,j)+pq*P(i,j-1) pp*P(i-1,j)+pq*P(i,j-1) fsi fsi fsi fsi fin fin

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 93

Una competicin internacional


Coste de la solucin directa:


Sea T(k) el tiempo necesario en el caso peor para calcular P(i,j) con i+j=k.
T (1) = c T (k ) 2T (k 1) + d , k > 1

donde c y d son dos constantes. Luego, T(k) es O(2k) y por tanto T(2n) es O(22n).
i + j 2 Exactamente el n de llamadas recursivas es 2 j
Por tanto, el tiempo para calcular P(n,n) es ( 2n ) n y puede demostrarse que 2n 22n (2n + 1) n

En definitiva, el tiempo de la solucin directa para calcular P(n,n) es O(4n) y (4n/n). Puede demostrarse que el tiempo es 4n n

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 94

Una competicin internacional


El problema de la solucin directa:


Como siempre en programacin dinmica, se calcula muchas veces el valor de cada P(i,j). Solucin mejor: usar una tabla para almacenar los P(i,j). Ejemplo (para p = q = 1/2):
1 2 21 32 13 16 15 16 11 32 1 2 11 16 7 8 3 16 5 16 1 2 34 1 16 1 8 14 12 0 0 0 0 4 3 2 1 1 1 1 1 0 4 3 2 1 0

P(i,j) = pP(i-1,j) + qP(i,j-1)


la matriz se completa por diagonales desde la esquina inferior derecha

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 95

Una competicin internacional


La solucin:
funcin funcin apuestas(n:natural; apuestas(n:natural; p:real) p:real) devuelve devuelve real real variables vector [0..n,0..n] de variables tabP: tabP: vector [0..n,0..n] de real; real; q:real; q:real; s,k:natural s,k:natural principio principio q:=1-p; q:=1-p; para para s:=1 s:=1 hasta hasta n n hacer hacer tabP[0,s]:=1; tabP[0,s]:=1; tabP[s,0]:=0; tabP[s,0]:=0; para para k:=1 k:=1 hasta hasta s-1 s-1 hacer hacer tabP[k,s-k]:=p*tabP[k-1,s-k]+ tabP[k,s-k]:=p*tabP[k-1,s-k]+ q*tabP[k,s-k-1] q*tabP[k,s-k-1] fpara fpara fpara ; fpara ; devuelve devuelve tabP[n,n] tabP[n,n] fin fin

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 96

Una competicin internacional


Coste:
En tiempo: (n2) En espacio: (n2) Pero se puede reducir fcilmente a (n)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 97

Triangulacin de polgonos

Problema:
Dados los vrtices de un polgono se trata de seleccionar un conjunto de cuerdas (lneas entre vrtices no adyacentes) de modo que ningn par de cuerdas se cruce entre s y que todo el polgono quede dividido en tringulos.
(8,26) (0,20) v1 v2 v3 (15,26) v4 (27,21) v5 (22,12) v6 (10,0)

(0,10) v0

Adems, la longitud total de las cuerdas debe ser mnima (triangulacin minimal). Utilidad: se puede emplear para sombrear objetos tridimensionales en una imagen virtual (bidimensional). Otra: interpolacin numrica de funciones de dos variables.
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 98

Triangulacin de polgonos

Resolucin de programacin dinmica:


Consideremos un polgono definido por sus vrtices v0, v1, , vn-1. Sea Sis el subproblema de tamao s partiendo del vrtice vi, es decir, el problema de la triangulacin minimal del polgono formado por los s vrtices que comienzan en vi y siguen en el sentido de las agujas del reloj (vi, vi+1, , vi+s-1), contando con la cuerda (vi,vi+s-1).
v2 v1 v3 v4 v5 v6

S65

v0

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 99

Triangulacin de polgonos
Ahora, para triangular el polgono Sis, hay tres posibilidades: 1) Tomar el vrtice vi+1 para formar un tringulo con las cuerdas (vi,vi+s-1) y (vi+1,vi+s-1) y con el tercer lado (vi,vi+1), y despus resolver el subproblema Si+1,s-1. 2) Tomar el vrtice vi+s-2 para formar un tringulo con las cuerdas (vi,vi+s-1) y (vi,vi+s-2) y con el tercer lado (vi+s-2,vi+s-1), y despus resolver el subproblema Si,s-1. 3) Para algn k entre 2 y s-3, tomar el vrtice vi+k y formar un tringulo con lados (vi,vi+k), (vi+k,vi+s-1) y (vi,vi+s-1), y despus resolver los subproblemas Si,k+1 y Si+k,s-k.
v2 v1 v3

S04 S65

v0 v6 v2 v1 v3

S64
v0 v6 v2 v1 v3

S65

S13 S65

v0

S63

v6
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 100

Triangulacin de polgonos
Por tanto, si denotamos por Cis el coste de la triangulacin Sis, se obtiene la siguiente relacin recursiva: Cis =
1 k s 2

min

Ci , k + 1 + Ci + k , s k + D (vi , vi + k ) + { + D (vi + k , vi + s 1 )

para 0in-1, 4sn; donde: D(vp,vq) es la longitud de la cuerda entre los vrtices vp y vqsi vp y vq no son vrtices adyacentes en el polgono; y D(vp,vq) es 0 si vp y vq son adyacentes. Adems, Cis = 0 para 0in-1, 2s<4.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 101

Triangulacin de polgonos

Solucin recursiva inmediata:


Aplicando la ecuacin recurrente anterior Problema: el nmero de llamadas crece exponencialmente con el nmero de vrtices Sin embargo, sin contar el problema original, slo hay n(n-4) subproblemas diferentes que hay que resolver Por tanto, la solucin recursiva resuelve muchas veces un mismo subproblema

Solucin eficiente:
Utilizacin de una tabla para almacenar los costes de las soluciones de los subproblemas

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 102

Triangulacin de polgonos
C65 = min{ C62 + C04 + D (v6 , v 0 ) + D (v0 , v 3 ) , C63 + C13 + D (v6 , v 1 ) + D (v1 , v 3 ) , C64 + C22 + D (v6 , v 2 ) + D (v2 , v 3 ) } = = min {38,09 ; 38,52 ; 43,97 } = 38,09
(8,26) (0,20) v1 v2 v3 (15,26) v4 (27,21)

(0,10) v0 v6
7 6 5

v5 (22,12) (10,0)

D (v2 , v3 ) = D (v 6 , v 0 ) = 0 (son aristas y no cuerdas) D (v 6 , v 2 ) = 26,08; D (v 1 , v 3 ) = 16,16; D (v 6 , v 1 ) = 22, 36; D (v 0 , v 3 ) = 21,93

C07 = 75, 43 C06 = C16 = C26 = C36 = C46 = C56 = C66 = 53, 54 55, 22 57 , 58 64 ,69 59,78 59,78 63,62 C05 = C15 = C25 = C35 = C45 = C55 = C65 = 37 , 54 31, 81 35, 49 37 ,74 45, 50 39,98 38,09 C04 = C14 = C24 = C34 = C44 = C54 = C64 = 16,16 16,16 15,65 15,65 22,69 22,69 17 , 89 C03 = C13 = C23 = C33 = C43 = C53 = C63 = 0 0 (2) 0 0 0 0 0 (2) C02 = C12 = C22 = C32 = C42 = C52 = C62 = 0
i=0

(1)

4 3 2 s

(3)

0
1

(3)
2

0
3

0
4

0
5

(1)

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 103

Triangulacin de polgonos

Hemos calculado el coste de la triangulacin mnima pero, cul es esa triangulacin?


Para cada posicin (i,s) de la tabla se necesita almacenar, adems del coste, el valor del ndice k que produjo el mnimo. Entonces la solucin consta de las cuerdas (vi,vi+k) y (vi+k,vi+s-1) (a menos que una de ellas no sea cuerda, porque k=1 o k=s-2), ms las cuerdas que estn implicadas por las soluciones de Si,k+1 y Si+k,s-k.

J. Campos - C.P.S.

Esquemas algortmicos - Programacin dinmicaPg. 104

Triangulacin de polgonos

En el ejemplo:
El valor de C07 procede de k=5. Es decir, el problema S07 se divide en S06 y S52. S52 es un problema trivial, de coste 0. As, se introduce la cuerda (v0,v5), de coste 2209, y se debe resolver S06.
v2 v3 v1 2 3 v5 v4

2 1 v6

v0

El valor de C06 procede de k=2. Por tanto, el problema se divide en S03 y S24. S03 es un tringulo con vrtices v0, v1 y v2, luego no precisa ser resuelto, mientras que S24 es un cuadriltero, definido por v2, v3, v4 y v5, y debe ser resuelto. Adems, hay que incluir los costes de las cuerdas (v0,v2) y (v2,v5), que son 1789 y 1980. El valor de C24 se obtiene con k=1, dando los subproblemas S22 y S33, que tienen tamao menor o igual que tres y, por tanto, coste 0. Se introduce la cuerda (v3,v5), con coste 1565.
J. Campos - C.P.S. Esquemas algortmicos - Programacin dinmicaPg. 105

Você também pode gostar