Anda di halaman 1dari 31

Programacin Dinmica Programacin Dinmica

Anlisis y Diseo de Algoritmos Anlisis y Diseo de Algoritmos


Programacin Dinmica Programacin Dinmica
Introduccin Introduccin
Elementos de la programacin dinmica Elementos de la programacin dinmica
Principio de Principio de optimalidad optimalidad de de Bellman Bellman
Definicin recursiva de la solucin ptima Definicin recursiva de la solucin ptima
Clculo de la solucin ptima Clculo de la solucin ptima
Ejemplos Ejemplos
Multiplicacin encadenada de matrices Multiplicacin encadenada de matrices
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Seleccin de actividades con pesos Seleccin de actividades con pesos
Problema de la mochila Problema de la mochila
Caminos mnimos: Algoritmos de Floyd y Caminos mnimos: Algoritmos de Floyd y Bellman Bellman- -Ford Ford
Distancia de edicin Distancia de edicin
Aplicaciones Aplicaciones
1 1
Programacin Dinmica Programacin Dinmica
Esta tcnica se aplica sobre problemas que presentan Esta tcnica se aplica sobre problemas que presentan
las siguientes caractersticas: las siguientes caractersticas:
Subproblemas Subproblemas optimales optimales: : La solucin ptima a un La solucin ptima a un
problema puede ser definida en funcin de soluciones problema puede ser definida en funcin de soluciones problema puede ser definida en funcin de soluciones problema puede ser definida en funcin de soluciones
ptimas a ptimas a subproblemas subproblemas de tamao menor. de tamao menor.
Solapamiento entre Solapamiento entre subproblemas subproblemas: : Al plantear la Al plantear la
solucin recursiva del problema, un mismo problema solucin recursiva del problema, un mismo problema
se resuelve ms de una vez. se resuelve ms de una vez.
2 2
Programacin Dinmica Programacin Dinmica
Enfoque ascendente ( Enfoque ascendente (bottom bottom- -up): up):
Primero se calculan las soluciones ptimas para Primero se calculan las soluciones ptimas para
problemas de tamao pequeo. problemas de tamao pequeo.
Luego, utilizando dichas soluciones, encuentra Luego, utilizando dichas soluciones, encuentra
soluciones a problemas de mayor tamao. soluciones a problemas de mayor tamao. soluciones a problemas de mayor tamao. soluciones a problemas de mayor tamao.
Clave: Memorizacin Clave: Memorizacin
Almacenar las soluciones de los Almacenar las soluciones de los subproblemas subproblemas en en
alguna estructura de datos para reutilizarlas alguna estructura de datos para reutilizarlas
posteriormente. De esa forma, se consigue un posteriormente. De esa forma, se consigue un
algoritmo ms eficiente que la fuerza bruta, que algoritmo ms eficiente que la fuerza bruta, que
resuelve el mismo resuelve el mismo subproblema subproblema una y otra vez. una y otra vez.
3 3
Programacin Dinmica Programacin Dinmica
Memorizacin Memorizacin
Para evitar calcular lo mismo varias veces: Para evitar calcular lo mismo varias veces:
Cuando se calcula una solucin, sta se almacena. Cuando se calcula una solucin, sta se almacena.
Antes de realizar una llamada recursiva para un Antes de realizar una llamada recursiva para un
subproblema subproblema Q, se comprueba si la solucin ha sido Q, se comprueba si la solucin ha sido subproblema subproblema Q, se comprueba si la solucin ha sido Q, se comprueba si la solucin ha sido
obtenida previamente: obtenida previamente:
Si no ha sido obtenida, se hace la llamada recursiva Si no ha sido obtenida, se hace la llamada recursiva
y, antes de devolver la solucin, sta se almacena. y, antes de devolver la solucin, sta se almacena.
Si ya ha sido previamente calculada, se recupera la Si ya ha sido previamente calculada, se recupera la
solucin directamente (no hace falta calcularla). solucin directamente (no hace falta calcularla).
Usualmente, se utiliza una matriz que se rellena Usualmente, se utiliza una matriz que se rellena
conforme las soluciones a los conforme las soluciones a los subproblemas subproblemas son son
calculados (espacio vs. tiempo). calculados (espacio vs. tiempo).
4 4
Programacin Dinmica Programacin Dinmica
Uso de la programacin dinmica: Uso de la programacin dinmica:
1. 1. Caracterizar la estructura de una solucin ptima. Caracterizar la estructura de una solucin ptima.
2. 2. Definir de forma recursiva la solucin ptima. Definir de forma recursiva la solucin ptima. 2. 2. Definir de forma recursiva la solucin ptima. Definir de forma recursiva la solucin ptima.
3. 3. Calcular la solucin ptima de forma ascendente. Calcular la solucin ptima de forma ascendente.
4. 4. Construir la solucin ptima a partir de los datos Construir la solucin ptima a partir de los datos
almacenados al obtener soluciones parciales. almacenados al obtener soluciones parciales.
5 5
Estrategias de diseo Estrategias de diseo
Algoritmos Algoritmos greedy: greedy:
Se Se construye construye la la solucin solucin incrementalmente incrementalmente, , utilizando utilizando
un un criterio criterio de de optimizacin optimizacin local. local.
Programacin Programacin dinmica dinmica::
Se Se descompone descompone el el problema problema en en subproblemas subproblemas
solapados solapados y se y se va va construyendo construyendo la la solucin solucin con con las las
soluciones soluciones de de esos esos subproblemas subproblemas..
Divide y Divide y vencers vencers::
Se Se descompone descompone el el problema problema en en subproblemas subproblemas
independientes independientes y se y se combinan combinan las las soluciones soluciones de de
esos esos subproblemas subproblemas..
6 6
Principio de Principio de Optimalidad Optimalidad
Para poder emplear programacin dinmica, una Para poder emplear programacin dinmica, una
secuencia ptima debe cumplir la condicin de que secuencia ptima debe cumplir la condicin de que
cada una de sus cada una de sus subsecuencias subsecuencias tambin sea ptima: tambin sea ptima:
Dado un problema P con n elementos, Dado un problema P con n elementos, Dado un problema P con n elementos, Dado un problema P con n elementos,
si la secuencia ptima es e si la secuencia ptima es e
11
e e
22
... ...e e
k k
...e ...e
nn
entonces: entonces:
e e
11
e e
22
... ...e e
k k
es solucin al problema P considerando los es solucin al problema P considerando los
k primeros elementos. k primeros elementos.
e e
k+1 k+1
...e ...e
nn
es solucin al problema P considerando los es solucin al problema P considerando los
elementos desde k+1 hasta n. elementos desde k+1 hasta n.
7 7
Principio de Principio de Optimalidad Optimalidad
En otras palabras: En otras palabras:
La solucin ptima de cualquier instancia no trivial La solucin ptima de cualquier instancia no trivial
de un problema es una combinacin de las soluciones de un problema es una combinacin de las soluciones
ptimas de sus ptimas de sus subproblemas subproblemas.. ptimas de sus ptimas de sus subproblemas subproblemas..
Se busca la solucin ptima a un problema Se busca la solucin ptima a un problema
como un proceso de decisin como un proceso de decisin multietpico multietpico. .
Se toma una decisin en cada paso, pero sta Se toma una decisin en cada paso, pero sta
depende de las soluciones a los depende de las soluciones a los subproblemas subproblemas
que lo componen. que lo componen.
8 8
Principio de Principio de Optimalidad Optimalidad
Un poco de historia: Un poco de historia: Bellman Bellman, aos 50 , aos 50
Enfoque est inspirado en la teora de control: Enfoque est inspirado en la teora de control:
Se obtiene la poltica ptima para un problema de Se obtiene la poltica ptima para un problema de
control con n etapas basndose en una poltica ptima control con n etapas basndose en una poltica ptima
para un problema similar, pero de n para un problema similar, pero de n- -1 etapas. 1 etapas. para un problema similar, pero de n para un problema similar, pero de n- -1 etapas. 1 etapas.
Etimologa: Programacin dinmica = Planificacin temporal Etimologa: Programacin dinmica = Planificacin temporal
En una poca hostil a la investigacin matemtica, En una poca hostil a la investigacin matemtica, Bellman Bellman
busc un nombre llamativo que evitase posibles confrontaciones: busc un nombre llamativo que evitase posibles confrontaciones:
it's impossible to use dynamic in a pejorative sense it's impossible to use dynamic in a pejorative sense
something not even a Congressman could object to something not even a Congressman could object to
Richard E. Bellman: Eye of the Hurricane: An Autobiography Richard E. Bellman: Eye of the Hurricane: An Autobiography
9 9
Principio de Principio de Optimalidad Optimalidad
Principio de Principio de Optimalidad Optimalidad de de Bellman Bellman
[[Bellman, R.E.: Dynamic Programming. Princeton University Press, 1957] Bellman, R.E.: Dynamic Programming. Princeton University Press, 1957]
Una Una poltica poltica ptima ptima tiene tiene la la propiedad propiedad de de que que, ,
sean sean cuales cuales sea el sea el estado estado inicial inicial y la y la decisin decisin inicial inicial, , sean sean cuales cuales sea el sea el estado estado inicial inicial y la y la decisin decisin inicial inicial, ,
las las decisiones decisiones restantes restantes deben deben constituir constituir una una solucn solucn
ptima ptima con con respecto respecto al al estado estado resultante resultante de la de la primera primera
decisin decisin. .
En En Informtica Informtica, un , un problema problema que que puede puede descomponerse descomponerse
de de esta esta forma se dice forma se dice que que presenta presenta subestructuras subestructuras
optimales optimales (la base de los (la base de los algoritmos algoritmos greedy y de la greedy y de la
programacin programacin dinmica dinmica). ).
10 10
Principio de Principio de Optimalidad Optimalidad
Principio de Principio de Optimalidad Optimalidad de de Bellman Bellman
[[Bellman, R.E.: Dynamic Programming. Princeton University Press, 1957] Bellman, R.E.: Dynamic Programming. Princeton University Press, 1957]
El principio de El principio de optimalidad optimalidad se se verifica verifica
si si toda toda solucin solucin ptima ptima a un a un problema problema est est compuesta compuesta si si toda toda solucin solucin ptima ptima a un a un problema problema est est compuesta compuesta
por por soluciones soluciones ptimas ptimas de de sus sus subproblemas subproblemas..
Ojo Ojo! !
El principio de El principio de optimalidad optimalidad no no nos nos dice dice que que, ,
si si tenemos tenemos las las soluciones soluciones ptimas ptimas de los de los subproblemas subproblemas, ,
entonces entonces podamos podamos combinarlas combinarlas para para obtener obtener la la solucin solucin
ptima ptima del del problema problema original original
11 11
Principio de Principio de Optimalidad Optimalidad
Principio de Principio de Optimalidad Optimalidad de de Bellman Bellman
[[Bellman, R.E.: Dynamic Programming. Princeton University Press, 1957] Bellman, R.E.: Dynamic Programming. Princeton University Press, 1957]
Ejemplo Ejemplo: : Cambio Cambio en en monedas monedas
La La solucin solucin ptima ptima para para 0.07 0.07 euros euros
es es 0.05 + 0.02 0.05 + 0.02 euros euros.. es es 0.05 + 0.02 0.05 + 0.02 euros euros..
La La solucin solucin ptima ptima para para 0.06 0.06 euros euros
es es 0.05 + 0.01 0.05 + 0.01 euros euros..
La La solucin solucin ptima ptima para para 0.13 0.13 euros euros
no no es es (0.05 + 2) + (0.05 + 0.01) (0.05 + 2) + (0.05 + 0.01) euros euros..
Sin embargo, Sin embargo, s s que que existe existe alguna alguna forma de forma de
descomponer descomponer 0.13 0.13 euros euros de de tal tal forma forma que que las las
soluciones soluciones ptimas ptimas a los a los subproblemas subproblemas nos nos den den
una una solucin solucin ptima ptima ((p.ej p.ej. 0.11 y 0.02 . 0.11 y 0.02 euros euros). ).
12 12
Definicin del problema Definicin del problema
Para aplicar programacin dinmica: Para aplicar programacin dinmica:
1. 1. Se comprueba que se cumple el principio de Se comprueba que se cumple el principio de
optimalidad optimalidad de de Bellman Bellman, para lo que hay que , para lo que hay que
encontrar la estructura de la solucin. encontrar la estructura de la solucin. encontrar la estructura de la solucin. encontrar la estructura de la solucin.
2. 2. Se define recursivamente la solucin ptima del Se define recursivamente la solucin ptima del
problema (en funcin de los valores de las soluciones problema (en funcin de los valores de las soluciones
para para subproblemas subproblemas de menor tamao). de menor tamao).
13 13
y clculo de la solucin ptima y clculo de la solucin ptima
3. 3. Se calcula el valor de la solucin ptima utilizando un Se calcula el valor de la solucin ptima utilizando un
enfoque ascendente: enfoque ascendente:
Se determina el conjunto de Se determina el conjunto de subproblemas subproblemas que que
hay que resolver (el tamao de la tabla). hay que resolver (el tamao de la tabla).
Se identifican los Se identifican los subproblemas subproblemas con una con una Se identifican los Se identifican los subproblemas subproblemas con una con una
solucin trivial (casos base). solucin trivial (casos base).
Se van calculando los valores de soluciones Se van calculando los valores de soluciones
ms complejas a partir de los valores ms complejas a partir de los valores
previamente calculados. previamente calculados.
4. 4. Se determina la solucin ptima Se determina la solucin ptima
a partir de los datos almacenados en la tabla. a partir de los datos almacenados en la tabla.
14 14
Programacin Dinmica Programacin Dinmica
Ejemplos Ejemplos
Sucesin de Sucesin de Fibonacci Fibonacci
Implementacin recursiva: O( Implementacin recursiva: O(
nn
))
Implementacin usando programacin dinmica: Implementacin usando programacin dinmica: (n) (n)
) 2 ( ) 1 ( ) ( + = n fib n fib n fib
if if (n == 0) (n == 0) return return 0; 0;
else else if if (n == 1) (n == 1) return return 1; 1;
else else { {
previo = 0; actual = 1; previo = 0; actual = 1;
for for (i=1; i<n; i++) { (i=1; i<n; i++) {
fib fib = previo + actual; = previo + actual;
previo = actual; actual = previo = actual; actual = fib fib; ;
} }
return return actual; actual;
} }
15 15
Programacin Dinmica Programacin Dinmica
Ejemplos Ejemplos
Nmeros combinatorios: Nmeros combinatorios:
Combinaciones de n sobre p Combinaciones de n sobre p
Implementacin inmediata Implementacin inmediata
)! ( !
!
p n p
n
p
n

=
|
|

\
|
Implementacin usando programacin dinmica Implementacin usando programacin dinmica
Tringulo de Pascal Tringulo de Pascal
16 16
|
|

\
|

+
|
|

\
|

=
|
|

\
|
p
n
p
n
p
n 1
1
1
\
Programacin Dinmica Programacin Dinmica
Ejemplos Ejemplos
Nmeros combinatorios: Nmeros combinatorios:
Combinaciones de n sobre p Combinaciones de n sobre p
|
|

\
|

+
|
|

\
|

=
|
|

\
|
p
n
p
n
p
n 1
1
1
Orden de eficiencia: Orden de eficiencia: ((np np))
17 17
Programacin Dinmica Programacin Dinmica
Ejemplos Ejemplos
Nmeros combinatorios: Nmeros combinatorios:
Combinaciones de n sobre p Combinaciones de n sobre p
int int combinaciones combinaciones ( (int int n, n, int int p) p)
{ {
for for (i=0; i<=n; i++) { (i=0; i<=n; i++) {
|
|

\
|

+
|
|

\
|

=
|
|

\
|
p
n
p
n
p
n 1
1
1
for for (j=0; j<=min( (j=0; j<=min(i,p i,p); ); j++ j++) { ) {
if if ((j==0) || (j==i)) ((j==0) || (j==i))
c[i][j] = 1 c[i][j] = 1
else else
c[i][j] = c[i c[i][j] = c[i- -1][j 1][j 1]+c[i 1]+c[i- -1][j]; 1][j];
} }
} }
return return c[n][p]; c[n][p];
} }
Orden de eficiencia: Orden de eficiencia: ((np np) en tiempo, ) en tiempo, ((np np) en espacio. ) en espacio.
18 18
Programacin Dinmica Programacin Dinmica
Ejemplos Ejemplos
Nmeros combinatorios: Nmeros combinatorios:
Combinaciones de n sobre p Combinaciones de n sobre p
int int combinaciones combinaciones ( (int int n, n, int int p) p)
{ {
b[0] = 1; b[0] = 1;
|
|

\
|

+
|
|

\
|

=
|
|

\
|
p
n
p
n
p
n 1
1
1
for for (i=1; i<=n; i++) { (i=1; i<=n; i++) {
b[i] = 1; b[i] = 1;
for for (j=i (j=i 1; j>0; j 1; j>0; j-- --) { ) {
b[j] += b[j b[j] += b[j 1]; 1];
} }
} }
return return b[p]; b[p];
} }
Orden de eficiencia: Orden de eficiencia: ((np np) en tiempo, ) en tiempo, (n) en espacio. (n) en espacio.
19 19
Programacin Dinmica Programacin Dinmica
Devolver el cambio Devolver el cambio
Existen casos para los que no se puede aplicar el Existen casos para los que no se puede aplicar el
algoritmo algoritmo greedy greedy (por ejemplo, devolver 8 peniques (por ejemplo, devolver 8 peniques
con monedas de 6, 4 y 1 penique). con monedas de 6, 4 y 1 penique).
Definicin recursiva de la solucin Definicin recursiva de la solucin Definicin recursiva de la solucin Definicin recursiva de la solucin
Clculo de la solucin con programacin dinmica: Clculo de la solucin con programacin dinmica:
Orden de eficiencia proporcional al tamao de la tabla, Orden de eficiencia proporcional al tamao de la tabla,
O( O(Cn Cn), donde n es el nmero de monedas distintas. ), donde n es el nmero de monedas distintas.
20 20

+
=

) }, ,..., ({ 1
) }, ,..., ({
min ) }, ,..., ({
1
1 1
1
i i
i
i
m C m m cambio
C m m cambio
C m m cambio
Programacin Dinmica Programacin Dinmica
Devolver el cambio Devolver el cambio

+
=

) }, ,..., ({ 1
) }, ,..., ({
min ) }, ,..., ({
1
1 1
1
i i
i
i
m C m m cambio
C m m cambio
C m m cambio
m={1,4,6}, C=8 m={1,4,6}, C=8
Solucin: 2 monedas, S={4,4}. Solucin: 2 monedas, S={4,4}.
21 21
0 1 2 3 4 5 6 7 8
{1} 0 1 2 3 4 5 6 7 8
{1,4} 0 1 2 3 1 2 3 4 2
{1,4,6} 0 1 2 3 1 2 1 2 2
Programacin Dinmica Programacin Dinmica
Multiplicacin encadenada de matrices Multiplicacin encadenada de matrices
Propiedad asociativa del producto de matrices: Propiedad asociativa del producto de matrices:
Dadas las matrices A Dadas las matrices A
11
(10x100), A (10x100), A
22
(100x5) y A (100x5) y A
33
(5x50), (5x50),
(A (A
11
AA
22
)A )A
33
implica 7500 multiplicaciones implica 7500 multiplicaciones
AA
11
(A (A
22
AA
33
) implica 75000 multiplicaciones ) implica 75000 multiplicaciones AA
11
(A (A
22
AA
33
) implica 75000 multiplicaciones ) implica 75000 multiplicaciones
Parentizaciones Parentizaciones posibles: posibles:
22 22

>
=
=

=
1 ) ( ) (
1 1
) (
1
1
n si k n P k P
n si
n P
n
k
|
|

\
|

2
4
n
n
Programacin Dinmica Programacin Dinmica
Multiplicacin encadenada de matrices Multiplicacin encadenada de matrices
Si cada matriz Si cada matriz AA
k k
tiene un tamao p tiene un tamao p
k k- -11
pp
k k
,,
el nmero de multiplicaciones necesario ser: el nmero de multiplicaciones necesario ser:
n k
p p p n k m k m n m
0
) , 1 ( ) , 1 ( ) , 1 ( + + + =
De forma general: De forma general:
23 23
A
1
x A
2
x A
3
xx A
k
A
k+1
x A
k+2
x x A
n
x
j k i
p p p j k m k i m j i m
1
) , 1 ( ) , ( ) , (

+ + + =
Programacin Dinmica Programacin Dinmica
Multiplicacin encadenada de matrices Multiplicacin encadenada de matrices
Matriz Matriz AA
k k
de tamao p de tamao p
k k- -11
pp
k k
Definicin recursiva de la solucin ptima Definicin recursiva de la solucin ptima::
Si i=j, entonces Si i=j, entonces
Si Si iij j, entonces , entonces
24 24
A
1
x A
2
x A
3
xx A
k
A
k+1
x A
k+2
x x A
n
x
{ }
j k i
j k i
p p p j k m k i m j i m
1
) , 1 ( ) , ( min ) , (

<
+ + + =
0 ) , ( = j i m
Programacin Dinmica Programacin Dinmica
Multiplicacin encadenada de matrices Multiplicacin encadenada de matrices
Implementacin: Implementacin:
Tenemos n Tenemos n
22
subproblemas subproblemas distintos m( distintos m(i,j i,j). ).
Para calcular m( Para calcular m(i,j i,j) necesitamos los valores ) necesitamos los valores Para calcular m( Para calcular m(i,j i,j) necesitamos los valores ) necesitamos los valores
almacenados en la fila i y en la columna j almacenados en la fila i y en la columna j
Para calcular cada valor necesitamos O(n), Para calcular cada valor necesitamos O(n),
por lo que el algoritmo resultante es de orden O(n por lo que el algoritmo resultante es de orden O(n
33
). ).
25 25
{ }
j k i
j k i
p p p j k m k i m j i m
1
) , 1 ( ) , ( min ) , (

<
+ + + =
Programacin Dinmica Programacin Dinmica
Multiplicacin encadenada de matrices Multiplicacin encadenada de matrices
Implementacin: Implementacin:
for for (i=1; i<=n; i++) (i=1; i<=n; i++)
m[ m[i,i i,i] = 0; ] = 0;
for for (s=2; s<=n; l++) (s=2; s<=n; l++)
for for (i=1; i<=n (i=1; i<=n- -s+1; i++) { s+1; i++) { for for (i=1; i<=n (i=1; i<=n- -s+1; i++) { s+1; i++) {
j = i+s j = i+s- -1; 1;
m[ m[i,j i,j] = ; ] = ;
for for (k=i; k<=j (k=i; k<=j- -1; k++) { 1; k++) {
q = m[ q = m[i,k i,k] + m[k+1,j] + p[i ] + m[k+1,j] + p[i- -1]*p[k]p[j] 1]*p[k]p[j]
if if (q < m[ (q < m[i,j i,j]) { ]) {
m[ m[i,j i,j] = q; ] = q;
s[ s[i,j i,j] = k; ] = k;
} }
} }
} }
26 26
Programacin Dinmica Programacin Dinmica
Multiplicacin encadenada de matrices Multiplicacin encadenada de matrices
Implementacin: Implementacin:
// Suponiendo que hemos calculado previamente s[ // Suponiendo que hemos calculado previamente s[i,j i,j] ]
MultiplicaCadenaMatrices MultiplicaCadenaMatrices (A, i, j) (A, i, j)
{ {{ {
if if (j>i) { (j>i) {
x = x = MultplicaCadenaMatrices MultplicaCadenaMatrices (A, i, s[ (A, i, s[i,j i,j]); ]);
y = y = MultplicaCadenaMatrices MultplicaCadenaMatrices (A, s[ (A, s[i,j i,j]+1, j); ]+1, j);
return return MultiplicaMatrices MultiplicaMatrices(x, y); (x, y);
} } else else { {
return return A[i]; A[i];
} }
} }
27 27
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Problema: Problema:
Comparar dos cadenas y encontrar la Comparar dos cadenas y encontrar la subsecuencia subsecuencia
comn de mayor longitud. comn de mayor longitud.
Ejemplo: Ejemplo:
Cadenas: Cadenas:
X = (A B C B D A B), X = (A B C B D A B),
Y = (B D C A B A), Y = (B D C A B A),
Subsecuencia Subsecuencia comn de mayor longitud: comn de mayor longitud:
LCS = (B C B A) LCS = (B C B A)
X = ( A X = ( A B B C C B B D D A A B ) B )
Y = ( Y = ( B B D D C C A A B B A A ) )
28 28
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Un algoritmo de fuerza bruta comparara cualquier Un algoritmo de fuerza bruta comparara cualquier
subsecuencia subsecuencia de X con los smbolos de Y: de X con los smbolos de Y:
Si |X|=m, |Y|=n, entonces hay 2 Si |X|=m, |Y|=n, entonces hay 2
mm
subsecuencias subsecuencias de X de X
que debemos comparar con Y (n comparaciones), por que debemos comparar con Y (n comparaciones), por que debemos comparar con Y (n comparaciones), por que debemos comparar con Y (n comparaciones), por
lo que nuestro algoritmo sera de orden lo que nuestro algoritmo sera de orden O(n2 O(n2
mm
) )..
Sin embargo, LCS tiene subestructuras Sin embargo, LCS tiene subestructuras optimales optimales::
Si buscamos la LCS para pares de prefijos de X e Y, Si buscamos la LCS para pares de prefijos de X e Y,
podemos calcular la solucin de nuestro problema podemos calcular la solucin de nuestro problema
29 29
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Si buscamos la LCS para pares de prefijos de X e Y, Si buscamos la LCS para pares de prefijos de X e Y,
podemos calcular la solucin de nuestro problema podemos calcular la solucin de nuestro problema
XX
ii
Prefijo de X de longitud i. Prefijo de X de longitud i.
Y Y
jj
Prefijo de Y de longitud j. Prefijo de Y de longitud j. Y Y
jj
Prefijo de Y de longitud j. Prefijo de Y de longitud j.
c( c(i,j i,j)) Longitud de la LCS para X Longitud de la LCS para X
ii
e e Y Y
jj
..
La longitud de la La longitud de la subsecuencia subsecuencia de mayor longitud de mayor longitud
(LCS) de X e Y ser (LCS) de X e Y ser c( c(m,n m,n), ), con |X|=m, |Y|=n. con |X|=m, |Y|=n. 30 30


= +
=
caso otro en j i c j i c
j y i x si j i c
j i c
)} 1 , ( ), , 1 ( max{
] [ ] [ 1 ) 1 , 1 (
) , (
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Definicin recursiva de la solucin: Definicin recursiva de la solucin:
Caso base: Caso base:
c(0,0) = 0 c(0,0) = 0 ((Subcadena Subcadena vaca) vaca)
c(0,j) = c(i,0) = 0 c(0,j) = c(i,0) = 0 (LCS de la cadena vaca (LCS de la cadena vaca
y cualquier otra cadena) y cualquier otra cadena) y cualquier otra cadena) y cualquier otra cadena)
Clculo recursivo: Clculo recursivo:
Primer caso (x[i]=y[j]=s): Se emparejan ambos Primer caso (x[i]=y[j]=s): Se emparejan ambos
smbolos y la LCS aumenta de longitud: smbolos y la LCS aumenta de longitud:
LCS( LCS(XX
ii
,Y ,Y
jj
)= LCS(X )= LCS(X
ii- -11
,Y ,Y
jj- -11
)+{s}. )+{s}.
Segundo caso (x[i]y[j]): No se pueden emparejar Segundo caso (x[i]y[j]): No se pueden emparejar
los smbolos x[i] e y[j], por lo que LCS( los smbolos x[i] e y[j], por lo que LCS(XX
ii
,Y ,Y
jj
) ser ) ser
la mejor entre LCS(X la mejor entre LCS(X
ii- -11
,Y ,Y
jj
) y LCS(X ) y LCS(X
ii
,Y ,Y
jj- -11
). ). 31 31
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Implementacin iterativa del algoritmo: Implementacin iterativa del algoritmo:
int[][] LCS (X, Y)
{
for (i=0; i<=X.length; i++) c[i][0]=0; // Y
0
for (j=1; j<=T.length; j++) c[0][j]=0; // X for (j=1; j<=T.length; j++) c[0][j]=0; // X
0
for (i=1; i<=X.length; i++) // X
i
for (j=1; j<=Y.length; j++) // Y
j
if ( X[i] == Y[j] )
c[i][j] = c[i-1][j-1] + 1;
else
c[i][j] = max ( c[i-1][j], c[i][j-1] );
return c;
}
32 32
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Ejemplo: Ejemplo:
X = (A B C B), X = (A B C B),
Y = (B D C A B), Y = (B D C A B),
Y
j
B D C A B
0 1 2 3 4 5
X
i
0 0 0 0 0 0 0
A 1 0
for (i=0; i<=X.length; i++) c[i][0]=0; // Y
0
for (j=1; j<=T.length; j++) c[0][j]=0; // X
0
33 33
B 2 0
C 3 0
B 4 0
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Ejemplo: Ejemplo:
X = ( X = (A A B C B), B C B),
Y = ( Y = (B D C B D C A B), A B),
Y
j
B D C A B
0 1 2 3 4 5
X
i
0 0 0 0 0 0 0
A 1 0 0 0 0
if ( X[i] == Y[j] )
c[i][j] = c[i-1][j-1] + 1;
else
c[i][j] = max ( c[i-1][j], c[i][j-1] );
34 34
B 2 0
C 3 0
B 4 0
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Ejemplo: Ejemplo:
X = ( X = (A A B C B), B C B),
Y = ( Y = (B D C B D C A A B), B),
Y
j
B D C A B
0 1 2 3 4 5
X
i
0 0 0 0 0 0 0
A 1 0 0 0 0 1
if ( X[i] == Y[j] )
c[i][j] = c[i-1][j-1] + 1;
else
c[i][j] = max ( c[i-1][j], c[i][j-1] );
35 35
B 2 0
C 3 0
B 4 0
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Ejemplo: Ejemplo:
X = ( X = (A A B C B), B C B),
Y = ( Y = (B D C A B D C A B B), ),
Y
j
B D C A B
0 1 2 3 4 5
X
i
0 0 0 0 0 0 0
A 1 0 0 0 0 1 1
if ( X[i] == Y[j] )
c[i][j] = c[i-1][j-1] + 1;
else
c[i][j] = max ( c[i-1][j], c[i][j-1] );
36 36
B 2 0
C 3 0
B 4 0
Programacin Dinmica Programacin Dinmica
Subsecuencia Subsecuencia de mayor longitud (LCS) de mayor longitud (LCS)
Ejemplo: Ejemplo:
X = (A B C B), X = (A B C B),
Y = (B D C A B), Y = (B D C A B),
LCS = (B C B) LCS = (B C B)
Y
j
B D C A B
0 1 2 3 4 5
X
i
0 0 0 0 0 0 0
A 1 0 0 0 0 1 1
LCS = (B C B) LCS = (B C B)
X = ( A X = ( A B B C C B B ) )
Y = ( Y = ( B B D D C C A A B B ) )
N NOTA OTA: :
A partir del valor c[i][j] podemos determinar cmo A partir del valor c[i][j] podemos determinar cmo
se calcul ste y encontrar la LCS hacia atrs se calcul ste y encontrar la LCS hacia atrs
37 37
B 2 0 1 1 1 1 2
C 3 0 1 1 2 2 2
B 4 0 1 1 2 2 3
Programacin Dinmica Programacin Dinmica
Seleccin de actividades con pesos Seleccin de actividades con pesos
Enunciado del problema Enunciado del problema
Dado un conjunto C de n tareas o actividades, con Dado un conjunto C de n tareas o actividades, con
s s
ii
= tiempo de comienzo de la actividad i = tiempo de comienzo de la actividad i s s
ii
= tiempo de comienzo de la actividad i = tiempo de comienzo de la actividad i
f f
ii
= tiempo de finalizacin de la actividad i = tiempo de finalizacin de la actividad i
v v
ii
= valor (o peso) de la actividad i = valor (o peso) de la actividad i
encontrar el subconjunto S de actividades compatibles encontrar el subconjunto S de actividades compatibles
de peso mximo (esto es, un conjunto de actividades de peso mximo (esto es, un conjunto de actividades
que no se solapen en el tiempo y que, adems, nos que no se solapen en el tiempo y que, adems, nos
proporcione un valor mximo). proporcione un valor mximo).
38 38
Programacin Dinmica Programacin Dinmica
Seleccin de actividades con pesos Seleccin de actividades con pesos
Recordatorio Recordatorio
Existe un algoritmo Existe un algoritmo greedy greedy para este problema cuando para este problema cuando
todas las actividades tienen el mismo valor (elegir las todas las actividades tienen el mismo valor (elegir las
actividades en orden creciente de hora de finalizacin). actividades en orden creciente de hora de finalizacin). actividades en orden creciente de hora de finalizacin). actividades en orden creciente de hora de finalizacin).
Sin embargo, el algoritmo Sin embargo, el algoritmo greedy greedy no funciona en general: no funciona en general:
39 39
valor = 999
valor = 1
b
a
Programacin Dinmica Programacin Dinmica
Seleccin de actividades con pesos Seleccin de actividades con pesos
Observacin Observacin
Si, como en el algoritmo Si, como en el algoritmo greedy greedy, ordenamos las , ordenamos las
actividades por su hora de finalizacin actividades por su hora de finalizacin
1
40 40
Tiempo
3
2
6
5
7
4
8
Programacin Dinmica Programacin Dinmica
Seleccin de actividades con pesos Seleccin de actividades con pesos
Observacin Observacin
podemos definir p(j) como el mayor ndice i<j podemos definir p(j) como el mayor ndice i<j
tal que la actividad i es compatible con la actividad j tal que la actividad i es compatible con la actividad j
p(1)=0
41 41
Tiempo
p(3)=0
p(2)=0
p(6)=2
p(5)=0
p(7)=3
p(4)=1
p(8)=5
Programacin Dinmica Programacin Dinmica
Seleccin de actividades con pesos Seleccin de actividades con pesos
Definicin recursiva de la solucin Definicin recursiva de la solucin

> +
=
=
0 )} 1 ( )), ( ( ) ( max{
0 0
) (
j si j OPT j p OPT j v
j si
j OPT
Caso 1: Se elige la actividad j. Caso 1: Se elige la actividad j.
No se pueden escoger actividades incompatibles >p(j). No se pueden escoger actividades incompatibles >p(j).
La solucin incluir la solucin ptima para p(j). La solucin incluir la solucin ptima para p(j).
Caso 2: No se elige la actividad j. Caso 2: No se elige la actividad j.
La solucin coincidir con la solucin ptima La solucin coincidir con la solucin ptima
para las primeras (j para las primeras (j- -1) actividades 1) actividades..
42 42
Programacin Dinmica Programacin Dinmica
Seleccin de actividades con pesos Seleccin de actividades con pesos
Implementacin iterativa del algoritmo Implementacin iterativa del algoritmo
SeleccinActividadesConPesos SeleccinActividadesConPesos (C: actividades): S (C: actividades): S
{ {
Ordenar C segn tiempo de finalizacin; Ordenar C segn tiempo de finalizacin; // O(n log n) // O(n log n)
Calcular p[1]..p[n]; Calcular p[1]..p[n]; // O(n log n) // O(n log n) Calcular p[1]..p[n]; Calcular p[1]..p[n]; // O(n log n) // O(n log n)
mejor[0] = 0; mejor[0] = 0; // O(1) // O(1)
for for (i=1; i<=n, i++) (i=1; i<=n, i++) // O(n) // O(n)
mejor[i] = mejor[i] = max max ( valor[i]+mejor[p[i]], ( valor[i]+mejor[p[i]],
mejor[i mejor[i- -1] ); 1] );
return return Solucin(mejor); Solucin(mejor); // O(n) // O(n)
} }
43 43
Programacin Dinmica Programacin Dinmica
El problema de la mochila 0/1 El problema de la mochila 0/1
Tenemos un conjunto S de n objetos, en el que cada Tenemos un conjunto S de n objetos, en el que cada
objeto i tiene un beneficio objeto i tiene un beneficio bb
ii
y un peso y un peso w w
ii
positivos. positivos.
Objetivo: Seleccionar Objetivo: Seleccionar Objetivo: Seleccionar Objetivo: Seleccionar
los elementos que nos los elementos que nos
garantizan un beneficio garantizan un beneficio
mximo pero mximo pero pero pero con con
un peso global menor un peso global menor
o igual que W. o igual que W.
44 44
Programacin Dinmica Programacin Dinmica
El problema de la mochila 0/1 El problema de la mochila 0/1
Dado el conjunto S de n objetos, Dado el conjunto S de n objetos,
sea sea S S
k k
el conjunto de los k primeros objetos (de 1 a k): el conjunto de los k primeros objetos (de 1 a k):
Podemos definir Podemos definir B( B(k,w k,w) ) como la ganancia de la mejor como la ganancia de la mejor
solucin obtenida a partir de los elementos de solucin obtenida a partir de los elementos de S S
k k
para para solucin obtenida a partir de los elementos de solucin obtenida a partir de los elementos de S S
k k
para para
una mochila de capacidad w. una mochila de capacidad w.
Ahora bien, la mejor seleccin de elementos del Ahora bien, la mejor seleccin de elementos del
conjunto conjunto S S
k k
para una mochila de tamao w se puede para una mochila de tamao w se puede
definir en funcin de selecciones de elementos de S definir en funcin de selecciones de elementos de S
k k- -11
para mochilas de menor capacidad para mochilas de menor capacidad
45 45
Programacin Dinmica Programacin Dinmica
El problema de la mochila 0/1 El problema de la mochila 0/1
Cmo calculamos B( Cmo calculamos B(k,w k,w)? )?
O bien la mejor opcin para O bien la mejor opcin para S S
k k
coincide con la mejor coincide con la mejor
seleccin de elementos de S seleccin de elementos de S
k k- -11
con peso mximo w con peso mximo w
(el beneficio mximo para (el beneficio mximo para S S
k k
coincide con el de S coincide con el de S
k k- -11
), ), (el beneficio mximo para (el beneficio mximo para S S
k k
coincide con el de S coincide con el de S
k k- -11
), ),
o bien es es el resultado de aadir el objeto k a la mejor o bien es es el resultado de aadir el objeto k a la mejor
seleccin de elementos de S seleccin de elementos de S
k k- -11
con peso mximo con peso mximo
w ww w
k k
(el beneficio para (el beneficio para S S
k k
ser el beneficio que se ser el beneficio que se
obtena en S obtena en S
k k- -1 1
para una mochila de capacidad w para una mochila de capacidad ww w
k k
ms el beneficio ms el beneficio bb
k k
asociado al objeto k). asociado al objeto k).
46 46
Programacin Dinmica Programacin Dinmica
El problema de la mochila 0/1 El problema de la mochila 0/1
Definicin recursiva de B( Definicin recursiva de B(k,w k,w): ):

= +
=
=
1 ) , 1 (
0 ) , 1 (
) , (
k k k
k
x si b w w k B
x si w k B
w k B
Para resolver el problema de la mochila nos Para resolver el problema de la mochila nos
quedaremos con el mximo de ambos valores: quedaremos con el mximo de ambos valores:
47 47
} ) , 1 ( ), , 1 ( max{ ) , (
k k
b w w k B w k B w k B + =
Programacin Dinmica Programacin Dinmica
El problema de la mochila 0/1 El problema de la mochila 0/1
Clculo ascendente de B( Clculo ascendente de B(k,w k,w))
usando una matriz B de tamao (n+1) x (W+1): usando una matriz B de tamao (n+1) x (W+1):
int int[][] [][] knapsack knapsack (W, w[1..n], b[1..n]) (W, w[1..n], b[1..n])
{ {
for for (p=0; p<=W; p++) (p=0; p<=W; p++) for for (p=0; p<=W; p++) (p=0; p<=W; p++)
B[0][p]=0; B[0][p]=0;
for for (k=1; k<=n; k++) { (k=1; k<=n; k++) {
for for (p=0; p<w[k]; p++) (p=0; p<w[k]; p++)
B[k][p] = B[k B[k][p] = B[k- -1][p]; 1][p];
for for (p=w[k]; p<=W; w++) (p=w[k]; p<=W; w++)
B[k][p] = B[k][p] = max max ( B[k ( B[k- -1][pw[k]]+b[k], B[k 1][pw[k]]+b[k], B[k- -1][p] ); 1][p] );
} }
return return B; B;
} }
48 48
Programacin Dinmica Programacin Dinmica
El problema de la mochila 0/1 El problema de la mochila 0/1
Cmo calculamos la solucin ptima a partir de B( Cmo calculamos la solucin ptima a partir de B(k,w k,w)? )?
Calculamos la solucin para B[k][w] Calculamos la solucin para B[k][w]
utilizando el siguiente algoritmo: utilizando el siguiente algoritmo:
Si B[k][w] == B[k Si B[k][w] == B[k- -1][w], 1][w], Si B[k][w] == B[k Si B[k][w] == B[k- -1][w], 1][w],
entonces el objeto k no se selecciona y se seleccionan entonces el objeto k no se selecciona y se seleccionan
los objetos correspondientes a la solucin ptima para los objetos correspondientes a la solucin ptima para
k k- -1 objetos y una mochila de capacidad w: 1 objetos y una mochila de capacidad w:
la solucin para B[k la solucin para B[k- -1][w]. 1][w].
Si B[k][w] != B[k Si B[k][w] != B[k- -1][w], 1][w],
se selecciona el objeto k se selecciona el objeto k
y los objetos correspondientes a la solucin ptima y los objetos correspondientes a la solucin ptima
para k para k- -1 objetos y una mochila de capacidad w 1 objetos y una mochila de capacidad w- -w[k]: w[k]:
la solucin para B[k la solucin para B[k- -1][w 1][w- -w[k]]. w[k]].
49 49
Programacin Dinmica Programacin Dinmica
El problema de la mochila 0/1 El problema de la mochila 0/1
Eficiencia del algoritmo Eficiencia del algoritmo
Tiempo de ejecucin: Tiempo de ejecucin: (n W)
Pseudopolinmico (no es polinmico sobre el tamao
de la entrada; esto es, sobre el nmero de objetos). de la entrada; esto es, sobre el nmero de objetos).
El problema de la mochila es NP.
NOTA: Existe un algoritmo polinmico de
orden O(n
2
v*) que proporciona una solucin
aproximada al 0.01% del ptimo [Kleinberg
& Tardos, seccin 11.8: Arbitrarily Good
Approximations: The Knapsack Problem].
50 50
Programacin Dinmica Programacin Dinmica
El problema de la mochila 0/1 El problema de la mochila 0/1
Ejemplo Ejemplo
Mochila de tamao Mochila de tamao W=11 W=11
Nmero de objetos Nmero de objetos n=5 n=5
Solucin ptima Solucin ptima {3,4} {3,4}
1
Valor
18
22
28
1
Peso
5
6
6 2
7
Objeto
1
3
4
5
2
51 51
28 7 5

{ 1, 2 }
{ 1, 2, 3 }
{ 1, 2, 3, 4 }
{ 1 }
{ 1, 2, 3, 4, 5 }
0
0
0
0
0
0
0
1
0
1
1
1
1
1
2
0
6
6
6
1
6
3
0
7
7
7
1
7
4
0
7
7
7
1
7
5
0
7
18
18
1
18
6
0
7
19
22
1
22
7
0
7
24
24
1
28
8
0
7
25
28
1
29
9
0
7
25
29
1
34
10
0
7
25
29
1
35
11
0
7
25
40
1
40
Programacin Dinmica Programacin Dinmica
Caminos mnimos: Algoritmo de Floyd Caminos mnimos: Algoritmo de Floyd
Problema: Problema:
Calcular el camino ms corto que une cada par de Calcular el camino ms corto que une cada par de
vrtices de un grafo, considerando que no hay pesos vrtices de un grafo, considerando que no hay pesos
negativos. negativos.
Posibles soluciones: Posibles soluciones:
Por fuerza bruta (de orden exponencial). Por fuerza bruta (de orden exponencial).
Aplicar el algoritmo de Aplicar el algoritmo de Dijkstra Dijkstra para cada vrtice. para cada vrtice.
Algoritmo de Floyd (programacin dinmica). Algoritmo de Floyd (programacin dinmica).
52 52
Programacin Dinmica Programacin Dinmica
Caminos mnimos: Algoritmo de Floyd Caminos mnimos: Algoritmo de Floyd
Definicin recursiva de la solucin: Definicin recursiva de la solucin:
D D
kk
( (i,j i,j) ): Camino ms corto de i a j usando slo los k : Camino ms corto de i a j usando slo los k
primeros vrtices del grafo como puntos intermedios. primeros vrtices del grafo como puntos intermedios.
Expresin recursiva: Expresin recursiva:
Caso base: Caso base:
53 53
)} , ( ) , ( ), , ( min{ ) , (
1 1 1
j k D k i D j i D j i D
k k k k
+ =
ij
c j i D = ) , (
0
Programacin Dinmica Programacin Dinmica
Caminos mnimos: Algoritmo de Floyd Caminos mnimos: Algoritmo de Floyd
Algoritmo de Floyd (1962): Algoritmo de Floyd (1962): (V
3
)
for for (i=0; i<n; i++) (i=0; i<n; i++)
for for (j=0; j<n; (j=0; j<n; j++ j++) )
D[i][j] = coste( D[i][j] = coste(i,j i,j); );
for for (k=0; k<n; k++) (k=0; k<n; k++)
for for (i=0; i<n; i++) (i=0; i<n; i++)
for for (j=0; j<n; (j=0; j<n; j++ j++) )
if if (D[i][k] + D[k][j] < D[i][j] ) (D[i][k] + D[k][j] < D[i][j] )
D[i][j] = D[i][k] + D[k][j]; D[i][j] = D[i][k] + D[k][j];
54 54
)} , ( ) , ( ), , ( min{ ) , (
1 1 1
j k D k i D j i D j i D
k k k k
+ =
Programacin Dinmica Programacin Dinmica
Caminos mnimos: Algoritmo de Caminos mnimos: Algoritmo de Bellman Bellman- -Ford Ford
Si slo nos interesan los caminos mnimos desde un Si slo nos interesan los caminos mnimos desde un
vrtice concreto del grafo G(V,E), podemos utilizar el vrtice concreto del grafo G(V,E), podemos utilizar el
algoritmo algoritmo greedy greedy de de Dijkstra Dijkstra, de orden , de orden O(E log V) O(E log V), ,
siempre y cuando tengamos siempre y cuando tengamos pesos no negativos pesos no negativos..
El algoritmo de El algoritmo de Dijkstra Dijkstra no funciona con pesos negativos: no funciona con pesos negativos:
Ojo! Ojo!
Tampoco podemos sumarle una constante a cada peso. Tampoco podemos sumarle una constante a cada peso.
55 55
t
s
2
1
3
-6
Programacin Dinmica Programacin Dinmica
Caminos mnimos: Algoritmo de Caminos mnimos: Algoritmo de Bellman Bellman- -Ford Ford
Si tenemos pesos negativos, podemos utilizar el Si tenemos pesos negativos, podemos utilizar el
algoritmo de algoritmo de Bellman Bellman- -Ford, basado en programacin Ford, basado en programacin
dinmica y de orden dinmica y de orden O(EV) O(EV), siempre y cuando no , siempre y cuando no
tengamos ciclos de peso negativo: tengamos ciclos de peso negativo:
N NOTA OTA: Si un camino de s a t incluye un ciclo de peso negativo, : Si un camino de s a t incluye un ciclo de peso negativo,
no existe un camino ms corto de s a t (y, en cualquier caso, no existe un camino ms corto de s a t (y, en cualquier caso,
Bellman Bellman- -Ford tampoco encontrara el camino simple ms corto). Ford tampoco encontrara el camino simple ms corto).
56 56

+
=
=

caso otro en }} ) ( { min , ) ( min{


0 i si
) (
1
) , (
1 vw i
E w v
i
i
c v D w D
w D
Programacin Dinmica Programacin Dinmica
Caminos mnimos: Algoritmo de Caminos mnimos: Algoritmo de Bellman Bellman- -Ford Ford
Algoritmo de Algoritmo de Bellman Bellman- -Ford: Ford: (EV)
foreach foreach v v V { V {
D[v] D[v] = = ; ;
predecesor predecesor[v] = null; [v] = null;
} }} }
D[s] = 0; D[s] = 0;
for for ( (i i=1; =1; i i<n; <n; i i++) { ++) {
foreach foreach (v, w) (v, w) E E { {
if if (D[v] + (D[v] + coste coste( (v,w v,w) < D[w]) { ) < D[w]) {
D[w] = D[v] + D[w] = D[v] + coste coste( (v,w v,w); );
predecesor predecesor[w] = v; [w] = v;
} }
} }
} }
57 57
Programacin Dinmica Programacin Dinmica
Distancia de edicin Distancia de edicin
Tambin conocida como distancia Tambin conocida como distancia Levenshtein Levenshtein, mide , mide
la diferencia entre dos cadenas s y t como el nmero la diferencia entre dos cadenas s y t como el nmero
mnimo de operaciones de edicin que hay que mnimo de operaciones de edicin que hay que
realizar para convertir una cadena en otra: realizar para convertir una cadena en otra:
d(data d(data mining mining, data minino) = 1 , data minino) = 1
d(efecto, defecto) = 1 d(efecto, defecto) = 1
d(poda, boda) = 1 d(poda, boda) = 1
d( d(night,natch night,natch) = d( ) = d(natch,noche natch,noche) = 3 ) = 3
Aplicaciones: Aplicaciones: Correctores ortogrficos, reconocimiento Correctores ortogrficos, reconocimiento
de voz, deteccin de plagios, anlisis de ADN de voz, deteccin de plagios, anlisis de ADN
Para datos binarios: Para datos binarios: Distancia de Distancia de Hamming Hamming..
58 58
Programacin Dinmica Programacin Dinmica
Distancia de edicin Distancia de edicin
Definicin recursiva de la solucin Definicin recursiva de la solucin

+
=
=
] [ ] [ )} 1 , 1 ( ), 1 , ( ), , 1 ( min{ 1
] [ ] [ ) 1 , 1 (
) , (
j t i s si j i d j i d j i d
j t i s si j i d
j i d
CASOS CASOS
Mismo carcter: Mismo carcter: d(i d(i- -1,j 1,j- -1) 1)
Insercin: Insercin: 1 + d(i 1 + d(i- -1,j) 1,j)
Borrado: Borrado: 1 + d(i,j 1 + d(i,j- -1) 1)
Modificacin: Modificacin: 1 + d(i 1 + d(i- -1,j 1,j- -1) 1)
59 59
Programacin Dinmica Programacin Dinmica
Distancia de edicin Distancia de edicin
int int LevenshteinDistance LevenshteinDistance ( (string string s[1..m], s[1..m], string string t[1..n]) t[1..n])
{ {
for for (i=0; i<=m; i++) d[i,0]=i; (i=0; i<=m; i++) d[i,0]=i;
for for (j=0; j<=n; (j=0; j<=n; j++ j++) d[0,j]=j; ) d[0,j]=j;
for for (j=1; j<=n; (j=1; j<=n; j++ j++) )
for for (i=1; i<=m; i++) (i=1; i<=m; i++) for for (i=1; i<=m; i++) (i=1; i<=m; i++)
if if (s[i]==t[j]) (s[i]==t[j])
d[ d[i,j i,j] = d[i ] = d[i- -1, j 1, j- -1] 1]
else else
d[ d[i,j i,j] = 1+ min(d[i ] = 1+ min(d[i- -1,j],d[i,j 1,j],d[i,j- -1],d[i 1],d[i- -1,j 1,j- -1]); 1]);
return return d[ d[m,n m,n]; ];
} }
60 60

+
=
=
] [ ] [ )} 1 , 1 ( ), 1 , ( ), , 1 ( min{ 1
] [ ] [ ) 1 , 1 (
) , (
j t i s si j i d j i d j i d
j t i s si j i d
j i d
Programacin Dinmica Programacin Dinmica
Aplicaciones Aplicaciones
Distancia entre dos series temporales: O(n Distancia entre dos series temporales: O(n
22
) )
DTW [ DTW [Dynamic Dynamic Time Time Warping Warping]]
Anlisis sintctico: O(n Anlisis sintctico: O(n
33
))
Algoritmo CKY [ Algoritmo CKY [Cocke Cocke- -Kasami Kasami- -Younger Younger]]
Algoritmo de Algoritmo de Earley Earley Algoritmo de Algoritmo de Earley Earley
Algoritmo de Algoritmo de Viterbi Viterbi: : HMMs HMMs [[Hidden Hidden Markov Markov Models Models]]
Decodificacin de seales (p.ej. Decodificacin de seales (p.ej. modems modems, GSM, , GSM, wi wi- -fi) fi)
Procesamiento del lenguaje natural Procesamiento del lenguaje natural
Bioinformtica Bioinformtica
Optimizacin de consultas en bases de datos relacionales Optimizacin de consultas en bases de datos relacionales
Comparacin de ficheros con Comparacin de ficheros con diff diff

61 61

Anda mungkin juga menyukai