Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
maximizar
El objetivo b
es llenar i ximochila, de capacidad
la
1i n
C, de manera que se maximice el beneficio.
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,
v
g1(C)
Ambas ecuaciones permiten calcular,
que es el valor de una solucin ptima de
mochila(1,n,C).
Adems,
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.
distintos y
el segundo, C valores.
gj (c) max gj1(c), gj1(c pj ) bj
El problema de la
mochila 0-1
algoritmomochila(entp,b:vect[1..n]denat;
algoritmomochila(entp,b:vect[1..n]denat;
entCap:nat;
entCap:nat;
salg:vect[0..n,0..Cap]denat)
salg:vect[0..n,0..Cap]denat)
variablesc,j:nat
variablesc,j:nat
principio
principio
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
fin
fin
El problema de la
mochila 0-1
algoritmotest(entj,c:nat)
algoritmotest(entj,c:nat)
principio
principio
sij>0entonces
sij>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
fsi
fsi
fin
fin
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
V1 d, respectivamente.
destino, 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
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
proyecto i.
Hay n+1 vrtices vi,j, 0jn, en cada
etapa i, 2ir.
Las etapas 1 y r+1 tienen un vrtice,
un
camino de coste mximo de o a d.
Para convertirlo en un problema de
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
algoritmomultietapa(entG=(V,A,c):grafo;
algoritmomultietapa(entG=(V,A,c):grafo;
entk,n:nat;
entk,n:nat;
salP:vect[1..k]de1..n)
salP:vect[1..k]de1..n)
{Losvrticesestnnumeradosdeformaquelos
{Losvrticesestnnumeradosdeformaquelos
ndicesdelosvrticesdeunaetapasonmayores
ndicesdelosvrticesdeunaetapasonmayores
quelosndicesdelosdelaetapaanterior.
quelosndicesdelosdelaetapaanterior.
ElprimerndicedeC
ElprimerndicedeCyD,quesloidentificaba
*
*
yD,quesloidentificaba
laetapa,sehasuprimido.}
laetapa,sehasuprimido.}
variablesC:vect[1..n]dereal;
variablesC:vect[1..n]dereal;
D:vect[1..n]de1..n;
D:vect[1..n]de1..n;
j,r:1..n
j,r:1..n
principio
principio
C[n]:=0.0;
C[n]:=0.0;{ClculodeC
{ClculodeCyD}
*
*
yD}
paraj:=n1descendiendohasta1hacer
paraj:=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
fpara;
fpara;
P[1]:=1;P[k]:=n;
P[1]:=1;P[k]:=n;{Construccindelcamino}
{Construccindelcamino}
paraj:=2hastak1hacer
paraj:=2hastak1hacer
P[j]:=D[P[j1]]
P[j]:=D[P[j1]]
fpara
fpara
fin
fin
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) 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
algoritmomultietapaB(entG=(V,A,c):grafo;
algoritmomultietapaB(entG=(V,A,c):grafo;
entk,n:nat;
entk,n:nat;
salP:vect[1..k]de1..n)
salP:vect[1..k]de1..n)
{Losvrticesestnnumeradosdeformaquelos
{Losvrticesestnnumeradosdeformaquelos
ndicesdelosvrticesdeunaetapasonmayores
ndicesdelosvrticesdeunaetapasonmayores
quelosndicesdelosdelaetapaanterior.
quelosndicesdelosdelaetapaanterior.
ElprimerndicedeC
ElprimerndicedeCyD,quesloidentificaba
*
*
yD,quesloidentificaba
laetapa,sehasuprimido.}
laetapa,sehasuprimido.}
variablesC:vect[1..n]dereal;
variablesC:vect[1..n]dereal;
D:vect[1..n]de1..n;
D:vect[1..n]de1..n;
j,r:1..n
j,r:1..n
principio
principio
C[1]:=0.0;
C[1]:=0.0;{ClculodeC
{ClculodeCyD}
*
*
yD}
paraj:=2hastanhacer
paraj:=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
fpara;
fpara;
P[1]:=1;P[k]:=n;
P[1]:=1;P[k]:=n;{Construccindelcamino}
{Construccindelcamino}
paraj:=k1descendiendohasta2hacer
paraj:=k1descendiendohasta2hacer
P[j]:=D[P[j+1]]
P[j]:=D[P[j+1]]
fpara
fpara
fin
fin
M (M1M 2L Mi )(Mi 1M i 2L M n)
Entonces tenemos T(i)T(n-i) formas distintas.
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 parteMi 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
s 0: tales
m que
0,j-i=s:
i ,i para i 1,2,K ,n
para i 1,2,K ,n s
Mi Mi 1L M i s
El tercer caso(Mrepresenta que para
i M i 1L M k)(M k1M k 2L M i s)
calcular
se intentan todas las
posibilidades
0, la mejor.
y se escoge si i j
De mij min
forma ms ik mk1, j di 1dkdj }, si i j
{mcompacta:
i k j
Multiplicacin de una
secuencia de matrices
j 1 2 3 4
i 1 0 57851530 2856
La matriz es: s 3
2 0 1335 1845
s 2
3 0 9078
s1
4 0
s0
Multiplicacin de una
secuencia de matrices
algoritmoparentOpt(entd:vect[0..n]denat;
algoritmoparentOpt(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)
{meslamatriz[m
{meslamatriz[mijij]definidaantes;
]definidaantes;
km[i,j]guardaelndicekparaelquesealcanza
km[i,j]guardaelndicekparaelquesealcanza
elmnimoalcalcularm[i,j].}
elmnimoalcalcularm[i,j].}
variablesi,r,j,k,q:nat;
variablesi,r,j,k,q:nat;
principio
principio
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
fin
fin
Multiplicacin de una
secuencia de matrices
Coste en tiempo:
(n3)
Coste en memoria:
(n2)
Multiplicacin de una
secuencia de matrices
funcinmultSec(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
variablesX,Y:matriz
variablesX,Y:matriz
principio
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
fin
fin
Caminos mnimos entre
todos
los pares de nodos de
R.W. un grafo
Floyd:
Algorithm 97: Shortest path,
Communications of the ACM, 5(6), p. 345, 19
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.
Entonces:
D(i , j) min min Dk1(i ,k) Dk 1(k, j) , C(i , j)
1 kn
D0(i , j) C(i , j), 1 i n, 1 j n
{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
Entonces, la fiabilidad
n del sistema sistema
entero es: i 1 i
r
D1 D2 D3 Dn
D1 D2 D3 Dn
D1 D3 Dn
D3
Fase 1 Fase 2 Fase 3 Fase n
Si la fase i contiene mi copias de Di, la
probabilidad de que toda la fase falle es
(1 ri )mi
1 (1r 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 (las copias de un
1 (1rno m
mismo dispositivo i ) son completamente
i
independien-tes pues su diseo es comn,
por ejemplo);
si denotamos la fiabilidad de la fase i pori (mi )
entonces la fiabilidad del sistema es:
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:
Recordar:
(circuito hamiltoniano).
El problema del viajante
de comercio
min L1j 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
todos
los conjuntos S a los que slo les falta
un vrtice (distinto del 1) basta
calcular
g(1,V\{1}).
El problema del viajante
de comercio
Inicializacin:
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.
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
k1
k
n22n
r
r
k
Puesto que k 1 k
r 2r 1
Implementacin recursiva
ineficiente:
funcing(i,S)devuelvenat
funcing(i,S)devuelvenat
variablesmsCorto,distancia,j:nat
variablesmsCorto,distancia,j:nat
principio
principio
siS=
siS=
entonces
entonces
devuelveL[i,1]
devuelveL[i,1]
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
entonces
entonces
msCorto:=distancia
msCorto:=distancia
fsi
fsi
fpara;
fpara;
devuelvemsCorto
devuelvemsCorto
fsi
fsi
fin
fin
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)
P2planificacin
La T22 (b)Tse
21 dice no apropiativa (non-
preemptive)
P3 porqueT32el procesamiento
T31 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
El tiempo de
F(S)
terminacin,
max f i (S) f(S), de la
planificacin S es:
1i n
Caso m=2:
Denotemos T1i como ai y T2i como bi.
planificacin (5,1,3,2,4)
Planificacin de trabajos
Principio de optimalidad:
0 t+bi-ai
0 bi
Planificacin de trabajos
bj bi aj ai max{t,ai aj bi ,ai }
g(S,t) aSi
j los
ai dos
g(S\primeros trabajos
{j ,i},bi bj ai aj fueran je
max{t,aj i:ai bj ,aj })
Planificacin de trabajos
Entonces:
g(S,t) g(S,t)
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).