Você está na página 1de 70

Programacin dinmica:

Introduccin

Recordemos el problema de la mochila:

Se tienen n objetos fraccionables y una mochila.


El objeto i tiene peso p
i
y una fraccin x
i
(0x
i
1 del
objeto i produce un beneficio b
i
x
i
.

El objeti!o es llenar la mochila" de capacidad C" de


manera #ue se ma$imice el beneficio.

%na !ariante: la &mochila 0'1(


x
i
slo toma !alores 0 1" indicando #ue el objeto se
deja fuera o se mete en la mochila.
)os pesos" p
i
" y la capacidad son n*meros
naturales.
)os beneficios" b
i
" son reales no ne+ati!os.

ma$imi,ar b
i
x
i
1i n

sujeto a p
i
x
i
1i n

C
con 0 x
i
1" b
i
> 0" p
i
> 0" 1 i n

Ejemplo:
n-. C-1/
(b
1
"b
0
"b
.
-(.1"20"02
(p
1
"p
0
"p
.
-(3"4"/

Recordar la estrate+ia !ora,:

5omar siempre el objeto #ue proporcione mayor


beneficio por unidad de peso.

Se obtiene la solucin:
(x
1
"x
0
"x
.
-(0"1"1" con beneficio 42

Sin embar+o" la solucin ptima es:


(x
1
"x
0
"x
.
-(1"1"0" con beneficio 61

7or tanto" la estrate+ia !ora, no calcula la


solucin ptima del problema de la mochila
0'1.
Programacin dinmica:
Introduccin

58cnica de pro+ramacin din9mica

Se emplea t:picamente para resol!er problemas de


optimi,acin.

7ermite resol!er problemas mediante una


secuencia de decisiones.
;omo el es#uema !ora,

< diferencia del es#uema !ora," se producen !arias


secuencias de decisiones y slamente al
final se sabe cu9l es la mejor de ellas.

Est9 basada en el principio de optimalidad de


Bellman:
&;ual#uier subsecuencia de decisiones
de una secuencia ptima de decisiones
#ue resuel!e un problema
tambi8n debe ser ptima respecto al subproblema
#ue resuel!e.(
Programacin dinmica:
Introduccin
R. Bellman: Dynamic Programming,
Princeton University Press, 1957.

Supon+amos #ue un problema se resuel!e tras tomar


un secuencia d
1
" d
0
" =" d
n
de decisiones.

Si hay d opciones posibles para cada una de las


decisiones" una t8cnica de fuer,a bruta e$plorar:a un
total de d
n
secuencias posibles de decisiones
(e$plosin combinatoria.

)a t8cnica de pro+ramacin din9mica e!ita


e$plorar todas las secuencias posibles por medio de la
resolucin de subproblemas de tama>o creciente y
almacenamiento en una tabla de las soluciones
ptimas de esos subproblemas para facilitar la
solucin de los problemas m9s
+randes.
Programacin dinmica:
Introduccin

Sea mochila(k"l"P el problema:

El problema de la mochila 0'1 es mochila(1"n"C.


El problema de la mochila 0-1

ma$imi,ar b
i
x
i
i k
l

sujeto a p
i
x
i
i k
l

P
con x
i
?0" 1@" k i l

Ecuacin de recurrencia hacia adelante:

Si es el beneficio (o +anancia total de una


solucin ptima de mochila(j"n"c" entonces
dependiendo de #ue el objeto j'8simo entre o no en la
solucin (ntese #ue slo puede entrar si
c'p
j
A0.

<dem9s"
El problema de la mochila 0-1
<mbas ecuaciones permiten calcular "
#ue es el !alor de una solucin ptima de
mochila(1"n"C.

v
g
1
(C
(Btese #ue la ecuacin de recurrencia es
hacia adelante pero el c9lculo se reali,a hacia atr9s.


g
j
(c


g
j
(c ma$

g
j+1
(c"

g
j+1
(c p
j
+ b
j
{ }


g
n+1
(c 0" para cual#uier capacidad c

Ecuacin de recurrencia hacia atr9s:

Si es el beneficio (o +anancia total de una


solucin ptima de mochila(1"j"c" entonces
dependiendo de #ue el objeto j'8simo entre o no en la
solucin (ntese #ue slo puede entrar si
c'p
j
A0.

<dem9s"
El problema de la mochila 0-1
<mbas ecuaciones permiten calcular "
#ue es el !alor de una solucin ptima de
mochila(1"n"C.

w
g
n
(C
(<hora la recurrencia es hacia atr9s pero el c9lculo
se reali,a hacia adelante.


g
j
(c


g
j
(c ma$

g
j1
(c"

g
j1
(c p
j
+ b
j
{ }


g
0
(c 0" para cual#uier capacidad c

5anto la recurrencia hacia adelante como hacia atr9s


permiten escribir un al+oritmo recursi!o de forma
inmediata.
El problema de la mochila 0-1
funcin mochila1(p,b:vector[1..n] de nat;
C:nat) devuelve nat
principio
devuelve g(n,C)
fin
funcin mochila1(p,b:vector[1..n] de nat;
C:nat) devuelve nat
principio
devuelve g(n,C)
fin
funcin g(j,c:nat) devuelve nat
principio
si j=0 entonces devuelve 0
sino
si c<p[j]
entonces devuelve g(j-1,c)
sino
si g(j-1,c) g(j-1,c-p[j])+b[j]
entonces
devuelve g(j-1,c)
sino
devuelve g(j-1,c-p[j])+b[j]
fsi
fsi
fsi
fin
funcin g(j,c:nat) devuelve nat
principio
si j=0 entonces devuelve 0
sino
si c<p[j]
entonces devuelve g(j-1,c)
sino
si g(j-1,c) g(j-1,c-p[j])+b[j]
entonces
devuelve g(j-1,c)
sino
devuelve g(j-1,c-p[j])+b[j]
fsi
fsi
fsi
fin

7roblema: ineficiencia

%n problema de tama>o n se reduce a dos


subproblemas de tama>o (n'1.

;ada uno de los dos subproblemas se reduce a otros


dos=
7or tanto" se obtiene un al+oritmo e$ponencial.

Sin embar+o" el n*mero total de sub'


problemas a resol!er no es tan +rande:
)a funcin tiene dos par9metros:

el primero puede tomar n !alores distintos y

el se+undo" C !alores.
C)ue+o slo hay nC problemas diferentesD

7or tanto" la solucin recursi!a est9


+enerando y resol!iendo el mismo
problema muchas !eces.
El problema de la mochila 0-1


g
j
(c

7ara e!itar la repeticin de c9lculos"


las soluciones de los subproblemas se
deben almacenan en una tabla.

Eatri, nC cuyo elemento (j"c almacena

7ara el ejemplo anterior:


n-. C-1/
(b
1
"b
0
"b
.
-(.1"20"02
(p
1
"p
0
"p
.
-(3"4"/
El problema de la mochila 0-1


g
j
(c

0 1 0 . 2 / 4 6 1 3 10 11 10 1. 12 1/
p
1
3 0 0 0 0 0 0 0 0 0 .1 .1 .1 .1 .1 .1 .1
p
0
4 0 0 0 0 0 0 20 20 20 20 20 20 20 20 20 61
p
.
/ 0 0 0 0 0 02 20 20 20 20 20 42 42 42 42 61


g
j
(c ma$

g
j1
(c"

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

;9lculos posibles a partir de la tabla g:

beneficio total: g[n,Cap]

los objetos metidos en la mochila:


El problema de la mochila 0-1
algoritmo objetos(ent p,b:vect[1..n]de nat;
ent Cap:nat;
ent g:vect[0..n,0..Cap]de nat)
principio
test(n,Cap)
fin
algoritmo objetos(ent p,b:vect[1..n]de nat;
ent Cap:nat;
ent g:vect[0..n,0..Cap]de nat)
principio
test(n,Cap)
fin
algoritmo test(ent j,c:nat)
principio
si j>0 entonces
si c<p[j] entonces test(j-1,c)
sino
si g[j-1,c-p[j]]+b[j]>g[j-1,c]
entonces
test(j-1,c-p[j]);
escribir('meter ',j)
sino test(j-1,c)
fsi
fsi
fsi
fin
algoritmo test(ent j,c:nat)
principio
si j>0 entonces
si c<p[j] entonces test(j-1,c)
sino
si g[j-1,c-p[j]]+b[j]>g[j-1,c]
entonces
test(j-1,c-p[j]);
escribir('meter ',j)
sino test(j-1,c)
fsi
fsi
fsi
fin

;onsideraciones finales

;ada componente de la tabla g se calcula en tiempo


constante" lue+o el coste de construccin de la tabla es
O(nC.

El al+oritmo test se ejecuta una !e, por cada


!alor de j" desde n descendiendo hasta 0" lue+o su
coste es O(n.

Si C es muy +rande" entonces esta solucin no es


buena.
Si los pesos p
i
o la capacidad C son reales"
esta solucin no sir!e.
El problema de la mochila 0-1
Camino de cote m!nimo en un
gra"o multietapa

Frafo multietapa:

%n +rafo multietapa #-($"% es un +rafo diri+ido en


el #ue se puede hacer una particin del conjunto $ de
!8rtices en k (kA0 conjuntos
distintos $
i
" 1ik" tal #ue todo arco del +rafo
(u"& es tal #ue u$
i
y &$
iG1
para al+*n i" 1iHk.
)os conjuntos $
1
y $
k
tienen un solo !8rtice #ue se
llama !8rtice ori+en" o" y !8rtice destino" d"
respecti!amente.

;onsideraremos +rafos eti#uetados.


Ienotamos por c(u"& el coste del arco (u"&.
10 1
0
.
2
/
4
6
1
3
/
6
0
.
1
2
/
3
1
11
4
2
/
3
10
$
1
$
0
$
.
$
2
$
/
o
d

El problema: Encontrar un camino de coste


m:nimo #ue !aya de o a d.

5odo camino de o a d tiene e$actamente un !8rtice en


cada $
i
" por eso se dice #ue cada $
i
define una etapa
del +rafo.
10 1
0
.
2
/
4
6
1
3
/
6
0
.
1
2
/
3
1
11
4
2
/
3
10
$
1
$
0
$
.
$
2
$
/
o
d
Camino de cote m!nimo en un
gra"o multietapa

Ejemplo de aplicacin:

Se tienen n unidades de un recurso #ue deben


asi+narse a r proyectos.

Si se asi+nan j" 0jn" unidades al proyecto i se


obtiene un beneficio '
i"j
.

El problema es asi+nar el recurso a los r proyectos


ma$imi,ando el beneficio total.
Camino de cote m!nimo en un
gra"o multietapa
Jormulacin como +rafo multietapa:

B*mero de etapas: rG1

)a etapa i" 1ir" representa el proyecto i.

Kay nG1 !8rtices &


i"j
" 0jn" en cada etapa i"
0ir.

)as etapas 1 y rG1 tienen un !8rtice" o-&


1"0
y
d-&
rG1"n
" respecti!amente.

El !8rtice &
i"j
" 0ir" representa el estado en el
#ue se asi+nan un total de j unidades del recurso
a los proyectos 1" 0" =" i'1.

)os arcos son de la forma (&


i"j
"&
iG1"l
para todo jl y
1iHr.

El arco (&
i"j
"&
iG1"l
" jl" tiene asi+nado un coste '
i(l'j

#ue corresponde a asi+nar l'j unidades del
recurso al proyecto i" 1iHr.

<dem9s hay arcos de la forma (&


r"j
"&
rG1"n
" #ue
tienen asi+nado un coste
Camino de cote m!nimo en un
gra"o multietapa

ma$
0pn j
?'
r " p
@.

Frafo resultante para r-. y n-2.

)a asi+nacin ptima est9 definida por un


camino de coste m9$imo de o a d.

7ara con!ertirlo en un problema de camino de


coste m:nimo basta cambiar los si+nos de las
eti#uetas.
Camino de cote m!nimo en un
gra"o multietapa

o &
1"0

&
0"1

&
0"0

&
0"0

&
0".

&
0"2

&
."0

&
."1

&
."0

&
.".

&
."2

d &
2"2

'
1"0

'
1"1

'
1"0

'
1".

'
1"2

'
0"0

'
0"0

'
0"1

'
0"1

'
0"0

'
0".

'
0"2

'
0"0

'
0"0

'
0"1

'
0"0

'
0"1

'
0"0

'
0".

'
0"0

'
."0

ma$
i0"1
?'
."i
@

ma$
i0"1"0
?'
."i
@

ma$
i0"1"0".
?'
."i
@

ma$
i0"1"0"."2
?'
."i
@

Solucin de pro+ramacin din9mica:

;ada camino de o a d es el resultado de una


secuencia de k'0 decisiones.
Iecisin i'8sima: determinar" a partir de un !8rtice &
i

de $
i
" un arco #ue ten+a a &
i
como ori+en y al+*n nodo
de $
iG1
como destino.

7rincipio de optimalidad:
El camino de coste m:nimo debe contener subcaminos
de coste m:nimo entre otros nodos.
Iem.: En otro caso" podr:an sustituirse dichos
subcaminos por otros mejores" resultando un
camino total de coste menor.
Camino de cote m!nimo en un
gra"o multietapa
10 1
0
.
2
/
4
6
1
3
/
6
0
.
1
2
/
3
1
11
4
2
/
3
10
$
1
$
0
$
.
$
2
$
/
o
d

Ecuacin de recurrencia hacia adelante:

Sea (i"j un camino de coste m:nimo C


L
(i"j
desde el !8rtice j del conjunto $
i
hasta el !8rtice
destino d.

Entonces:
Camino de cote m!nimo en un
gra"o multietapa
10 1
0
.
2
/
4
6
1
3
/
6
0
.
1
2
/
3
1
11
4
2
/
3
10
$
1
$
0
$
.
$
2
$
/
o
d

C

(k 1" j
c( j " d " si ( j " d %
" en otro caso

'

(i " j min
l$
i+1
( j "l%
c( j " l +C

(i +1" l
{ }
" para 1 i k 0
Camino de cote m!nimo en un
gra"o multietapa
10 1
0
.
2
/
4
6
1
3
/
6
0
.
1
2
/
3
1
11
4
2
/
3
10
$
1
$
0
$
.
$
2
$
/
o
d

C

(k 1" j
c( j " d " si ( j " d %
" en otro caso

'

(i " j min
l$
i+1
( j "l%
c( j " l +C

(i +1" l
{ }
" para 1 i k 0

C

(." / min ?1 +C

(2"6"11 +C

(2" 1"4 +C

(2"3@ 1.
C

(."4 2 +C

(2" 1 1.
C

(0" 0 min ?. +C

(." /"1 +C

(."4@ 12
C

(0" . 2 +C

(." / 16
C

(0" 2 min ?/ +C

(." /"3 +C

(."4@ 11
C

(1"1 min ?/ +C

(0" 0"6 +C

(0" ." 0 +C

(0" 2@ 13

Jalta almacenar las decisiones hechas en cada etapa


#ue minimi,an el coste:

Sea )(i"j el !alor de l #ue minimi,a

Entonces el camino de coste m:nimo es:


&
1
-1M &
0
-)(1"1M &
.
-)(0")(1"1M etc.
Camino de cote m!nimo en un
gra"o multietapa

c( j " l +C

(i + 1" l.
10 1
0
.
2
/
4
6
1
3
/
6
0
.
1
2
/
3
1
11
4
2
/
3
10
$
1
$
0
$
.
$
2
$
/
o
d

)(." / 6M )(."4 1
)(0" 0 4M )(0" . /M )(0" 2 /
)(1"1 0

&
1
1
&
0
)(1"1 0
&
.
)(0")(1"1 4
&
2
)(.")(0")(1"1 1
Camino de cote m!nimo en un
gra"o multietapa
algoritmo multietapa(ent G=(V,A,c):grafo;
ent k,n:nat;
sal P:vect[1..k]de 1..n)
{Los vrtices estn numerados de forma que los
ndices de los vrtices de una etapa son mayores
que los ndices de los de la etapa anterior.
El primer ndice de C
*
y D, que slo identificaba
la etapa, se ha suprimido.}
variables C:vect[1..n]de real;
D:vect[1..n]de 1..n;
j,r:1..n
principio
C[n]:=0.0; {Clculo de C
*
y D}
para j:=n-1 descendiendo hasta 1 hacer
r:=vrtice t.q. (j,r)A 3
c(j,r)+C[r] es mnimo;
C[j]:=c(j,r)+C[r];
D[j]:=r
fpara;
P[1]:=1; P[k]:=n; {Construccin del camino}
para j:=2 hasta k-1 hacer
P[j]:=D[P[j-1]]
fpara
fin
algoritmo multietapa(ent G=(V,A,c):grafo;
ent k,n:nat;
sal P:vect[1..k]de 1..n)
{Los vrtices estn numerados de forma que los
ndices de los vrtices de una etapa son mayores
que los ndices de los de la etapa anterior.
El primer ndice de C
*
y D, que slo identificaba
la etapa, se ha suprimido.}
variables C:vect[1..n]de real;
D:vect[1..n]de 1..n;
j,r:1..n
principio
C[n]:=0.0; {Clculo de C
*
y D}
para j:=n-1 descendiendo hasta 1 hacer
r:=vrtice t.q. (j,r)A 3
c(j,r)+C[r] es mnimo;
C[j]:=c(j,r)+C[r];
D[j]:=r
fpara;
P[1]:=1; P[k]:=n; {Construccin del camino}
para j:=2 hasta k-1 hacer
P[j]:=D[P[j-1]]
fpara
fin

;oste del al+oritmo:

Si # est9 representado mediante listas de adyacencia"


entonces el c9lculo de r en el interior del primer bucle
lle!a un tiempo proporcional al +rado del !8rtice j.

7or tanto" si a es el n*mero de arcos del +rafo" el


coste total del al+oritmo es (nGa.
(El se+undo bucle lle!a un tiempo (k.
Camino de cote m!nimo en un
gra"o multietapa

<n9lo+amente" se desarrolla la
recurrencia hacia atr9s.

Ecuacin de recurrencia hacia atr9s:

Sea (i"j un camino de coste m:nimo C


L
(i"j
desde el !8rtice ori+en o hasta el !8rtice j del
conjunto $
i
.

Entonces:
Camino de cote m!nimo en un
gra"o multietapa
10 1
0
.
2
/
4
6
1
3
/
6
0
.
1
2
/
3
1
11
4
2
/
3
10
$
1
$
0
$
.
$
2
$
/
o
d

C

(0" j
c(o" j " si (o" j %
" en otro caso

'

(i " j min
l$
i1
(l " j%
c(l " j +C

(i 1" l
{ }
" para . i k
Camino de cote m!nimo en un
gra"o multietapa
algoritmo multietapaB(ent G=(V,A,c):grafo;
ent k,n:nat;
sal P:vect[1..k]de 1..n)
{Los vrtices estn numerados de forma que los
ndices de los vrtices de una etapa son mayores
que los ndices de los de la etapa anterior.
El primer ndice de C
*
y D, que slo identificaba
la etapa, se ha suprimido.}
variables C:vect[1..n]de real;
D:vect[1..n]de 1..n;
j,r:1..n
principio
C[1]:=0.0; {Clculo de C
*
y D}
para j:=2 hasta n hacer
r:=vrtice t.q. (r,j)A 3
c(r,j)+C[r] es mnimo;
C[j]:=c(r,j)+C[r];
D[j]:=r
fpara;
P[1]:=1; P[k]:=n; {Construccin del camino}
para j:=k-1 descendiendo hasta 2 hacer
P[j]:=D[P[j+1]]
fpara
fin
algoritmo multietapaB(ent G=(V,A,c):grafo;
ent k,n:nat;
sal P:vect[1..k]de 1..n)
{Los vrtices estn numerados de forma que los
ndices de los vrtices de una etapa son mayores
que los ndices de los de la etapa anterior.
El primer ndice de C
*
y D, que slo identificaba
la etapa, se ha suprimido.}
variables C:vect[1..n]de real;
D:vect[1..n]de 1..n;
j,r:1..n
principio
C[1]:=0.0; {Clculo de C
*
y D}
para j:=2 hasta n hacer
r:=vrtice t.q. (r,j)A 3
c(r,j)+C[r] es mnimo;
C[j]:=c(r,j)+C[r];
D[j]:=r
fpara;
P[1]:=1; P[k]:=n; {Construccin del camino}
para j:=k-1 descendiendo hasta 2 hacer
P[j]:=D[P[j+1]]
fpara
fin
Nota: )a eficiencia es la misma si # est9 representado mediante
listas de adyacencia in!ersa.
*ultiplicacin de una
ecuencia de matrice

Se desea calcular el producto matricial:


;omo es asociati!o" e$isten !arias formas=
(Recordar #ue el al+ortimo resultante de la
definicin del producto de dos matrices p+ y +r
necesita p+r multiplicaciones de escalares.

Ejemplo: se #uiere calcular el producto %,C)" de las


matrices %(1./" ,(/13" C(13. y )(..2.
CEl caso m9s eficiente es casi 13 !eces m9s r9pido #ue
el m9s lentoD

* *
1
*
0
L*
n

n N multip.
(( %,C) 10/10
( %, (C) /2001
( %(,C) 01/4
%((,C) 20//
%(,(C) 04211

O;mo hallar el mejor m8todoP


1. Qnsertar los par8ntesis de todas las formas
posibles (si+nificati!amente diferentes.
0. ;alcular para cada una el n*mero de
multiplicaciones escalares re#ueridas.

O;u9ntas formas posibles -(n de


insertar par8ntesis e$isten en un producto
de n matricesP

Si cortamos entre la i y la (iG1'8sima:


Entonces tenemos -(i-(n'i formas distintas.

;omo i puede tomar !alores entre 1 y n'1:


B*meros de ;atalan
*ultiplicacin de una
ecuencia de matrice

* (*
1
*
0
L*
i
(*
i +1
*
i +0
L*
n


- (1 1

- (n - (i- (n i
i 1
n1

" para n >1

)os n*meros de ;atalan crecen


e$ponencialmente.

Ie hecho puede demostrarse #ue:


7or ejemplo:

)ue+o el m8todo directo no sir!e.


*ultiplicacin de una
ecuencia de matrice

- (n
1
n
0n 0
n 1

_
,


n 1 0 . 2 / 10 1/
- (n 1 1 0 / 12 2140 0462220

<plicacin del principio de


optimalidad:
Si el mejor modo de reali,ar el producto e$i+e di!idir
inicialmente entre las matrices i e
(iG1'8sima" los productos
deber9n ser reali,ados de forma ptima para #ue el
total tambi8n sea ptimo.

E8todo:
;onstruir la matri, Rm
ij
S" 1ijn" donde m
ij
da el
ptimo (i.e." el n*mero de multiplicaciones
escalares re#ueridas para la parte
del producto total.
)a solucin final !endr9 dada por m
1n
.
*ultiplicacin de una
ecuencia de matrice
S. Godbole: n e!!icient
com"#tation o! matri$ c%ain
"rod#cts&, IEEE Transactions on
Computers, ''(9),
"". *+,-*++, 1973.

*
1
*
0
L*
i
y *
i +1
*
i +0
L*
n

*
i
*
i +1
L*
j
;onstruccin de Rm
ij
S" 1ijn:

Fuardar las dimensiones de las *


i
" 1in" en un
!ector d" de 0..n componentes" de forma #ue *
i

tiene dimensiones d
i'1
d
i
.

)a dia+onal de Rm
ij
S contiene los m
ij
tales #ue j'
i-:

El tercer caso representa #ue para calcular


se intentan todas las
posibilidades
y se esco+e la mejor.

Ie forma m9s compacta:


*ultiplicacin de una
ecuencia de matrice

*
i
*
i +1
L*
i +

(*
i
*
i +1
L*
k
(*
k+1
*
k+0
L*
i +


0: m
i "i
0" para i 1" 0"K" n
1: m
i "i +1
d
i 1
d
i
d
i +1
" para i 1" 0"K" n 1
1 < < n: m
i "i +
min
i ki +1
(m
ik
+ m
k+1"i +
+ d
i 1
d
k
d
i +
"
para i 1" 0"K" n

m
ij

0" si i j
min
i k< j
?m
ik
+ m
k+1" j
+d
i 1
d
k
d
j
@" si i < j

'

7ara el ejemplo anterior:

%(1./" ,(/13" C(13. y )(..2

Se tiene d-(1."/"13".".2.
7ara -1: m
10
-/61/" m
0.
-1../" m
.2
-3061.

7ara -0:

7ara -.:

)a matri, es:
*ultiplicacin de una
ecuencia de matrice

m
1.
min (m
11
+ m
0.
+1. / ." m
10
+ m
..
+1. 13 .
min (1/.0" 30/4 1/.0
m
02
min (m
00
+ m
.2
+ / 13 .2" m
0.
+ m
22
+ / . .2
min (02001" 112/ 112/

m
12
min (?k 1@ m
11
+ m
02
+1. / .2"
?k 0@ m
10
+ m
.2
+1. 13 .2"
?k .@ m
1.
+ m
22
+1. . .2
min (20//" /2001" 01/4 01/4

j 1 0 . 2
i 1 0 /61/ 1/.0 01/4
.
0 0 1../ 112/
0
. 0 3061
1
2 0
0

Solucin recursi!a inmediata:

<plicacin de la ecuacin recurrente.

7roblema: complejidad e$ponencial.

<lmacenamiento de las soluciones de


los subproblemas en una tabla:

B*mero de subproblemas: (n
0
.
*ultiplicacin de una
ecuencia de matrice
*ultiplicacin de una
ecuencia de matrice
algoritmo parentOpt(ent d:vect[0..n]de nat;
sal m:vect[1..n,1..n]de nat;
sal km:vect[1..n,1..n]de 1..n)
{m es la matriz [m
ij
] definida antes;
km[i,j] guarda el ndice k para el que se alcanza
el mnimo al calcular m[i,j].}
variables i,r,j,k,q:nat;
principio
para i:=1 hasta n hacer
m[i,i]:=0
fpara;
para r:=2 hasta n hacer
para i:=1 hasta n-r+1 hacer
j:=i+r-1;
m[i,j]:= ;
para k:=i hasta j-1 hacer
q:=m[i,k]+m[k+1,j]+d[i-1]*d[k]*d[j];
si q<m[i,j]
entonces
m[i,j]:=q;
km[i,j]:=k
fsi
fpara
fpara
fpara
fin
algoritmo parentOpt(ent d:vect[0..n]de nat;
sal m:vect[1..n,1..n]de nat;
sal km:vect[1..n,1..n]de 1..n)
{m es la matriz [m
ij
] definida antes;
km[i,j] guarda el ndice k para el que se alcanza
el mnimo al calcular m[i,j].}
variables i,r,j,k,q:nat;
principio
para i:=1 hasta n hacer
m[i,i]:=0
fpara;
para r:=2 hasta n hacer
para i:=1 hasta n-r+1 hacer
j:=i+r-1;
m[i,j]:= ;
para k:=i hasta j-1 hacer
q:=m[i,k]+m[k+1,j]+d[i-1]*d[k]*d[j];
si q<m[i,j]
entonces
m[i,j]:=q;
km[i,j]:=k
fsi
fpara
fpara
fpara
fin

;oste en tiempo:

(n
.

;oste en memoria:

(n
0

*ultiplicacin de una
ecuencia de matrice

CJalta hacer el productoD

El elemento kmRi"jS +uarda el !alor de ktal #ue la


di!isin ptima de parte el producto
entre *
k
y *
kG1
.

7or tanto:
*ultiplicacin de una
ecuencia de matrice

*
i
*
i +1
L*
j
funcin multSec(M:vect[1..n]de matriz;
km:vect[1..n,1..n]de 1..n;
i,j:1..n)
devuelve matriz
variables X,Y:matriz
principio
si j>i
entonces
X:=multSec(M,km,i,km[i,j]);
Y:=multSec(M,km,km[i,j]+1,j];
devuelve mult(X,Y)
sino
devuelve M[i]
fsi
fin
funcin multSec(M:vect[1..n]de matriz;
km:vect[1..n,1..n]de 1..n;
i,j:1..n)
devuelve matriz
variables X,Y:matriz
principio
si j>i
entonces
X:=multSec(M,km,i,km[i,j]);
Y:=multSec(M,km,km[i,j]+1,j];
devuelve mult(X,Y)
sino
devuelve M[i]
fsi
fin
Camino m!nimo entre todo
lo pare de nodo de un gra"o

7roblema:
;9lculo de los caminos de coste m:nimo entre todos
los pares de !8rtices de un +rafo diri+ido sin ciclos de
peso ne+ati!o.

7rincipio de optimalidad:
Si i
1
" i
0
" =" i
k
" i
kG1
" =" i
n
es un camino de coste
m:nimo de i
1
a i
n
" entonces:

i
1
" i
0
" =" i
k
es un camino de coste m:nimo de i
1
a i
k
"
y

i
k
" i
kG1
" =" i
n
es un camino de coste m:nimo de i
k
a
i
n
.

<plicacin del principio:

Si k es el !8rtice 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 #ue" adem9s"
slo pasa por !8rtices de :ndice menor #ue k.

)o an9lo+o ocurre con el subcamino de k a j.


R... /loyd:
0l1orit%m 97: S%ortest "at%&,
Communications of the ACM, 5(+), ". 3,5, 19+'.

Sea C(i"j el coste de la arista (i"j o infinito si esa


arista no e$iste. Sea C(i"i-0.
Sea )
k
(i"j la lon+itud (o distancia del camino de
coste m:nimo de i a j #ue no pasa por nin+*n !8rtice
de :ndice mayor #ue k.

Sea )(i"j la lon+itud del camino de coste m:nimo de i


a j.

Entonces:

<hora" un camino ptimo de i a j #ue no pase por


nin+*n !8rtice de :ndice mayor #ue k bien pasa por el
!8rtice k no.

Si pasa por k entonces:

Si no pasa por k entonces nin+*n !8rtice


intermedio tiene :ndice superior a k'1:
Camino m!nimo entre todo
lo pare de nodo de un gra"o

)(i " j min min
1kn
)
k1
(i " k +)
k1
(k " j
{ }
" C(i " j

'


)
0
(i " j C(i " j " 1 i n" 1 j n

)
k
(i " j )
k1
(i " k +)
k1
(k " j

)
k
(i " j )
k1
(i " j

En resumen:

Se tiene la si+uiente ecuacin recurrente #ue define el


m8todo de pro+ramacin din9mica.
Camino m!nimo entre todo
lo pare de nodo de un gra"o

)
0
(i " j C(i " j " 1 i n" 1 j n

)
k
(i " j min )
k1
(i " j " )
k1
(i " k +)
k1
(k " j
{ }
"

k 1
{Pre: g es un grafo dirigido etiquetado sin
ciclos negativos}
funcin Floyd(g:grafo)
devuelve vector[vrt,vrt] de etiq
variables D:vector[vrt,vrt] de etiq;
u,v,w:vrt; et,val:etiq
principio
{inicialmente la distancia entre dos vrtices
tiene el valor de la arista que los une;
las diagonales se ponen a cero}
para todo v en vrt hacer
para todo w en vrt hacer
D[v,w]:=etiqueta(g,v,w)
{ si no hay arco}
fpara;
D[v,v]:=0
fpara;
...
{Pre: g es un grafo dirigido etiquetado sin
ciclos negativos}
funcin Floyd(g:grafo)
devuelve vector[vrt,vrt] de etiq
variables D:vector[vrt,vrt] de etiq;
u,v,w:vrt; et,val:etiq
principio
{inicialmente la distancia entre dos vrtices
tiene el valor de la arista que los une;
las diagonales se ponen a cero}
para todo v en vrt hacer
para todo w en vrt hacer
D[v,w]:=etiqueta(g,v,w)
{ si no hay arco}
fpara;
D[v,v]:=0
fpara;
...
Camino m!nimo entre todo
lo pare de nodo de un gra"o
...
para todo u en vrt hacer
para todo v en vrt hacer
para todo w en vrt hacer
si D[v,u]+D[u,w]<D[v,w]
entonces D[v,w]:=D[v,u]+D[u,w]
fsi
fpara
fpara
fpara;
devuelve D
fin
{Post: D=caminosMnimos(g)}
...
para todo u en vrt hacer
para todo v en vrt hacer
para todo w en vrt hacer
si D[v,u]+D[u,w]<D[v,w]
entonces D[v,w]:=D[v,u]+D[u,w]
fsi
fpara
fpara
fpara;
devuelve D
fin
{Post: D=caminosMnimos(g)}
Bota: pi!otes(u de!uel!e el conjunto de !8rtices #ue
han sido pi!otes en pasos anteriores del al+oritmo.
Camino m!nimo entre todo
lo pare de nodo de un gra"o

Eficiencia temporal: (n
.

representacin con matri, de adyacencia:


i+ual #ue reiterar IijTstra (%lgoritmo &orace""p9+.
14" aun#ue el interior del bucle en Jloyd es m9s
simple

representacin con listas de adyacencia:


IijTstra G colas con prioridad est9 en (anlo+ n

Espacio:

Jloyd e$i+e (n
0
mientras #ue IijTstra precisa (n

Ejercicio: c9lculo de las secuencias de


nodos #ue componen los caminos
m:nimos

si el camino m:nimo de m a n pasa primero por p y


despu8s por +" la secuencia de !8rtices #ue forman el
camino m:nimo de p a + forma parte de la secuencia
de !8rtices #ue forman el camino m:nimo de m a n

usar un !ector bidimensional C inde$ado por !8rtices:


CR&".S contiene un nodo u #ue forma parte del
camino m:nimo entre & y .
Camino m!nimo entre todo
lo pare de nodo de un gra"o
/n problema de "iabilidad de
itema

El problema:

Iise>ar un sistema compuesto de !arios dispositi!os


conectados en serie.
Sea r
i
la fiabilidad de )
i
" i.e." la probabilidad de #ue
funcione correctamente.

Entonces" la fiabilidad del sistema sistema entero es:


7or ejemplo" si n-10 y r
i
-0"33" 1i10" la
fiabilidad de cada dispositi!o es muy alta y sin
embar+o
)
n
)
1
)
0
)
.
UUU

r
i
i 1
n


r
i
i 1
10

0" 302

%na forma de aumentar la fiabilidad es duplicar los


dispositi!os (en paralelo.
Si la fase i contiene m
i
copias de )
i
" la
probabilidad de #ue toda la fase falle es

)ue+o la fiabilidad de la fase i es


7or tanto" si r
i
-0"33 y m
i
-0" la fiabilidad de la fase i es
0"3333.

En realidad" la fiabilidad de la fase i es al+o


menor #ue (las copias de un mismo
dispositi!o no son completamente independien'tes
pues su dise>o es com*n" por ejemploM
si denotamos la fiabilidad de la fase i por
entonces la fiabilidad del sistema es:
/n problema de "iabilidad de
itema
)
n
)
n
)
n
)
1
)
1
)
1
)
0
)
0
)
.
)
.
)
.
)
.
UUU
Jase 1 Jase 0 Jase . Jase n

(1r
i

m
i

1 (1 r
i

m
i

1 (1 r
i

m
i

i
(m
i

i
(m
i

1i n

El problema: ma$imi,ar la fiabilidad duplicando los


dispositi!os y con al+una limitacin en el coste.
Ionde c
i
es el coste de cada unidad de dispositi!o i.
;omo c
i
V0 y m
j
A1" entonces 1m
i
u
i
con
/n problema de "iabilidad de
itema

ma$imi,ar
i
(m
i

1i n

sujeto a c
i
m
i
1i m

c
m
i
1 y entero " 1 i n

u
i
c +c
i
c
j
j 1
n

_
,

c
i

1
]
1
%na solucin ptima m
1
" m
0
" =" m
n
es el
resultado de una secuencia de decisiones" una por
cada m
i
.

Ienotemos:
Entonces el !alor de una solucin ptima es "
n
(c.
/n problema de "iabilidad de
itema

"
i
(x m9$imo
j
1 j i

(m
j

sujeto a c
j
m
j
x
1 j i

1 m
j
u
j
" 1 j i
)a *ltima decisin re#uiere ele+ir m
n
de entre
?1"0"."="u
n
@.

%na !e, tomada la *ltima decisin" las restantes


decisiones deben utili,ar el resto de fondos
c'c
n
m
n
de forma ptima.

Se cumple el principio de optimalidad y


En +eneral" para "
i
(x" iA1" se tiene:

Se resuel!e de forma similar al problema de la


mochila 0'1 (ejercicio.
/n problema de "iabilidad de
itema

"
0
(x 1" para todo x " 0 x c

"
n
(c ma$
1m
n
u
n

n
(m
n
"
n1
(c c
n
m
n

{ }

"
i
(x ma$
1m
i
u
i

i
(m
i
"
i 1
(x c
i
m
i

{ }
El problema del &iajante de
comercio

Recordar:

Encontrar un recorrido de lon+itud m:nima para un


!iajante #ue tiene #ue !isitar !arias ciudades y !ol!er
al punto de partida" conocida la
distancia e$istente entre cada dos ciudades.

Es decir" dado un +rafo diri+ido con arcos de


lon+itud no ne+ati!a" se trata de encontrar un circuito
de lon+itud m:nima #ue comience y termine en el
mismo !8rtice y pase e$actamente una !e, por cada
uno de los !8rtices restantes
(circuito hamiltoniano0.
CE9s !ueltasD

Sean #-($"% un +rafo orientado"


$-?1"0"="n@"
1
ij
la lon+itud de (i"j%"
1
ij
-W si no e$iste el arco (i"j.

El circuito buscado empie,a en el !8rtice 1.


Se compone de (1"j" con jX1" se+uido de un camino
de j a 1 #ue pasa e$actamente una !e, por cada
!8rtice de $Y?1"j@.

7rincipio de optimalidad: si el circuito es ptimo" el


camino de j a 1 debe serlo tambi8n.

Sea 2$Y?1@ un subconjunto de !8rtices e


i$Y2 un !8rticeM
llamamos g(i"2 a la lon+itud del camino m:nimo
desde i hasta 1 #ue pase e$actamente una !e, por
cada !8rtice de 2.
Entonces:
El problema del &iajante de
comercio

g(1"$ Y ?1@
min
0j n
1
1j
+ g( j "$ Y ?1" j@
{ }
lon+itud del circuito ptimo -

E9s en +eneral" si iX1" 2XZ e i2:


<dem9s:

E8todo de resolucin:

%sar (L y calcular g para todos los conjunto 2


con un solo !8rtice (distinto del 1.

[ol!er a usar (L y calcular g para todos los


conjuntos 2 de dos !8rtices (distintos del 1 y as:
sucesi!amente.

;uando se conoce el !alor de g para todos


los conjuntos 2 a los #ue slo les falta un !8rtice
(distinto del 1 basta calcular
g(1"$Y?1@.
El problema del &iajante de
comercio

g(i "2 min
j2
1
ij
+ g( j "2 Y ?j@
{ }

g(i " 1
i 1
" i 0" ."" n
(L

Ejemplo. Sea # el +rafo completo de cuatro


!8rtices con lon+itudes:

Qniciali,acin:
g(0"Z - /M g(."Z - 4M g(2"Z - 1.
%sar (L para obtener:
g(0"?.@ - 1
0.
G g(."Z - 1/M
g(0"?2@ - 1
02
G g(2"Z - 11M
g(."?0@ - 11M g(."?2@ - 00M
g(2"?0@ - 1.M g(2"?.@ - 1/.
El problema del &iajante de
comercio

1
0 10 1/ 00
/ 0 3 10
4 1. 0 10
1 1 3 0

1
]
1
1

<hora" utili,ando de nue!o (L para conjuntos de dos


elementos:

Jinalmente:
El problema del &iajante de
comercio

g(0" ?." 2@ min 1
0.
+ g(." ?2@ " 1
02
+ g(2" ?.@
{ }

min ?03" 0/@ 0/M



g(." ?0" 2@ min 1
.0
+ g(0" ?2@ " 1
02
+ g(2" ?0@
{ }

min ?.1" 0/@ 0/M



g(2" ?0" .@ min 1
20
+ g(0" ?.@ " 1
2.
+ g(." ?0@
{ }

min ?0." 06@ 0..



g(1" ?0" ." 2@ min ? 1
10
+g(0" ?." 2@ "
1
1.
+g(." ?0" 2@ "
1
12
+g(2" ?0" .@ @
min ? ./" 20" 2. @ ./.

Si adem9s se #uiere saber cmo se


construye el circuito ptimo:
%tili,ar una funcin adicional
3(i"2 es el !alor de j #ue minimi,a g(i"2 al aplicar la
frmula (L.

En el ejemplo:
3(0"?."2@ - 2M 3(."?0"2@ - 2M
3(2"?0".@ - 0M 3(1"?0"."2@ - 0.
\ el circuito ptimo ser9 pues:
1 3(1"?0"."2@ - 0
3(0"?."2@ - 2
3(2"?.@ - .
1
El problema del &iajante de
comercio

;oste del al+oritmo:

c9lculo de g(j"Z: n'1 consultas a una tabla"

c9lculo de los g(j"2 tales #ue 1card(2-kn'0:

c9lculo de g(1"$Y?1@: n'1 sumas.


5iempo de c9lculo:
7uesto #ue
(Este tiempo es mejor #ue (nD #ue resultar:a de la
estrate+ia de fuer,a bruta" pero=

;oste en espacio (para conser!ar g y 3: (n0


n

El problema del &iajante de


comercio

(n 1
n 0
k

_
,
k sumas en total "

0(n 1 + (n 1k
n 0
k

_
,
k1
n0

_
,
n
0
0
n
( )

k
r
k

_
,
k1
r

r 0
r1

7ara hacernos una idea del coste=


El problema del &iajante de
comercio

n*mero de
!8rtices
n
tiempo
fuer,a bruta
nD
tiempo
pro+ . din9mica
n
0
0
n
espacio
pro+ . din9mica
n0
n
/ 100 100 140
10 .401100 100200 10020
1/
1" .110
10
6.60100 231/00
00
0" 2. 10
11
2132.0200 00361/00

Qmplementacin recursi!a ineficiente:


El problema del &iajante de
comercio
funcin g(i,S) devuelve nat
variables msCorto,distancia,j:nat
principio
si S=
entonces
devuelve L[i,1]
sino
msCorto:= ;
para todo j en S hacer
distancia:=L[i,j]+g(j,S\{j});
si distancia<msCorto
entonces
msCorto:=distancia
fsi
fpara;
devuelve msCorto
fsi
fin
funcin g(i,S) devuelve nat
variables msCorto,distancia,j:nat
principio
si S=
entonces
devuelve L[i,1]
sino
msCorto:= ;
para todo j en S hacer
distancia:=L[i,j]+g(j,S\{j});
si distancia<msCorto
entonces
msCorto:=distancia
fsi
fpara;
devuelve msCorto
fsi
fin
Se calcula repetidas !eces el mismo !alor de g: ((n'1D

%tili,acin de una &funcin con memoria(:


El problema del &iajante de
comercio
{se usa una tabla gtab cuyos elementos se
inicializan con -1}
funcin g(i,S) devuelve nat
variables msCorto,distancia,j:nat
principio
si S= entonces devuelve L[i,1]
sino
si gtab[i,S] 0
entonces devuelve gtab[i,S]
sino
msCorto:= ;
para todo j en S hacer
distancia:=L[i,j]+g(j,S\{j});
si distancia<msCorto
entonces msCorto:=distancia
fsi
fpara;
gtab[i,S]:=msCorto;
devuelve msCorto
fsi
fsi
fin
{se usa una tabla gtab cuyos elementos se
inicializan con -1}
funcin g(i,S) devuelve nat
variables msCorto,distancia,j:nat
principio
si S= entonces devuelve L[i,1]
sino
si gtab[i,S] 0
entonces devuelve gtab[i,S]
sino
msCorto:= ;
para todo j en S hacer
distancia:=L[i,j]+g(j,S\{j});
si distancia<msCorto
entonces msCorto:=distancia
fsi
fpara;
gtab[i,S]:=msCorto;
devuelve msCorto
fsi
fsi
fin
Plani"icacin de trabajo

El problema:
Sea un sistema en el #ue la reali,acin de un con'
junto de trabajos re#uiere la ejecucin por parte de un
conjunto de a+entes (o procesadores de una serie de
tareas diferentes para cada trabajo.

n trabajos re#uiriendo cada uno m tareas:


-
1i
" -
0i
" =" -
mi
" 1in

la tarea -
ji
la reali,a el procesador P
j
" 1jm" y
re#uiere un tiempo t
ji

7lanificacin para los n trabajos:


Es una asi+nacin de tareas a inter!alos de tiempo en
los procesadores.

la tarea -
ji
debe asi+narse a P
j

un procesador no puede tener m9s de una tarea


asi+nada en cada instante de tiempo

para todo trabajo i" el procesamiento de -


ji
" jV1"
no puede empe,ar hasta #ue -
j-1(i
haya terminado

Ejemplo:
Se tiene #ue planificar la ejecucin de dos trabajos en
tres procesadores" de forma #ue los tiempos de cada
tarea !ienen dados por:
Ios planificaciones posibles:
)a planificacin (b se dice no apropiati!a (non-
preempti&e por#ue el procesamiento de una tarea no
se interrumpe hasta #ue 8sta ha terminado.
)a planificacin (a se dice apropiati!a (preempti&e
por#ue el trabajo 1 se apropia del procesador 0 antes
de #ue 8ste termine con el trabajo 0.

T
0 0
. .
/ 0

1
]
1
tiempo 0 1 0 . 2 / 4 6 1 3 10 11 10
P
1
T
11
P
0
T
22
T
21
T
22
P
.
T
31
T
32
tiempo 0 1 0 . 2 / 4 6 1 3 10 11 10
P
1
T
11
P
0
T
22
T
21
P
.
T
32
T
31
(a)
(b)
Plani"icacin de trabajo

El tiempo de terminacin del trabajo i en la


planificacin 2 es el instante" "
i
(2" en #ue todas
las tareas del trabajo i han terminado.
En el ejemplo (a" "
1
(2
a
-10 y "
0
(2
a
-10.
En el ejemplo (b" "
1
(2
b
-11 y "
0
(2
b
-/.

El tiempo de terminacin" "(2" de la planificacin 2


es:

El tiempo medio de terminacin" EJ5(2" se define


como:

4(2 ma$
1i n
"
i
(2
{ }

EJ5(2
1
n
"
i
(2
1i n

Plani"icacin de trabajo

7lanificacin con tiempo de terminacin ptimo


(]J5 para un conjunto de trabajos:
es una planificacin no apropiati!a" 2" para la #ue
4(2 es m:nimo entre todas las
planificaciones no apropiati!as.

7lanificacin apropiati!a y con tiempo de


terminacin ptimo (7]J5:
es una planificacin apropiati!a" 2" para la #ue 4(2 es
m:nimo entre todas las planificaciones apropiati!as.

7lanificacin con tiempo medio de terminacin


ptimo (]EJ5:
es una planificacin no apropiati!a" 2" para la #ue
EJ5(2 es m:nimo entre todas las
planificaciones no apropiati!as.

7lanificacin apropiati!a y con tiempo medio de


terminacin ptimo (7]EJ5:
es una planificacin apropiati!a " 2" para la #ue
EJ5(2 es m:nimo entre todas las planificaciones
apropiati!as.
Plani"icacin de trabajo

El c9lculo de ]J5 y 7]J5 para mV0 y el c9lculo de


]EJ5 es computacionalmente dif:cil
(es 'P-duro.

El c9lculo de ]J5 para m-0 puede hacerse mediante


pro+ramacin din9mica.

;aso m-0:
Ienotemos -
1i
como a
i
y -
0i
como b
i
.

%na planificacin est9 completamente especificada


fijando una permutacin de los trabajos en uno de los
procesadores (coincidir9 con el otro procesador.
;ada tarea empe,ar9 tan pronto como sea
posible.
Ejemplo con / trabajos:
Plani"icacin de trabajo
a
5
a
1
a
3
a
2
a
4
b
5
b
1
b
2
b
4
b
3
P
1
P
0
planificacin (/"1"."0"2
Supon+amos" para simplificar" #ue a
i
X0" 1in
(si hay trabajos con a
i
-0" se construye primero la
planificacin ptima para los trabajos con a
i
X0 y
despu8s se a>aden delante los trabajos con a
i
-0.

7rincipio de optimalidad:
%na permutacin (planificacin ptima es tal #ue"
fijado el primer trabajo de la permutacin" el resto de
la permutacin es ptimo con respecto al estado en
#ue #uedan los dos procesadores despu8s de terminar
el primer trabajo.
Plani"icacin de trabajo

Sea g(2"t la lon+itud (duracin de una


planificacin ptima para el subconjunto de trabajos 2
suponiendo #ue el procesador 0 no estar9 disponible
hasta el instante t.
Entonces:
con g(Z"t - ma$?t"0@ y a
i
X0" 1in.

g(2" t min
i 2
a
i
+ g 2 Y ?i@" b
i
+ ma$ ?t a
i
" 0@
( )
{ }
Plani"icacin de trabajo
a
i
0 a
i
t
0
a
j
" j2Y?i@
b
i
b
j
" j2Y?i@
t5b
i
t5b
i
'a
i
caso tAa
i
:
caso tHa
i
:
t
a
i
0 a
i
0
a
j
" j2Y?i@
b
i
b
j
" j2Y?i@
a
i
5b
i
b
i

)a ecuacin recursi!a resultante podr:a


resol!erse de forma an9lo+a a la del problema del
!iajante de comercio" pero e$iste una
solucin mejor=

Supon+amos #ue i y j son los dos primeros trabajos (y


en ese orden en la planificacin
ptima del subconjunto 2M entonces:
7ero:
Si los dos primeros trabajos fueran j e i:
Plani"icacin de trabajo

g(2" t a
i
+ g(2 Y ?i@" b
i
+ma$ ?t a
i
" 0@
a
i
+a
j
+ g(2 Y ?i " j@" b
j
+ ma$ ?b
i
+ma$ ?t a
i
" 0@a
j
" 0@
t
ij
1 2 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4


t
ij
b
j
+ ma$ ?b
i
+ ma$ ?t a
i
" 0@ a
j
" 0@
b
j
+b
i
a
j
+ ma$ ?ma$ ?t a
i
" 0@" a
j
b
i
@
b
j
+b
i
a
j
+ ma$ ?t a
i
" a
j
b
i
" 0@
b
j
+b
i
a
j
a
i
+ma$ ?t " a
i
+a
j
b
i
" a
i
@

g (2" t a
j
+a
i
+

g (2 Y ?j " i@" b
i
+b
j
a
i
a
j
+ ma$ ?t " a
j
+a
i
b
j
" a
j
@

Entonces:
7ara #ue esto sea cierto para todo !alor de t" se
precisa:
Es decir:
] sea:

)ue+o e$iste una planificacin ptima en la #ue cada


par (i"j de trabajos adyacentes !erifica (L.

7uede demostrarse #ue todas las planificaciones #ue


!erifican (L tienen la misma lon+itud.
7or tanto" basta +enerar una permutacin para la #ue
se cumpla (L para todo par de trabajos adyacentes.
Plani"icacin de trabajo

g(2" t

g (2" t
ma$ ?t " a
i
+a
j
b
i
" a
i
@ ma$ ?t " a
j
+a
i
b
j
" a
j
@

ma$ ?a
i
+a
j
b
i
" a
i
@ ma$ ?a
j
+a
i
b
j
" a
j
@

a
i
+a
j
+ ma$ ?b
i
" a
j
@a
j
+a
i
+ ma$ ?b
j
" a
i
@

min ?b
i
" a
j
@ min ?b
j
" a
i
@
(L

<hora" si
Entonces el trabajo i deber:a ser el primero en
una planificacin ptima.

En cambio" si
Entonces el trabajo j deber:a ser el *ltimo en una
planificacin ptima.

)ue+o podemos decidir la posicin de uno de los


trabajos (el primero o el *ltimo.
Repitiendo el proceso" se puede construir la
planificacin ptima.
Plani"icacin de trabajo

min ?a
1
" a
0
"K" a
n
" b
1
" b
0
"Kb
n
@ a
i

min ?a
1
" a
0
"K" a
n
" b
1
" b
0
"Kb
n
@ b
j

7or tanto la solucin es:


i ordenar los a
i
y b
i
en orden no decrecienteM
ii si el si+uiente n*mero de la secuencia es a
i
y el
trabajo i no ha sido planificado toda!:a"
planificar el trabajo i en la posicin m9s a la i,#uierda
de entre los #ue restanM
si el si+uiente n*mero es b
j
y el trabajo j no ha sido
planificado toda!:a" planificar el trabajo j en la
posicin m9s a la derecha de entre los #ue restanM
(ntese #ue el al+oritmo sir!e tambi8n si hay trabajos
con a
i
-0
Plani"icacin de trabajo

Ejemplo:
Sean n-2" (a
1
"a
0
"a
.
"a
2
- (."2"1"10 y
(b
1
"b
0
"b
.
"b
2
- (4"0"3"1/.
)a secuencia ordenada de los a
i
y los b
i
es:
(b
0
"a
1
"a
0
"b
1
"a
.
"b
.
"a
2
"b
2
- (0"."2"4"1"3"10"1/.
Sea
1
"
0
"
.
"
2
la secuencia ptima.

;omo el n*mero menor es b


0
" entonces
2
-0.

El si+uiente n*mero es a
1
lue+o
1
-1.

El si+uiente es a
0
pero el trabajo 0 ya ha sido
planificado.

El si+uiente es b
1
pero 1 ya ha sido
planificado.

El si+uiente es a
.
lue+o hacemos
0
-..

7or tanto"
.
-2.
Plani"icacin de trabajo

;oste: O(n lo+ n

Btese #ue la solucin directa de


hubiera lle!ado al menos O(0
n
" #ue es el
n*mero de subconjuntos 2 diferentes para
los #ue habr:a #ue calcular g(2"t.
Plani"icacin de trabajo

g(2" t min
i 2
a
i
+ g 2 Y ?i@" b
i
+ ma$ ?t a
i
" 0@
( )
{ }

Você também pode gostar