Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduccin
sujeto a pi xi C
1i n
con 0 xi 1, bi 0, pi 0, 1 i n
Ejemplo:
n=3 C=15
(b1,b2,b3)=(38,40,24)
(p1,p2,p3)=(9,6,5)
con xi {0,1} , k i l
Adems,
n 1 (c ) 0, para cualquier capacidad c
g
v
g1 (C)
Ambas ecuaciones permiten calcular,
que es el valor de una solucin ptima de
mochila(1,n,C).
Adems,
0 (c ) 0, para cualquier capacidad c
g
w
gn (C)
Ambas ecuaciones permiten calcular,
que es el valor de una solucin ptima de
mochila(1,n,C).
funcing(j,c:nat)devuelvenat
funcing(j,c:nat)devuelvenat
principio
principio
sij=0entoncesdevuelve0
sij=0entoncesdevuelve0
sino
sino
sic<p[j]
sic<p[j]
entoncesdevuelveg(j1,c)
entoncesdevuelveg(j1,c)
sino
sino
sig(j1,c)?g(j1,cp[j])+b[j]
sig(j1,c)?g(j1,cp[j])+b[j]
entonces
entonces
devuelveg(j1,c)
devuelveg(j1,c)
sino
sino
devuelveg(j1,cp[j])+b[j]
devuelveg(j1,cp[j])+b[j]
fsi
fsi
fsi
fsi
fsi
fsi
fin
fin
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.
el segundo, C valores.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
p1 9 0 0 0 0 0 0 0 0 0 38 38 38 38 38 38 38
p2 6 0 0 0 0 0 0 40 40 40 40 40 40 40 40 40 78
p3 5 0 0 0 0 0 24 40 40 40 40 40 64 64 64 64 78
g j (c ) max g j 1(c), g j 1(c p j ) b j
El problema de la mochila 0-1
goritmomochila(entp,b:vect[1..n]denat;
goritmomochila(entp,b:vect[1..n]denat;
entCap:nat;
entCap:nat;
salg:vect[0..n,0..Cap]denat)
salg:vect[0..n,0..Cap]denat)
riablesc,j:nat
riablesc,j:nat
incipio
incipio
parac:=0hastaCaphacerg[0,c]:=0fpara;
parac:=0hastaCaphacerg[0,c]:=0fpara;
paraj:=1hastanhacerg[j,0]:=0fpara;
paraj:=1hastanhacerg[j,0]:=0fpara;
paraj:=1hastanhacer
paraj:=1hastanhacer
parac:=1hastaCaphacer
parac:=1hastaCaphacer
sic<p[j]
sic<p[j]
entonces
entonces
g[j,c]:=g[j1,c]
g[j,c]:=g[j1,c]
sino
sino
sig[j1,c]?g[j1,cp[j]]+b[j]
sig[j1,c]?g[j1,cp[j]]+b[j]
entonces
entonces
g[j,c]:=g[j1,c]
g[j,c]:=g[j1,c]
sino
sino
g[j,c]:=g[j1,cp[j]]+b[j]
g[j,c]:=g[j1,cp[j]]+b[j]
fsi
fsi
fsi
fsi
fpara
fpara
fpara
fpara
nn
El problema de la mochila 0-1
ritmotest(entj,c:nat)
oritmotest(entj,c:nat)
cipio
ncipio
j>0entonces
ij>0entonces
sic<p[j]entoncestest(j1,c)
sic<p[j]entoncestest(j1,c)
sino
sino
sig[j1,cp[j]]+b[j]>g[j1,c]
sig[j1,cp[j]]+b[j]>g[j1,c]
entonces
entonces
test(j1,cp[j]);
test(j1,cp[j]);
escribir('meter',j)
escribir('meter',j)
sinotest(j1,c)
sinotest(j1,c)
fsi
fsi
fsi
fsi
i
si
El problema de la mochila 0-1
Consideraciones finales
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 V4 V5
2 3
8
7 5
5 1 5 11
7 9
o 1 3 4 6 8 10 d
2 5 6 4
12
4 9 9
V1 V2 V3 V4 V5
2 3
8
7 5
5 1 5 11
7 9
o 1 3 4 6 8 10 d
2 5 6 4
12
4 9 9
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.
Camino de coste mnimo en un
grafo multietapa
v2,1 N 2,0
v3,1
N 1,1
N 2,2 max {N 3,i }
N 2,3 i 0,1,2,3
N max {N 3,i }
N 2,1 N 2,2 2,3 i 0,1
N 1,3 N 2,2
v2,3 v3,3
N 2,0
N 2,1 N 3,0
N 1,4 N 2,4
v2,4 v3,4
N 2,0
Camino de coste mnimo en un
grafo multietapa
Principio de optimalidad:
c( j ,d) , si ( j ,d) A
C (k 1, j)
, en otro caso
C (i , j) min c( j ,l) C (i 1,l) , para 1 i k 2
lV i 1
( j ,l)A
V1 V2 V3 V4 V5
2 3
8
7 5
5 1 5 11
7 9
o 1 3 4 6 8 10 d
2 5 6 4
12
4 9 9
Camino de coste mnimo en un
grafo multietapa
c( j ,d) , si ( j ,d) A
C (k 1, j)
, en otro caso
C (i , j) min c( j ,l) C (i 1,l) , para 1 i k 2
lV i 1
( j ,l)A
V1 V2 V3 V4 V5
2 3
8
7 5
5 1 5 11
7 9
o 1 3 4 6 8 10 d
2 5 6 4
12
4 9 9
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 V2 V3 V4 V5
2 3
8
7 5
5 1 5 11
7 9
o 1 3 4 6 8 10 d
2 5 6 4
12
4 9 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
v2 D(1,1) 2
v3 D(2,D(1,1)) 6
v4 D(3,D(2,D(1,1))) 8
Camino de coste mnimo en un
grafo multietapa
oritmomultietapa(entG=(V,A,c):grafo;
oritmomultietapa(entG=(V,A,c):grafo;
entk,n:nat;
entk,n:nat;
salP:vect[1..k]de1..n)
salP:vect[1..k]de1..n)
vrticesestnnumeradosdeformaquelos
svrticesestnnumeradosdeformaquelos
icesdelosvrticesdeunaetapasonmayores
dicesdelosvrticesdeunaetapasonmayores
losndicesdelosdelaetapaanterior.
elosndicesdelosdelaetapaanterior.
primerndicedeC*yD,quesloidentificaba
primerndicedeC *
yD,quesloidentificaba
etapa,sehasuprimido.}
etapa,sehasuprimido.}
iablesC:vect[1..n]dereal;
iablesC:vect[1..n]dereal;
D:vect[1..n]de1..n;
D:vect[1..n]de1..n;
j,r:1..n
j,r:1..n
ncipio
ncipio
[n]:=0.0;
[n]:=0.0;{ClculodeC
{ClculodeCyD}
*
*
yD}
araj:=n1descendiendohasta1hacer
araj:=n1descendiendohasta1hacer
r:=vrticet.q.(j,r)A3
r:=vrticet.q.(j,r)A3
c(j,r)+C[r]esmnimo;
c(j,r)+C[r]esmnimo;
C[j]:=c(j,r)+C[r];
C[j]:=c(j,r)+C[r];
D[j]:=r
D[j]:=r
para;
para;
[1]:=1;P[k]:=n;
[1]:=1;P[k]:=n;{Construccindelcamino}
{Construccindelcamino}
araj:=2hastak1hacer
araj:=2hastak1hacer
P[j]:=D[P[j1]]
P[j]:=D[P[j1]]
para
para
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)
C (i , j) min c(l , j) C (i 1,l) , para 3 i k
lV i 1
(l , j)A
V1 V2 V3 V4 V5
2 3
8
7 5
5 1 5 11
7 9
o 1 3 4 6 8 10 d
2 5 6 4
12
4 9 9
Camino de coste mnimo en un
grafo multietapa
oritmomultietapaB(entG=(V,A,c):grafo;
oritmomultietapaB(entG=(V,A,c):grafo;
entk,n:nat;
entk,n:nat;
salP:vect[1..k]de1..n)
salP:vect[1..k]de1..n)
vrticesestnnumeradosdeformaquelos
svrticesestnnumeradosdeformaquelos
icesdelosvrticesdeunaetapasonmayores
dicesdelosvrticesdeunaetapasonmayores
losndicesdelosdelaetapaanterior.
elosndicesdelosdelaetapaanterior.
primerndicedeC*yD,quesloidentificaba
primerndicedeC *
yD,quesloidentificaba
etapa,sehasuprimido.}
etapa,sehasuprimido.}
iablesC:vect[1..n]dereal;
iablesC:vect[1..n]dereal;
D:vect[1..n]de1..n;
D:vect[1..n]de1..n;
j,r:1..n
j,r:1..n
ncipio
ncipio
[1]:=0.0;
[1]:=0.0;{ClculodeC
{ClculodeCyD}
*
*
yD}
araj:=2hastanhacer
araj:=2hastanhacer
r:=vrticet.q.(r,j)A3
r:=vrticet.q.(r,j)A3
c(r,j)+C[r]esmnimo;
c(r,j)+C[r]esmnimo;
C[j]:=c(r,j)+C[r];
C[j]:=c(r,j)+C[r];
D[j]:=r
D[j]:=r
para;
para;
[1]:=1;P[k]:=n;
[1]:=1;P[k]:=n;{Construccindelcamino}
{Construccindelcamino}
araj:=k1descendiendohasta2hacer
araj:=k1descendiendohasta2hacer
P[j]:=D[P[j+1]]
P[j]:=D[P[j+1]]
para
para
n1
T (n) T (i)T (n i) , para n 1
i 1
T (1) 1
Nmeros de Catalan
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
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.
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
para i 1, 2,K ,n s
El
Mitercer
Mi 1Lcaso Mi s representa que para calcular
se intentan todas las
(Mi Mi 1L Mk ) (Mk 1Mk 2L Mi s )
posibilidades
y se escoge la mejor.
De forma ms compacta:
0, si i j
mij min { mik mk 1, j di 1dkd j } , si i j
i k j
Multiplicacin de una
secuencia de matrices
j 1 2 3 4
La matriz es: i 1 0 5785 1530 2856
s3
2 0 1335 1845
s2
3 0 9078
s 1
4 0
s 0
Multiplicacin de una
secuencia de matrices
goritmoparentOpt(entd:vect[0..n]denat;
goritmoparentOpt(entd:vect[0..n]denat;
salm:vect[1..n,1..n]denat;
salm:vect[1..n,1..n]denat;
salkm:vect[1..n,1..n]de1..n)
salkm:vect[1..n,1..n]de1..n)
eslamatriz[mij]definidaantes;
eslamatriz[m ij]definidaantes;
[i,j]guardaelndicekparaelquesealcanza
m[i,j]guardaelndicekparaelquesealcanza
mnimoalcalcularm[i,j].}
lmnimoalcalcularm[i,j].}
riablesi,r,j,k,q:nat;
riablesi,r,j,k,q:nat;
incipio
incipio
parai:=1hastanhacer
parai:=1hastanhacer
m[i,i]:=0
m[i,i]:=0
fpara;
fpara;
parar:=2hastanhacer
parar:=2hastanhacer
parai:=1hastanr+1hacer
parai:=1hastanr+1hacer
j:=i+r1;
j:=i+r1;
m[i,j]:=?;
m[i,j]:=?;
parak:=ihastaj1hacer
parak:=ihastaj1hacer
q:=m[i,k]+m[k+1,j]+d[i1]*d[k]*d[j];
q:=m[i,k]+m[k+1,j]+d[i1]*d[k]*d[j];
siq<m[i,j]
siq<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
nn
Multiplicacin de una
secuencia de matrices
Coste en tiempo:
(n3)
Coste en memoria:
(n2)
Multiplicacin de una
secuencia de matrices
uncinmultSec(M:vect[1..n]dematriz;
funcinmultSec(M:vect[1..n]dematriz;
km:vect[1..n,1..n]de1..n;
km:vect[1..n,1..n]de1..n;
i,j:1..n)
i,j:1..n)
devuelvematriz
devuelvematriz
ariablesX,Y:matriz
variablesX,Y:matriz
rincipio
principio
sij>i
sij>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];
devuelvemult(X,Y)
devuelvemult(X,Y)
sino
sino
devuelveM[i]
devuelveM[i]
fsi
fsi
in
fin
Caminos mnimos entre todos
los pares de nodos de un grafo
.W. Floyd:
Algorithm 97: Shortest path,
ommunications 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.
Dk (i , j) Dk 1 (i ,k ) Dk 1 (k , j)
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
Caminos mnimos entre todos
los pares de nodos de un grafo
{Pre:gesungrafodirigidoetiquetadosin
{Pre:gesungrafodirigidoetiquetadosin
ciclosnegativos}
ciclosnegativos}
funcinFloyd(g:grafo)
funcinFloyd(g:grafo)
devuelvevector[vrt,vrt]deetiq
devuelvevector[vrt,vrt]deetiq
variablesD:vector[vrt,vrt]deetiq;
variablesD:vector[vrt,vrt]deetiq;
u,v,w:vrt;et,val:etiq
u,v,w:vrt;et,val:etiq
principio
principio
{inicialmenteladistanciaentredosvrtices
{inicialmenteladistanciaentredosvrtices
tieneelvalordelaaristaquelosune;
tieneelvalordelaaristaquelosune;
lasdiagonalesseponenacero}
lasdiagonalesseponenacero}
paratodovenvrthacer
paratodovenvrthacer
paratodowenvrthacer
paratodowenvrthacer
D[v,w]:=etiqueta(g,v,w)
D[v,w]:=etiqueta(g,v,w)
{?sinohayarco}
{?sinohayarco}
fpara;
fpara;
D[v,v]:=0
D[v,v]:=0
fpara;
fpara;
...
...
Caminos mnimos entre todos
los pares de nodos de un grafo
...
...
paratodouenvrthacer
paratodouenvrthacer
paratodovenvrthacer
paratodovenvrthacer
paratodowenvrthacer
paratodowenvrthacer
siD[v,u]+D[u,w]<D[v,w]
siD[v,u]+D[u,w]<D[v,w]
entoncesD[v,w]:=D[v,u]+D[u,w]
entoncesD[v,w]:=D[v,u]+D[u,w]
fsi
fsi
fpara
fpara
fpara
fpara
fpara;
fpara;
devuelveD
devuelveD
fin
fin
{Post:D=caminosMnimos(g)}
{Post:D=caminosMnimos(g)}
El problema:
Disear un sistema compuesto de varios
dispositivos conectados en serie.
D1 D2 D3 Dn
1 (1 r i )mi
1i n i (mi )
Un problema de fiabilidad de
sistemas
sujeto a ci mi c
1i m
mi 1 y entero, 1 i n
Denotemos:
fi (x) mximo j (m j )
1 j i
sujeto a cjm j x
1 j i
1 mj u j , 1 j i
f n (c) max
1mn un
n (mn ) f n 1 (c cnmn )
f i (x) max i (mi ) f i 1 (x ci mi )
1mi ui
Recordar:
Ms vueltas!
El problema del viajante de
comercio
min L1 j g ( j ,V \{1, j})
2 j n
El problema del viajante de
comercio
g (i ,S) min Lij g ( j ,S \{ j})
jS
(*)
Adems:
g (i ,) Li 1 , i 2, 3,,n
Mtodo de resolucin:
Usar (*) y calcular g para todos los conjunto
Inicializacin:
g (3,{ 2, 4}) min L32 g (2,{ 4}) , L24 g (4 ,{ 2})
g (4 ,{ 2, 3}) min L42 g (2,{ 3}) , L43 g (3,{ 2})
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.
El problema del viajante de
comercio
En el ejemplo:
J(2,{3,4}) = 4; J(3,{2,4}) = 4;
J(4,{2,3}) = 2; J(1,{2,3,4}) = 2.
1 J(1,{2,3,4}) = 2
J(2,{3,4}) = 4
J(4,{3}) = 3
1
El problema del viajante de
comercio
Tiempo de clculo:
n2 n 2
2(n 1) (n 1)k
k 1
k
n2 2n
r
r
Puesto que k r 2
k r 1
k 1
funcing(i,S)devuelvenat
funcing(i,S)devuelvenat
variablesmsCorto,distancia,j:nat
variablesmsCorto,distancia,j:nat
principio
principio
siS=entoncesdevuelveL[i,1]
siS=entoncesdevuelveL[i,1]
sino
sino
sigtab[i,S]?0
sigtab[i,S]?0
entoncesdevuelvegtab[i,S]
entoncesdevuelvegtab[i,S]
sino
sino
msCorto:=?;
msCorto:=?;
paratodojenShacer
paratodojenShacer
distancia:=L[i,j]+g(j,S\{j});
distancia:=L[i,j]+g(j,S\{j});
sidistancia<msCorto
sidistancia<msCorto
entoncesmsCorto:=distancia
entoncesmsCorto:=distancia
fsi
fsi
fpara;
fpara;
gtab[i,S]:=msCorto;
gtab[i,S]:=msCorto;
devuelvemsCorto
devuelvemsCorto
fsi
fsi
fsi
fsi
fin
fin
Planificacin de trabajos
El problema:
Sea un sistema en el que la realizacin de un con-
junto de trabajos requiere la ejecucin por parte
de un conjunto de agentes (o procesadores) de
una serie de tareas diferentes para cada trabajo.
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:
tiempo 0 1 2 3 4 5 6 7 8 9 10 11 12
P1 T11
(a)
P2 T22 T21 T22
P3 T31 T32
tiempo 0 1 2 3 4 5 6 7 8 9 10 11 12
P1 T11
(b)
P2 T22 T21
P3 T32 31 T
La planificacin (b) se dice no apropiativa (non-
preemptive) 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.
Planificacin de trabajos
Caso m=2:
Denotemos T1i como ai y T2i como bi.
P1 a5 a1 a3 a2 a4
P2 b5 b1 b3 b2 b4
planificacin (5,1,3,2,4)
Planificacin de trabajos
Principio de optimalidad:
0 t+bi-ai
ai aj, jS\{i}
bi bj, jS\{i}
0 bi
Planificacin de trabajos
b j bi a j max{t ai ,a j bi ,0}
Entonces:
g (S,t) g (S,t)
max{t ,ai a j bi ,ai } max{t ,a j ai b j ,a j }
Es decir:
ai a j max{ bi , a j } a j ai max{b j , ai }
O sea:
Ahora, si
min{a1 ,a2 ,K ,an ,b1 ,b2 ,K bn } ai
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).