Está en la página 1de 32

Computabilidad y Complejidad de Algoritmos

Programacin Dinmica
Preparado por:
Solineth Batista
Maycol Requenez
Existe una serie de problemas cuyas soluciones pueden ser
expresadas recursivamente en trminos matemticos, y
posiblemente la manera ms natural de resolverlos es
mediante un algoritmo recursivo. Sin embargo, el tiempo
de ejecucin de la solucin recursiva, normalmente de orden
exponencial y por tanto impracticable, puede mejorarse
substancialmente mediante la Programacin Dinmica.

En el diseo Divide y Vencers para resolver un problema lo
dividimos en subproblemas independientes, los cuales se
resuelven de manera recursiva para combinar finalmente
las soluciones y as resolver el problema original. El
inconveniente se presenta cuando los subproblemas
obtenidos no son independientes sino que existe
solapamiento entre ellos; entonces es cuando una solucin
recursiva no resulta eficiente por la repeticin de clculos
que conlleva.

En estos casos es cuando la Programacin Dinmica nos
puede ofrecer una solucin aceptable. La eficiencia de esta
tcnica consiste en resolver los subproblemas una sola vez,
guardando sus soluciones en una tabla para su futura
utilizacin. La Programacin Dinmica no slo tiene
sentido aplicarla por razones de eficiencia, sino porque
adems presenta un mtodo capaz de resolver de manera
eficiente problemas cuya solucin ha sido abordada por otras
tcnicas y ha fracasado.

Donde tiene mayor aplicacin la Programacin Dinmica es
en la resolucin de problemas de optimizacin. En este tipo
de problemas se pueden presentar distintas soluciones, cada
una con un valor, y lo que se desea es encontrar la solucin de
valor ptimo (mximo o mnimo).

La solucin de problemas mediante esta tcnica se basa en el
llamado principio de ptimo enunciado por Bellman en 1957
y que dice:

En una secuencia de decisiones ptima toda subsecuencia ha
de ser tambin ptima.

Knapsack Problem (Problema de la Mochila)
Algoritmo de NeedlemanWunsch


El problema de la mochila (knapsack problem) consiste encontrar un
subconjunto de productos que echar en una mochila de modo de
maximizar el beneficio y no sobrepasar la capacidad de la mochila.
Se puede resumir el problema de la siguiente forma:






Donde l es la cantidad de objetos disponibles, b
i
es el beneficio que
ofrece el objeto i, p
i
es el peso del objeto i, x
i
nos indica si colocamos o
no el objeto i dentro de la mochila y P es el peso mximo que soporta la
mochila.

maximizar b
i
x
i
i =k
l

sujeto a p
i
x
i
i =k
l
s P
con x
i
e{0, 1} , k s i s l
Digamos que tenemos l objetos con pesos p
1
, ,p
l
y
beneficios b
1
, ,b
l
.
Definimos A(i, j) como el valor mximo que puede ser
obtenido con los primeros i objetos pesando a lo ms j.
Note que:
A(0, j) = 0 y A(i, 0) = 0 para cualquier i l y j P.
Si p
i
> j entonces A(i, j) = A(i 1, j).
Si p
i
j entonces A(i, j) tiene dos opciones incluir o no
incluir el objeto i.
Si no lo incluimos entonces tendr un valor de A(i 1, j).
Si lo incluimos entonces tendr un valor de A(i 1, j p
i
) + b
i
.


Expresado formalmente tenemos la siguiente
definicin recursiva.
( ) ( )
( ) ( ) { }
1
0 si 0 o 0
, 1, si
max 1, , , si
i
i i
i j
A i j A i j p j
A i j A i j j p b p j

= =

= >

+ s

Ejemplo:
Tenemos una caja que soporta 15 libras en la cual vamos
a colocar objetos para vender. Hay disponibles tres
objetos:
Objeto #1 pesa 9 libras y se vende a $38
Objeto #2 pesa 6 libras y se vende a $40
Objeto #3 pesa 5 libras y se vende a $24
Cul es la ganancia mxima que podemos obtener?
Continuacin ejemplo:
La informacin recopilada del algoritmo se puede
resumir en la siguiente tabla:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
p
1
= 9 0 0 0 0 0 0 0 0 0 38 38 38 38 38 38 38
p
2
= 6 0 0 0 0 0 0 40 40 40 40 40 40 40 40 40 78
p
3
= 5 0 0 0 0 0 24 40 40 40 40 40 64 64 64 64 78
Continuacin ejemplo:
La informacin recopilada del algoritmo se puede
resumir en la siguiente tabla:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
p
1
= 9 0 0 0 0 0 0 0 0 0 38 38 38 38 38 38 38
p
2
= 6 0 0 0 0 0 0 40 40 40 40 40 40 40 40 40 78
p
3
= 5 0 0 0 0 0 24 40 40 40 40 40 64 64 64 64 78
Uno de los problemas de todos los das en Bioinformtica
es la comparacin o alineamiento de secuencias.
Necesitamos saber que tan similares son dos secuencias,
permitiendo que haya pequeas diferencias ya sea de
reemplazo o de borrado entre una y otra.
El algoritmo de Needleman-Wunsch sirve para realizar
alineamientos globales de dos secuencias.
Fue propuesto por primera vez en 1970, por Saul
Needleman y Christian Wunsch.
El algoritmo calcula puntajes de similitud global entre dos
secuencias.
Ejemplo
Consideremos el conjunto {A, G, C, T} sobre el cual
definimos dos cadenas s
1
= GAATTCAGTTA y s
2
=
GGATCGA.
El objetivo del algoritmo es alinearlas de tal forma que
puedan identificarse huecos, inserciones o cambios en
los caracteres de las secuencias.
Para el ejemplo un alineamiento es el siguiente:

s
El algoritmo de Needleman-Wunsch busca generar
el alineamiento para lo cual coloca todas las
posibles combinaciones de las dos secuencias s
1
y s
2

ms una fila y columna de ceros para la generacin
de la recursividad, en una matriz M.
Definiendo a n = |s
1
| y a m = |s
2
| entonces la matriz
M ser de tamao (m +1) (n + 1).
Luego procedemos a rellenar la matriz M para lo cual
primero definimos una matriz S de semejanza de
caracteres.
Si definimos S
i;j
como una funcin tal que devuelve la
similitud de los caracteres de la posicin i de s
1
y j de s
2
y a
W como la penalizacin por hueco que en este caso es
simplemente 0, tendremos listo las funciones necesarias
para llenar la matriz M.
Para proceder a rellenar M tendrn la siguiente ley de
formacin:

Donde:
Indica la coincidencia o no coincidencia
de los caracteres de las secuencias.

Indica la suma en horizontal ms la
penalizacin por hueco.

Indica la suma en vertical ms la
penalizacin por hueco.
{ }
, 1, 1 , , 1 1,
max , ,
i j i j i j i j i j
M M S M W M W

= + + +
1, 1 , i j i j
M S

+
, 1 i j
M W

+
1, i j
M W

+
El procedimiento siguiente es describir el patrn que
se dibuja desde el extremo inferior derecho de la
matriz M y se avanza a la izquierda o a la izquierda y
arriba tomando siempre el valor que le precedi al
construir M.
G A A T T C A G T T A
| | | | | |
G G A T C G A
Dando el alineamiento:

También podría gustarte