Vous êtes sur la page 1sur 19

1

1
Metodologa y tecnologa de la
programacin
Tema 4.
Programacin dinmica
2
Algoritmos de programacin dinmica
Planteamiento general
Ejemplos de aplicacin
Mochila 0/1
Devolucin del cambio
Caminos de coste mnimo
Multiplicacin encadenada de matrices
Problema del viajante
3
Planteamiento general
Divide y vencers (top-down, recursivo)
resuelve problemas recursivamente y luego combina las soluciones
malo si los subproblemas no son independientes (Fibonacci)
Programacin dinmica (botton-up, iterativo)
resuelve primero subproblemas ms pequeos y despus los va
combinando hasta llegar a la solucin
cada subproblema se resuelve una sola vez
mejor que DyV si los subpoblemas no son independientes
4
Planteamiento general
Ejemplo (coeficientes binomiales)
n
k
n
k n k
n
k
n
k
n
k
o k n
n
k
k k n
|
\

| =

|
\

| =

|
\

| +
|
\

|
< <
|
\

| =
= =
!
!( )!
1
1
1
1
0
2
5
Planteamiento general
DyV => (2
n
)
funcion coefBinomiales(n,k: entero) : entero
si k=0 o k=n entonces
devolver 1
si no
devolver coefBinomiales(n-1, k-1) +
coefBinomiales(n-1, k)
6
Planteamiento general
Prog dinmica => (nk) (tiempo y espacio)
funcion coefBinomiales(n,k: entero) : entero
T: matriz [0..n, 0..k] de entero
Para i = 0 hasta n-k hacer T[i,0] = 1
Para i = 0 hasta k hacer T[i,i] = 1
Para j = 1 hasta k hacer
Para i = j+1 hasta n-k+j hacer
T[, j] = T[i-1, j-1] + T[i-1, j]
devolver T[n, k]
7
Planteamiento general
Aplicable a problemas que cumplen
Son problemas de optimizacin
La solucin (ptima) se puede construir en base
a una serie de decisiones sucesivas
8
Planteamiento general
La Programacin Dinmica (PD) es un punto medio
entre
La fuerza bruta
Construir TODOS los candidatos a solucin
El enfoque de avance rpido
Construir un nico candidato a solucin
Aplicable en problemas en que cada decisin tomada se puede
mantener definitivamente
En general, reduccin drstica del nmero de candidatos
explorados/construidos
3
9
Planteamiento general
Cada candidato corresponde a una secuencia
de decisiones
Slo se construyen aquellos candidatos que
son claramente viables
Se usa como filtro el principio del ptimo
... si es aplicable, si no, descartar el enfoque de
PD para resolver el problema
10
Planteamiento general
Principio del ptimo (PO)
Una secuencia ptima de decisiones tiene la propiedad de
que, cualesquiera que sean su estado inicial y la primera
decisin, las restantes decisiones constituyen una
secuencia ptima con respecto al estado alcanzado tras la
primera decisin
En una sucesin ptima de decisiones, toda subsecuencia
debe ser tambin ptima.
11
Planteamiento general
Cumplen el PO
Problema del camino de coste mnimo
No cumple el PO
Problema del camino simple (no pasa dos veces
por el mismo sitio) de coste mximo
12
Planteamiento general
Otra forma de plantearlo
la solucin ptima de cualquier caso no trivial de un
problema es la combinacin de soluciones ptimas de
algunos de sus subcasos
La dificultad est en determinar cuales son los subcasos
relevantes para el caso considerado
Por eso, la prog dinmica resuelve todos los subcasos, para
determinar los que realmente son relevantes; despus stos se
combinan para obtener la solucin ptima del caso general
El PO se puede aplicar operativamente para derivar
un algoritmo de PD
4
13
Planteamiento general
Se puede aplicar operativamente a decisiones
intermedias
Enfoque hacia delante
La decisin d
i
se hace en trminos de d
i+1
, ..., d
n
Se calcula hacia detrs!
Enfoque hacia detrs
La decisin d
i
se hace en trminos de d
0
, ..., d
i-1
Se calcula hacia delante!
14
Planteamiento general
Antes de aplicar PD, comprobar que el
problema cumple
Que es de optimizacin
Que la solucin (ptima) se puede construir en
base a una serie de decisiones sucesivas
El PO
15
Ejemplos de aplicacin
Mochila 0/1
Devolucin del cambio
Caminos de coste mnimo
Multiplicacin encadenada de matrices
Problema del viajante
16
Problema de la mochila 0/1
Problema
Dados n objetos, cada uno con un peso p
i
y un
beneficio asociado b
i
(1 i n), llenar una
mochila de capacidad (peso mximo) M, de
modo que se maximice el beneficio
No se pueden tomar partes de los objetos
La solucin es un vector X tal que x
i
= 0, 1
5
17
Problema de la mochila 0/1
Formalmente
MOCHILA(i,j,Y)
maximizar f(X) = x
k
b
k
sujeto a x
k
p
k
Y
con x
k
{0,1}, p
k
, b
k
> 0 para i k j
=> buscamos solucionar MOCHILA(1,n,M)
18
Problema de la mochila 0/1
No admite solucin de avance rpido
M = 7
B = [10,7,5]
P = [5,4,3]
Aproximacin por avance rpido X = [1,0,0],
f(X)=10
Solucin S = [0,1,1], f(S) = 12
19
Problema de la mochila 0/1
PO
mochila(1,n,M)
y
1
y
2
y
n
solucin ptima (x
1
x
2
x
n
)
Posibilidades
no coger objeto n => maximizar n-1 restantes con peso M
y
n
= 0 => y
1
y
n-1
solucin ptima de mochila(1,n-1,M)
coger objeto n => maximizar n-1 restantes con peso M-p
n
y
n
= 1 => y
1
y
n-1
solucin ptima de mochila(1,n-1,M-p
n
)
Se selecciona la alternativa que sea mejor
Dos pasos
Clculo del valor ptimo de la funcin objetivo
Reconstruccin de la solucin
20
Problema de la mochila 0/1
Sea f
i
(Y) el valor de la funcin objetivo para el
problema MOCHILA(1,i,Y)
Entonces (enfoque hacia atrs)
f
n
(M) = mx(f
n-1
(M), f
n-1
(M - p
n
) + b
n
)
f
i
(Y) = mx(f
i-1
(Y), f
i-1
(Y - p
i
) + b
i
)
Con
f
n
(M) objetivo a calcular
f
0
(Y) = 0, para todo Y 0 (no ganas nada sin meter algo)
f
i
(Y) = - , para todo Y < 0, i = 1, ..., n (no cabe)
f
i
(0) = 0, para todo i entre 1 y n
6
21
Problema de la mochila 0/1
Ejemplo: M=6, P = {2,3,4}, B={1,2,5}
DyV
f
3
(6) = max{f
2
(6), f
2
(2) + 5}
f
2
(6) = max{f
1
(6), f
1
(3) + 2}
f
2
(2) = max{f
1
(2), f
1
(-1) + 2}
f
1
(6) = max{f
0
(6), f
0
(4) + 1}
f
1
(3) = max{f
0
(3), f
0
(1) + 1}
f
1
(2) = max{f
0
(2), f
0
(0) + 1}
f
1
(-1) = -
X = {1,0,1}
Complejidad => (2
n
)
22
Problema de la mochila 0/1
Pero el clculo en Prog dinmica no es
descendente sino ascendente
pero no sabemos que valores de f
i-1
sern
necesarios para calcular f
i
hay que calcular cada f
i
en funcin de f
i-1
para
los M valores posibles (Y entre 1 y M)
Esto es factible si los pesos son enteros
si fueran reales no se podra cacular f
i
para todos los
valores reales entre 1 y M
23
Problema de la mochila 0/1
Procedimiento mochilaPD (P,B: matriz [1..n] de entero, M: entero
out maxBeneficio:entero, out X: matriz [1..n] de entero)
F: matriz [0..n][0..M] de entero
para j = 0 hasta M hacer
F[0, j] = 0
para i = 0 hasta n hacer
F[i, 0] = 0
para i = 1 hasta n hacer
para j = 1 hasta M hacer
si P[i] <= j entonces
F[i,j] = max ( F[i-1, j], F[i-1, j-P[i]] + B[i] )
si no
F[i, j] = F[i-1, j]
maxBeneficio = F[n, M]
24
Problema de la mochila 0/1
Complejidad
Recorremos la matriz completa => (nM)
si n.M << 2
n
la implementacin es muy eficiente
aunque, para el ejemplo, nM = 18 y 2
n
= 8
7
25
Problema de la mochila 0/1
Reconstruccin de la solucin (algoritmo
voraz) => (n)
Si f
i
(Y) = f
i-1
(Y)
es mejor no coger el objeto i => X[i] = 0
si no
es mejor coger el objeto i => X[i] = 1
i = n; p = M
mientras i >= 1 hacer
26
Problema de la mochila 0/1 (pesos reales)
f
i
(y) es una funcin escaln creciente:
porque el valor de la solucin (f
i
) se incrementa en
escalones cuando se incrementa el espacio llenable en
la mochila (y)
existe un nmero finito de ys 0=y
1
<y
2
<<y
k
que
cumplen que
f
i
(y
1
) < f
i
(y
2
) < < f
i
(y
k
)
f
i
(y) = -, y < y
1
f
i
(y) = f(y
k
) = cte, y y
k
(beneficio mximo cuando todos los
objetos han sido introducidos en la mochila)
f
i
(y) = f
i
(y
j
), y
j
y<y
j+1
slo es preciso calcular f
i
(y
j
) 1jk
27
Problema de la mochila 0/1 (pesos reales)
el conjunto ordenado S
i
= {(f
i
(y
j
), y
j
) | 1jk} representar
a f
i
(y)
cada miembro de S
i
es un par (b, p) en el que b = f
i
(y
j
) y
p = y
j
S
0
= {(0, 0)} <= f
0
(y) = 0, y >= 0
Se puede calcular S
i+1
a partir de S
i
calculando primero
S
i
1
={(b, p) | (b-b
i
, p-p
i
) S
i
}
S
i+1
puede calcularse ahora mezclando los pares de S
i
y S
i
1
regla de dominio: si S
i+1
contiene dos pares (b
j
,p
j
) y (b
k
,p
k
)
con la propiedad de que b
j
b
k
y p
j
p
k
entonces puede
eliminarse el par (b
j
, p
j
)
se dice que el par (b
k
, p
k
) domina al (b
j
, p
j
)
menos valor ms peso 28
Problema de la mochila 0/1 (pesos reales)
n=3, p[]={2, 3, 4} (p
0
,p
1
,p
2
), b[]={1, 2, 5} (b
0
,b
1
,b
2
), M=6
S
0
={(0, 0)} porque f
0
(y) = 0 para y 0; S
0
1
={(1, 2)} porque
(1-b
0
, 2-p
0
) S
0
mezclando ordenadamente S
0
y S
0
1
S
1
={(0, 0), (1, 2)}
={(f
1
(0), 0), (f
1
(2), 2)};
S
1
1
={(2, 3), (3, 5)} porque (2-b
1
, 3-p
1
)S
1
y (3-b
1
, 5-p
1
)S
1
S
2
={(0, 0), (1, 2), (2, 3), (3, 5)};
S
2
1
={(5, 4), (6, 6), (7, 7), (8, 9)}
S
3
={(0, 0), (1, 2), (2, 3), (5, 4), (6, 6), (7, 7), (8, 9)}
el clculo se ha realizado tambin para y>M
el par (3, 5) ha sido eliminado de S
3
como resultado de la
purga, pues el par (5, 4) domina al (3, 5)
8
29
Problema de la mochila 0/1 (pesos reales)
No hace falta considerar los pares (b, p) con p>M
se eliminan (7,7) y (8,9)
cuando se purgan estos valores de los conjuntos S
i
,
el valor buscado f
n
(M) es el valor de la b del ltimo
par de S
n
(6,6)
al calcular S
n
se tienen las soluciones de
mochila01(1, n, x) para 0 x M
30
La secuencia de decisiones
Si (b1, p1) es el ltimo par de S
n
, se puede determinar una
secuencia de decisiones x
i
que cumplan que b
i
x
i
= b1 y
p
i
x
i
= p1 buscando en los S
i
x
n
=0 si (b1, p1)S
n-1
si (b1, p1)S
n-1
entonces (p1-b
n
, p1-p
n
) S
n-1
y ponemos
x
n
=1
para seguir obteniendo las decisiones se precisa conocer
cmo se obtuvo (b1, p1) o (b1-b
n
, p1-p
n
) en S
n-1
. Esto se
puede hacer recursivamente
31
ejemplo
Siguiendo con el ejemplo anterior
con M=6, el valor de f
3
(6) viene dado por el par (6,
6) de S
3
como (6, 6)S
2
x
3
=1
(6, 6) procede del par (6-b
3
, 6-p
3
)=(1, 2),
as que (1, 2)S
2
como (1, 2) S
1
x
2
=0
como (1, 2) S
0
x
1
=1
por tanto una solucin ptima es x[]=(1, 0, 1)
32
Algoritmo informal
Procedimiento mochilaPD (P,B: matriz [1..n] de real, M: entero
out maxBeneficio : real, out X: matriz [1..n] de entero)
S
0
={(0, 0)}
para i = 1 hasta n hacer
S
i-1
1
= {(b, p) | (b-B[i], p-P[i]) S
i-1
y pM}
S
i
= Mezcla_y_Purga(S
i-1
, S
i-1
1
)
(bx, px) = ltimo par de S
n
maxBeneficio = bx
recuperarSecuencia(P, B, n, (bx, px), X )
9
33
Algoritmo informal
Procedimiento recuperarSecuencia (P,B: matriz [1..n] de real, i: entero
par: (real, real), out X: matriz [1..n] de entero)
si i > 0 entonces
si par S
i-1
entonces
X[i] = 1;
par = par (B[i], P[i])
si no
X[i] = 0
recuperarSecuencia(P, B, i-1, par, X)
34
Complejidad espacial
como S
i
se obtiene de la mezcla de S
i-1
y S
i-1
1
y |S
i-1
1
||S
i-1
||S
i
|2|S
i-1
|
|S
i
|2
i
|S
0
|
en el peor caso, no hay purgas:

0in-1
|S
i
|=
0in-1
|2
i
|=2
n
- 1
35
Complejidad temporal
S
i
se genera a partir de S
i-1
en un tiempo (|S
i-1
|)
tiempo total:
(|S
i-1
|) (|2
i-1
|) para i=0, 1, , n
(|2
i-1
|)=O(2
n
)
se puede implementar recuperarSecuencia con una
complejidad
espacial O(1)
temporal O(n
2
) => n bsquedas binarias de tamao S
i
36
Problema de la devolucin del cambio
Muy similar en su solucin al problema de la
mochila 0/1
Planteamiento
Dado D un sistema monetario con unos valores de
monedas D
1
, ..., D
n
, devolver una cantidad C
minimizando el nmero de monedas
Se suponen monedas de cada valor D
i
Observacin: el avance rpido no siempre funciona
(D = (1,4,6), C = 8) => [6,1,1] en lugar de [4,4]
10
37
Problema de la devolucin del cambio
Cumple las condiciones?
Es de optimizacin
La solucin (ptima) se puede construir en base
a una serie de decisiones sucesivas e.g.
dec
i
nmero de monedas de valor d
i
que se
toman => n posibles decisiones
El PO
38
Problema de la devolucin del cambio
Para facilitar implementacin
la decisin dec
i
no ser el nmero de monedas de
valor d
i
que tomamos, sino
la decisin dec
i
es si tomamos una moneda ms
de valor d
i
o no
Es posible que haya ms de n decisiones
39
Problema de la devolucin del cambio
Definimos f
i
(Y) como el nmero mnimo de
monedas para devolver Y con los valores de
monedas d
1
, ..., d
i
, es decir, el valor de la solucin
ptima del problema CAMBIO(1,i,Y)
Queremos calcular f
n
(C)
Aplicamos P.O. con enfoque hacia detrs
f
n
(C) = mn(f
n-1
(C), f
n
(C-d
n
) + 1)
f
i
(Y) = mn(f
i-1
(Y), f
i
(Y-d
i
) + 1)
40
Problema de la devolucin del cambio
Generalizacin
f
i
(Y) = mn(f
i-1
(Y), f
i
(Y-d
i
) + 1)
f
i
(Y) = + si Y < 0 (no se puede dar el cambio)
f
0
(Y) = + si Y > 0 (tampoco)
f
i
(0) = 0 si i entre 1 y n
11
41
Problema de la devolucin del cambio
Solucin similar al problema de la mochila
entera
Como d
i
y C enteros, usamos la primera solucin
Para recuperar la solucin, examinamos
F(n,C) y vamos reconstruyendo las
decisiones tomadas
42
Problema de la devolucin del cambio
Funcin cambioPD (D: matriz [1..n] de entero, C: entero
out minNumMonedas:entero, out X: matriz [1..n] de entero)
F: matriz [0..n][0..C] de entero
para j = 1 hasta C hacer
F[0, j] = +
para i = 0 hasta n hacer
F[i, 0] = 0
para i = 1 hasta n hacer
para j = 1 hasta C hacer
si D[i] <= j entonces
F[i,j] = min(F[i-1, j], F[i, j-D[i]] + 1)
si no
F[i, j] = F[i-1, j]
minNumMonedas = F[n, C]
43
Problema de la devolucin del cambio
Complejidad
Recorremos la matriz completa => (nC)
44
Problema de la devolucin del cambio
Reconstruccin de la solucin => (n
+ numMinMonedas)
Si f
i
(Y) = f
i-1
(Y)
es mejor no coger ms monedas de tipo i
si no
es mejor coger una moneda ms de tipo i =>
X[i] = X[i] + 1
12
45
Problema de la devolucin del cambio
Complejidad
Construccin de la matriz (n.C)
Reconstruccin de la solucin (n+C)
Global (n.C)
46
Problema de los caminos mnimos
Dado un grafo G = (V,A), encontrar el
camino de coste mnimo entre cada par de
vrtices i, j de V tal que i j
Disponemos de un enfoque de avance rpido
(algoritmo de Dijkstra) que, adaptado,
funciona en (n
3
) (restricin |a| 0 para toda
a A)
Slo imponemos que G no tenga ciclos de
longitud negativa
47
Problema de los caminos mnimos
Cumple las condiciones?
Es de optimizacin
La solucin (ptima) se puede construir en base a una
serie de decisiones sucesivas e.g.
dec a que vrtice vamos desde aqul en el que estamos
El PO
Sea C(i,j) el camino de coste mnimo entre i y j, con k en C(i,j);
entonces, los subcaminos C(i,k) y C(k,j) tambin son ptimos
48
Problema de los caminos mnimos
Definimos
A
k
(i,j) = longitud del camino de coste mnimo entre i y j
pasando a lo sumo por los vrtices 1 a k
Buscamos A
n
(i,j) para todos i,j V, i j
Por el principio del optimo
A
n
(i,j) depender de si el vrtice n aparece en el camino
de coste mnimo entre i y j
A
n
(i,j) = mn(A
n-1
(i,j), A
n-1
(i,n) + A
n-1
(n,j))
13
49
Problema de los caminos mnimos
Generalizando
A
k
(i,j) = mn(A
k-1
(i,j), A
k-1
(i,k) + A
k-1
(k,j))
A
0
(i,j) = G.A(i,j)
Ejemplo
0 4 11
G.A 6 0 2
3 0
| |
|
=
|
|

\
2 1
3
50
Problema de los caminos mnimos
Funcin caminosPD1(G: grafo): matriz [1..n,1..n] de real
C: matriz [1..n, 1..n] de real
C = G.A
para k = 1 hasta n hacer
para i = 1 hasta n hacer
para j = 1 hasta n hacer
C[i,j] = min(C[i,j], C[i,k] + C[k,j])
devolver C
51
Problema de los caminos mnimos
Complejidad
(n
3
) equivalente al algoritmo normal de Dijkstra pero
con menor constante oculta
peor que Dijkstra con monticulos si el grafo es dispero
(n
2
logn)
Falta reconstruir los caminos y no hemos
almacenado las decisiones ni las soluciones
intermedias
Seguiremos una estrategia similar a la del algoritmo de
Dijkstra
52
Problema de los caminos mnimos
En la matriz P se almacena el valor de la decisin (k
est en el camino entre i y j o no), a medida que se
toma
P = matriz [1..n,1..n] de entero (se inicializa a 0)
Si no se toma k, no se modifica P[i,j]
Si se toma k, se pone P[i,j] = k
P[i,j] almacena siempre el vrtice de mayor ndice entre i
y j
Si C[i,j] > C[i,k] + C[k,j]
C[i,j] = C[i,k] + C[k,j], P[i,j] = k
14
53
Problema de los caminos mnimos
Se puede disear un algoritmo que, a partir de P,
devuelva el camino ms corto entre i y j (similar a
Dijkstra)
Si P[i,j] = 0 => C[i,j] no ha cambiado (camino directo)
Si P[i,j] = k => camino ms corto entre i y j pasa por k
examinar recursivamente P[i,k] y P[k,j]
Funciona en O(n) para dos vrtices, y en O(n
3
) para
los caminos para todos los pares de vrtices
54
Multiplicacin encadenada de matrices
Se tienen n matrices M
1
,M
2
, ... , M
n
y se
quiere encontrar la mejor manera de hallar su
producto M = M
1
x M
2
x ... x M
n
Cada matriz M
i
tiene dimensiones d
i-1
x d
i
55
Multiplicacin encadenada de matrices
Nmero de multiplicaciones escalares en un
producto de matrices
A
pxq
x B
qxr
= C
pxr
=> p q r
A
2x3
x B
3x1
= C
2x1
=> 2 3 1 = 6
56
Multiplicacin encadenada de matrices
Producto de matrices es asociativo
cualquier orden da el mismo resultado final
(AB) C = A (BC)
pero no es conmutativo
ABC <> ACB
15
57
Multiplicacin encadenada de matrices
pero segn sea el orden puede cambiar el nmero
de multiplicaciones escalares
A
10x20
x B
20x50
x C
50x1
x D
1x100
= E
10x100
E = (A(B(CD))) => 125000 multiplicaciones
E = ((A(BC))D) => 2200 multiplicaciones
Se trata de minimizar el nmero de multiplicaciones
58
Multiplicacin encadenada de matrices
Las posibilidades sern todas las posibles formas de
colocar los parntesis
Sea T(n) nmero de formas esencialmente distintas de
colocar parntesis en un producto de n matrices
(M
1
)(M
2
... M
n
) .... (M
1
... M
n-1
) (M
n
)
Si el primer corte es (M
1
... M
i
) (M
i+1
... M
n
)
Hay T(i) posibilidades en el lado izquierdo y T(n-i) en el
lado derecho y cualquiera de un lado se puede combinar
con la del otro
Hay T(i) T(n-i) posibilidades para este valor de i
1 ) 1 ( , ) ( ) ( ) (
1
1
= =

=
T i n T i T n T
n
i
59
Multiplicacin encadenada de matrices
Los nmeros generados por esta recurrencia
son los nmeros de Catalan
1,1,2,5,14, ... ,4862 (n=10), .... , 2674440 (n=15)
Se puede probar que T(n) >= 2
n-2
Por tanto, un algoritmo por la fuerza bruta
tendra complejidad exponencial
60
Multiplicacin encadenada de matrices
Este problema satisface el principio del
ptimo
El orden ptimo para multiplicar n matrices
incluye el orden ptimo para multiplicar
cualquier subconjunto de las n matrices
Si (A((((BC)D)E)F)) es un orden ptimo
(BC)D debe ser un orden ptimo
16
61
Multiplicacin encadenada de matrices
La funcin a optimizar es la cantidad de
multiplicaciones escalares necesarias para
multiplicar una secuencia de matrices.
coste(1,n), coste de multiplicar M
1
hasta M
n
primera divisin => M = (M
1
... M
k
)(M
k+1
... M
n
)
coste(1,k) + coste(k+1,n) + d
0
d
k
d
n
coste(1,n) =
min(1<=k<n){coste(1,k) + coste(k+1,n) + d
0
d
k
d
n
}
62
Multiplicacin encadenada de matrices
Generalizando
coste(i,j) =
min(i<=k<j){coste(i,k) + coste(k+1,j) + d
i-1
d
k
d
j
},
si i < j
coste(i, j) = 0, si i = j
Diagonal principal
coste(i, j) = d
i-1
d
i
d
i+1
, si j = i+1
Segunda diagonal
63
Multiplicacin encadenada de matrices
Un algoritmo divide y vencers que
resolviera este problema tendra complejidad
exponencial => (3
n
)
Con programacin dinmica se almacenan
los resultados en una tabla T cuya posicin
(i,j) almacena coste(i,j)
64
Multiplicacin encadenada de matrices
El caso base es la diagonal principal o la segunda
diagonal
La solucin es la posicion (1,n)
Para calcular (i,j) necesitamos los valores de la
misma fila que van de i hasta j-1 (coste(i,k) | i <= k
<= j-1) y los de la misma columna que van desde
i+1 hasta j (coste(k+1, j) | i <= k <= j-1)
Se va rellenando por diagonales y no se necesita
toda la tabla
17
65
Multiplicacin encadenada de matrices
Funcin multiplicacinMatrices (d: [0..n] de entero)
devuelve entero
T: matriz [1..n, 1..n] de entero
Para i = 1 hasta n hacer T[i,i] = 0
Para diagonal = 1 hasta n-1 hacer
Para i = 1 hasta n-diagonal hacer
j = i+diagonal
T[i,j] = min (i<=k<=j-1) {T[i,k] + T[k+1,j] +
d[i-1]d[k]d[j]}
devolver T[1,n]
66
Multiplicacin encadenada de matrices
Complejidad
Hay que calcular n-d elementos en la diagonal d, para
cada uno de ellos necesitamos decidirnos entre d
posibilidades dados por los distintos valores de k
(n
3
)
1 1 1
2 3
1 1 1
( ) ( ) / 6
n n n
d d d
n d d n d d n n

= = =
= =

67
Multiplicacin encadenada de matrices
Falta reconstruir la forma de efectuar las
multiplicaciones
Seguiremos una estrategia similar a la del
problema de los caminos mnimos
En la matriz P se almacena el valor de la
decisin (k es el mnimo elegido) a medida
que se toma
P = matriz [1..n,1..n] de entero (se inicializa a 0)
68
Multiplicacin encadenada de matrices
Se puede disear un algoritmo que, a partir de P,
devuelva el orden en las multiplicaciones
Empezar en P[1, n]
Si P[i,j] = k
hay que separar (1,k) y (k+1,j)
examinar recursivamente P[i,k] y P[k+1,j]
Si k > i + 1 y j > k + 2
Su complejidad es (n)
Ejemplo
((ABC)D), ((A(BC))D)
18
69
Problema del viajante
Se tienen n ciudades y las distancias entre
cada una de ellas.
Se quiere partir de una de ellas y visitar
exactamente una vez cada ciudad, regresando
al punto de partida al final, y recorriendo la
menor distancia posible.
70
Problema del viajante
Fuerza bruta: examinar todos los posibles
recorridos y quedarnos con el mnimo
(n!)
Prog dinmica:
Se cumple el PO (elegimos nodo 1 como origen)
Un camino mnimo entre un nodo i y el nodo origen 1 que pasa
por todos los dems nodos excepto el 1, est compuesto por un
arco (i, j) junto con un camino mnimo entre j y 1 que pasa por
todos los dems nodos excepto el 1 y el i.
71
Problema del viajante
Long tour mnimo = C
1k
+ camino
V-{1,k}
(k, 1)
Si el tour es mnimo (PO)
camino
V-{1,k}
(k, 1) mnimo
g(i,S) = long camino mnimo que empieza en
vrtice i, pasa por todos los vrtices de S una vez, y
termina en vrtice 1
g(1, V-{1}), long camino mnimo prob viajante
72
Problema del viajante
g(1, V-{1}) = min
2<=k<=n
{c
1k
+ g(k, V-{1,k})}
g
iS
(i, S) = min
jS
(c
ij
+ g(j, S-{j}))
g(i, ) = c
i1
, 1<=i<=n
Para obtener el camino
Almacenar los valores (j) que minimizan cada g(i, S)
19
73
Problema del viajante
Procedure viajante(G: grafo; out longMinima: entero)
S = {G.V} {1}
Para i = 2 hasta n hacer g[i, ] = c
i1
Para j = 1 hasta n-2 hacer
Para i = 2 hasta n hacer
S
j
= calcularSubconjuntos(S, j, i)
// subconjuntos de S-{i} de tamao j (combinaciones)
Para k = 1 hasta numSubconjuntos (S
j
)
longMinima = g[1, S]
[ ]
[ , [ ]] min { [ , [ ] { }]}
j
j l S k il j
g i S k c g l S k l

= +
1
[1, ] min { [ , { }]}
l S l
g S c g l S l

= +
74
Problema del viajante
Complejidad
g(i, ) => i S-{1}
n-1 consultas a una matriz
g(i, S)
Si k=|S| => valores elegidos entre k
valores, k 1..n-2
g(1, S-{1})
Mnimo entre n-1 valores
2
( 1)
n
n
k
| |

|
\
75
Problema del viajante
Clculo de g(i,S)
2
2
1
2
2( 1) ( 1) ( 1)( 2)2 2 3
n
n
k
n
t n k n n n n
k

=
( | |
= + = +
( |
\

1
2 1
r
r
i
r
i r
i
=
| |
=
|
\

2
2
1
2
( 1) ( 1) 1 ( 1) ( 1)2 1 1
n
n
k
n
N n n n n
k

=
( | |
= + + = + +
( |
\

1
2 1
r
r
i
r
i
=
| |
=
|
\

N O(n2
n
), complejidad espacial
t (n
2
2
n
), complejidad temporal

Vous aimerez peut-être aussi