Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4-Programacion Dinamica
4-Programacion Dinamica
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
Programacin dinmica:
Introduccin
bi xi
1i n
pi xi C
1i n
J. Campos - C.P.S.
Programacin dinmica:
Introduccin
Ejemplo:
n=3
C=15
(b1,b2,b3)=(38,40,24)
(p1,p2,p3)=(9,6,5)
J. Campos - C.P.S.
Programacin dinmica:
Introduccin
R. Bellman: Dynamic Programming,
Princeton University Press, 1957.
J. Campos - C.P.S.
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.
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.
J. Campos - C.P.S.
maximizar bi xi
i=k
sujeto a
pi xi P
i=k
con xi {0,1}, k i l
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).
Demostracin: Si existe una solucin mejor y 2 ,K, yn
para el problema correspondiente,
entonces y1 , y 2 ,K, yn es mejor
que y1 , y2 ,K, yn para el problema mochila(1,n,C),
en contra de la
hiptesis.
J. Campos - C.P.S.
mochila 1, j , pi xi
i =1
mochila j + 1,n ,C pi xi
i=1
J. Campos - C.P.S.
v
Ambas ecuaciones permiten calcular g1 (C) ,
que es el valor de una solucin ptima de
mochila(1,n,C).
J. Campos - C.P.S.
w
w
w
g j (c ) = max g j 1(c), g j 1(c p j ) + b j
w
Ambas ecuaciones permiten calcular gn (C) ,
que es el valor de una solucin ptima de
mochila(1,n,C).
J. Campos - C.P.S.
funcin
funcin mochila1(p,b:vector[1..n]
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 00
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
si g(j-1,c)
g(j-1,c)g(j-1,c-p[j])+b[j]
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.
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.
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!
J. Campos - C.P.S.
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
w
w
w
g j (c ) = max g j 1(c) , g j 1(c p j ) + b j
J. Campos - C.P.S.
13
38
40
64
14
38
40
64
15
38
78
78
J. Campos - C.P.S.
algoritmo
algoritmo objetos(ent
objetos(ent p,b:vect[1..n]de
p,b:vect[1..n]de nat;
nat;
ent
ent Cap:nat;
Cap:nat;
ent
ent g:vect[0..n,0..Cap]de
g:vect[0..n,0..Cap]de nat)
nat)
principio
principio
test(n,Cap)
test(n,Cap)
fin
fin
algoritmo
algoritmo test(ent
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.
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.
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
V2
V3
2
5
1
2
3
1
5
4
6
9
7
11
V4
V5
5
9
10 d
12
J. Campos - C.P.S.
V2
V3
2
5
1
2
J. Campos - C.P.S.
3
1
5
4
6
9
7
11
V4
V5
5
9
10 d
12
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.
J. Campos - C.P.S.
v2,0
v3,0
N 1,0
max {N 3,i }
i= 0,1,2,3,4
N 2,1
N 2,0
v2,1
N 1,1
i= 0,1,2,3
N 2,1
N 1,2
v2,2
N 2,0
v3,2
N 2,1
N 1,3
N 2,2
v2,3
N 2,0
N 2,1
N 1,4
v2,4
J. Campos - C.P.S.
max {N 3,i }
N 2,2
N 2,3
o = v 1,0
v3,1
N
N 2,2 2,3
d = v 4,4
max {N 3,i }
i= 0,1
v3,3
N 2,4
N 2,0
max {N 3,i }
i= 0,1,2
N 3,0
v3,4
V2
V3
2
5
1
2
3
1
5
4
7
11
V4
V5
5
9
10 d
12
C (i , j) = min
lV i+ 1
( j ,l)A
V1
V3
2
5
1
2
J. Campos - C.P.S.
si ( j ,d) A
en otro caso
3
1
5
4
6
9
7
11
V4
1 i k 2
V5
5
9
10 d
12
C (i , j) = min
lV i+ 1
( j ,l)A
V1
V3
2
5
si ( j ,d) A
en otro caso
3
1
5
4
V4
8
6
9
7
11
1 i k 2
V5
5
9
10 d
12
J. Campos - C.P.S.
V2
V3
2
5
3
1
3
4
5
4
7
11
V4
V5
5
9
10 d
12
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.
variables
variables C:vect[1..n]de
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 CC* yy D}
D}
para
para j:=n-1
j:=n-1 descendiendo
descendiendo hasta
hasta 11 hacer
hacer
r:=vrtice
r:=vrtice t.q.
t.q. (j,r)
(j,r)AA
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.
J. Campos - C.P.S.
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) =
,
C (i , j) = min
lV i 1
(l , j)A
V1
V2
V3
2
5
1
2
J. Campos - C.P.S.
si (o, j) A
en otro caso
3
1
5
4
6
9
7
11
V4
3 i k
V5
5
9
10 d
12
variables
variables C:vect[1..n]de
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 CC* yy D}
D}
para
para j:=2
j:=2 hasta
hasta nn hacer
hacer
r:=vrtice
r:=vrtice t.q.
t.q. (r,j)
(r,j)AA
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.
Multiplicacin de una
secuencia de matrices
n multip.
10582
54201
2856
4055
26418
J. Campos - C.P.S.
Multiplicacin de una
secuencia de matrices
n 1
T (i)T (n i) ,
para n > 1
i =1
T (1) = 1
Nmeros de Catalan
J. Campos - C.P.S.
Multiplicacin de una
secuencia de matrices
Por ejemplo:
n 1 2 3 4 5 10
15
T (n) 1 1 2 5 14 4862 2674440
J. Campos - C.P.S.
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.
Mtodo:
Construir la matriz [mij], 1ijn, donde mij da el
ptimo (i.e., el nmero de multiplicaciones
escalares requeridas) para la parte Mi Mi +1LM j
del producto total.
La solucin final vendr dada por m1n.
J. Campos - C.P.S.
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:
mi ,i = 0, para i = 1, 2,K,n
s = 1:
1 < s < n: m i ,i +s =
min
i ki + s 1
para i = 1, 2,K,n s
k<
j
J. Campos - C.P.S.
Multiplicacin de una
secuencia de matrices
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
j =1 2
3
4
i = 1 0 5785 1530 2856
s=3
2
1335 1845
s=2
9078
s =1
0
s =0
J. Campos - C.P.S.
Multiplicacin de una
secuencia de matrices
J. Campos - C.P.S.
Multiplicacin de una
secuencia de matrices
algoritmo
algoritmo parentOpt(ent
parentOpt(ent d:vect[0..n]de
d:vect[0..n]de nat;
nat;
sal
sal m:vect[1..n,1..n]de
m:vect[1..n,1..n]de nat;
nat;
sal
sal km:vect[1..n,1..n]de
km:vect[1..n,1..n]de 1..n)
1..n)
{m
{m es
es la
la matriz
matriz [m
[mijij]] definida
definida antes;
antes;
km[i,j]
km[i,j] guarda
guarda el
el ndice
ndice kk 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 nn hacer
hacer
m[i,i]:=0
m[i,i]:=0
fpara;
fpara;
para
para r:=2
r:=2 hasta
hasta nn 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.
Multiplicacin de una
secuencia de matrices
Coste en tiempo:
(n3)
Coste en memoria:
(n2)
J. Campos - C.P.S.
Multiplicacin de una
secuencia de matrices
funcin
funcin multSec(M:vect[1..n]de
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.
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.
J. Campos - C.P.S.
Comparaciones de secuencias
Ejemplo:
abbc
n de pasos?
babb
Una solucin:
babb
abbc
1: borrar a
bbc
3: sustituir c por b
2: insertar a
babc
babb
1: insertar b
2: borrar c
babbc
J. Campos - C.P.S.
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.
Comparaciones de secuencias
Si denotamos:
0, si ai = bj
c(i , j) =
1, si ai bj
Se tiene:
C (n 1, m ) + 1
(borrando an )
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
j, 0 j m
Orden de clculo:
i
J. Campos - C.P.S.
Comparaciones de secuencias
algoritmo
algoritmo compSec(ent
compSec(ent A:cad[n];
A:cad[n];
ent
ent B:cad[m];
B:cad[m];
sal
sal C:vect[0..n,0..m]de
C:vect[0..n,0..m]de nat;
nat;
sal
sal T:vect[1..n,1..m]de
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 nn hacer
hacer C[i,0]:=i
C[i,0]:=i fpara;
fpara;
para
para j:=0
j:=0 hasta
hasta mm hacer
hacer C[0,j]:=j
C[0,j]:=j fpara;
fpara;
para
para i:=1
i:=1 hasta
hasta nn hacer
hacer
para
para j:=1
j:=1 hasta
hasta mm 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 aa C[i,j]}
C[i,j]}
fpara
fpara
fpara
fpara
fin
fin
J. Campos - C.P.S.
Comparaciones de secuencias
algoritmo
algoritmo res(ent
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 jj 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 ii 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 BB 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 AA 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.
Comparaciones de secuencias
Coste:
En tiempo: (nm)
En espacio: (nm)
J. Campos - C.P.S.
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.
J. Campos - C.P.S.
1 k n
D0 (i , j) = C (i , j) , 1 i n , 1 j n
J. Campos - C.P.S.
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.
funcin
funcin Floyd(g:grafo)
Floyd(g:grafo)
devuelve
devuelve vector[vrt,vrt]
vector[vrt,vrt] de
de etiq
etiq
variables
variables D:vector[vrt,vrt]
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 aa cero}
cero}
para
para todo
todo vv en
en vrt
vrt hacer
hacer
para
para todo
todo ww en
en vrt
vrt hacer
hacer
D[v,w]:=etiqueta(g,v,w)
D[v,w]:=etiqueta(g,v,w)
{
{ si
si no
no hay
hay arco}
arco}
fpara;
fpara;
D[v,v]:=0
D[v,v]:=0
fpara;
fpara;
...
...
J. Campos - C.P.S.
J. Campos - C.P.S.
Espacio:
Floyd exige (n2) mientras que Dijkstra precisa
(n)
J. Campos - C.P.S.
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
n
i=1
i =0
pi + qi = 1
J. Campos - C.P.S.
Ejemplo:
qi = 0, 0 i 7
J. Campos - C.P.S.
i =1
i =0
pi (di + 1) + qi di
Palabra
a
al
ama
eso
si
sin
su
Probabilidad
0, 22
0,18
0, 20
0,05
0, 25
0,02
0,08
Solucin 1:
Creada con
estrategia voraz.
C=2,43
eso
Solucin 2:
al
rbol perfectamente
equilibrado.
sin
ama
si
su
C=2,70
ama
Solucin 3:
Es ptima.
C=2,15
sin
ama
al
eso
su
si
al
eso
su
sin
J. Campos - C.P.S.
k=i + 1
k= i
pk + qk
Cii = 0, si 0 i n
J. Campos - C.P.S.
El ejemplo:
Palabra
a
al
ama
eso
si
sin
su
qi = 0, 0 i 7
Probabilidad
0, 22
0,18
0, 20
0,05
0, 25
0,02
0,08
Cii = 0, si 0 i n
0
1
2
C=
3
4
5
6
7
J. Campos - C.P.S.
0,22
0,58
1,02
1,17
1,83
1,89
2,15
0,18
0,56
0,66
1,21
1,27
1,53
0,20
0,30
0,80
0,84
1,02
0,05
0,35
0,39
0,57
0,25
0,29
0,47
0,02
0,12
0,08
0
7
6
5
4
3
2
1
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 nn 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 nn 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 nn 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 11 nodo.}
nodo.}
...
...
J. Campos - C.P.S.
J. Campos - C.P.S.
Complejidad:
(n3), usando (n2) posiciones de
memoria.
J. Campos - C.P.S.
d j n
i = j d
(r[i + 1, j ] r[i , j 1] + 1)
= r[n d + 1,n ] r[0,d 1] + n d + 1 < 2n
J. Campos - C.P.S.
Un problema de fiabilidad de
sistemas
El problema:
Disear un sistema compuesto de varios
dispositivos conectados en serie.
D1
D2
D3
Dn
i = 1ri
10
J. Campos - C.P.S.
= 0,904
Un problema de fiabilidad de
sistemas
Una forma de aumentar la fiabilidad es duplicar
los dispositivos (en paralelo).
D1
D1
D1
D2
D2
D3
D3
D3
D3
Fase 1
Fase 2
Fase 3
Dn
Dn
Dn
Fase n
1i n i (mi )
J. Campos - C.P.S.
Un problema de fiabilidad de
sistemas
El problema: maximizar la fiabilidad duplicando
los dispositivos y con alguna limitacin en el
coste.
maximizar
sujeto a
i (m i )
1i n
ci mi c
1i m
m i 1 y entero , 1 i n
ui = c + ci cj ci
j =1
J. Campos - C.P.S.
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 )
1 j i
cj m j x
1 mj u j, 1 j i
J. Campos - C.P.S.
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
n (mn )
{
1 m u
f n (c) = max
n
f n 1 (c cnmn )
x, 0 x c
J. Campos - C.P.S.
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.
J. Campos - C.P.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.
10
0
13
8
15
9
0
9
20
10
12
0
Inicializacin:
g(2,) = 5;
g(3,) = 6; g(4,) = 8.
J. Campos - C.P.S.
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.
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.
n 2
k sumas en total
k
n 2
= n 2 2n
2(n 1) + (n 1)k
k
k =1
( )
Puesto que
k k = r 2r 1
k= 1
J. Campos - C.P.S.
espacio
tiempo
nmero de
tiempo
vrtices fuerza bruta prog. dinmica prog. dinmica
n2n
n
n!
n2 2n
5
10
15
20
J. Campos - C.P.S.
120
3628800
1, 31 1012
2, 43 1018
800
102400
7372800
419430400
160
10240
491520
20971520
J. Campos - C.P.S.
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
si gtab[i,S]
gtab[i,S]00
entonces
entonces devuelve
devuelve gtab[i,S]
gtab[i,S]
sino
sino
msCorto:=
msCorto:=;;
para
para todo
todo jj en
en SS 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.
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.
J. Campos - C.P.S.
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
(b)
tiempo 0 1
P1
T11
P2
T22
P3
tiempo 0 1
P1
T11
P2
T22
P3
T21
T22
T31
3
T21
T32
10 11 12
T32
10 11 12
T31
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) }
J. Campos - C.P.S.
1
f i (S)
n 1i n
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.
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
b1 b3 b2
b4
planificacin (5,1,3,2,4)
J. Campos - C.P.S.
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.
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:
)}
ai
t+bi
aj, jS\{i}
ai
bj, jS\{i}
bi
t+bi-ai
0
caso t<ai:
0 t ai ai+bi
aj, jS\{i}
ai
bj, jS\{i}
bi
0
J. Campos - C.P.S.
bi
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
424444444
3
tij
Pero:
J. Campos - C.P.S.
Planificacin de trabajos
Entonces:
g (S,t) g (S ,t )
max {t ,ai + aj bi ,ai } max {t ,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 }
(*)
Planificacin de trabajos
Ahora, si
min{a1 ,a2 ,K,an ,b1 ,b2 ,Kbn } = ai
J. Campos - C.P.S.
Planificacin de trabajos
J. Campos - C.P.S.
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.
Planificacin de trabajos
)}
J. Campos - C.P.S.
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.
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 AA (B)}
(B)}
principio
principio
si
si i=0
i=0
entonces
entonces
devuelve
devuelve 11
sino
sino
si
si j=0
j=0
entonces
entonces
devuelve
devuelve 00
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.
J. Campos - C.P.S.
1
1
1
1
4
3
2
1
0
la matriz se completa
por diagonales desde
la esquina inferior derecha
J. Campos - C.P.S.
La solucin:
funcin
funcin apuestas(n:natural;
apuestas(n:natural; p:real)
p:real)
devuelve
devuelve real
real
variables
variables tabP:vector[0..n,0..n]de
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 nn 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.
Coste:
En tiempo: (n2)
En espacio: (n2)
Pero se puede reducir fcilmente a (n)
J. Campos - C.P.S.
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)
v2
v3
(15,26)
v4 (27,21)
(0,20) v1
v5 (22,12)
(0,10) v0
v6
(10,0)
Triangulacin de polgonos
v3
v4
S65
v5
v0
v6
J. Campos - C.P.S.
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
v3
v1
S65
S64
v0
v6
v2
v1
v3
S13
S65
S63
v0
v6
J. Campos - C.P.S.
Triangulacin de polgonos
Por tanto, si denotamos por Cis el coste de la
triangulacin Sis, se obtiene la siguiente relacin
recursiva:
Cis =
min
1 k s 2
J. Campos - C.P.S.
Triangulacin de polgonos
Solucin eficiente:
Utilizacin de una tabla para almacenar los
costes de las soluciones de los subproblemas
J. Campos - C.P.S.
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)
v2
v3
(15,26)
(0,20) v1
v4
(0,10) v0
v5 (22,12)
v6
7
6
5
(1)
4
3
2
s
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;
(27,21)
D (v 6 ,v 1 ) = 22, 36;
D (v 0 ,v 3 ) = 21,93
(10,0)
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 =
(3)
J. Campos - C.P.S.
0
1
(3)
2
0
3
0
4
0
5
(1)
Triangulacin de polgonos
J. Campos - C.P.S.
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
v1
v0
v3
2
1
v4
3
v5
v6