Académique Documents
Professionnel Documents
Culture Documents
Programao Dinmica
Programao Dinmica
Programao Dinmica est relacionada com
um mtodo de soluo baseado em tabela.
A programao dinmica calcula a soluo para
todos os subproblemas, partindo dos subproblemas menores para os maiores, armazenando
os resultados em uma tabela.
A vantagem que uma vez que um subproblema
resolvido, a resposta armazenada em uma tabela
e nunca mais recalculada.
Programao Dinmica
Necessrio para Programao Dinmica
estrutura recursiva: a soluo de toda instncia deve
"conter" solues de subinstncias
Programao Dinmica
Exemplo: Sequncia de Fibonacci
Consiste de uma sequncia de inteiros, tal
que:
F(0) = 0;
F(1) = 1;
F(n) = F(n-1) + F(n-2), se n > 1.
n
: 0 1 2 3 4 5 6 7 8 9
F(n): 0 1 1 2 3 5 8 13 21 34
Programao Dinmica
Exemplo: Sequncia de Fibonacci
Soluo recursiva:
F(n)
IF n 1
return n
// F(0) = 0 e F(1) = 1
ELSE
return F(n 1) + F(n 2)
Nmero de chamadas recursivas para calcular F(5) ou F(10)?
F(6)
F(9)
F(6)
F(7)
F(5)
F(4)
F(10)
F(6)
F(7)
F(5)
F(8)
F(5)
F(6)
F(4)
F(3)
Programao Dinmica
Sequncia de Fibonacci
Custo da soluo recursiva:
Quantas vezes cada F(k) calculado?
Para k entre 1 e n?
Programao Dinmica
Sequncia de Fibonacci
Com Programao Dinmica
F(1)
F(2)
F(4)
F(5)
F(6)
F(7)
F(8)
F(9)
F(10)
F(3)
F(0).
F(1).
F(2).
F(3).
F(4).
F(5).
F(6).
F(7).
F(8).
Programao Dinmica
Esse paradigma pode ser definido "recurso com
apoio de uma tabela".
Programao Dinmica
Exemplo do princpio da otimalidade
(subestrutura tima):
Suponha que o caminho mais curto entre Belo
Horizonte e Curitiba passa por Campinas.
Podemos concluir que:
o caminho entre BH e Campinas utilizado tambm o
mais curto possvel;
como tambm o caminho entre Campinas e Curitiba.
Logo, o princpio da otimalidade se aplica.
Programao Dinmica
Quando aplicar PD?
Problema computacional de formulao recursiva.
No deve haver ciclos na formulao
PD apresenta subestrutura tima:
Soluo tima do problema -> solues timas dos
subproblemas.
Sobreposio de subproblemas:
Nmero total de sub-problemas distintos pequeno
Programao Dinmica
Estrututa base do algoritmo de PD
1. Caracterizar/Identificar a estrutura de uma
soluo tima
2. Definir Recursivamente o valor de uma soluo
tima
3. Calcular o valor de uma soluo tima em um
processo bottom-up
4. Contruir uma soluo tima a partir das
informaes calculadas.
Programao Dinmica
Nas prximas aulas
Alguns exemplos de problemas que se resolvem
com Programao Dinmica:
1.
2.
3.
4.
5.
6.
7.
Programao Dinmica
Exemplo: Mochila 0-1 ou binria
Mochila de capacidade : W
Dados n itens de:
Valores : v
Pesos : p
Programao Dinmica
p
v
1
4
50
2
2
40
3
1
30
4
3
45
Soluo Gulosa
12,5
20
30
15
Programao Dinmica
Mochila 0-1: soluo por PD etapa 1
A idia guardar em uma tabela, digamos t, as
solues das (sub)instncias do problema. A tabela
definida assim:
Para i = 0,1,,n (itens) -> linhas
Para w = 0,1,,W (pesos) -> colunas
Programao Dinmica
Mochila 0-1: soluo por PD etapa 2
Recurso:
Casos base:
Passo recursivo:
Programao Dinmica
Mochila 0-1: soluo por PD etapa 3
Passo-a-passo
1
4
50
p
v
2
2
40
3
1
30
4
3
45
Programao Dinmica
Mochila 0-1: soluo por PD etapa 3
Passo-a-passo
1
4
50
p
v
2
2
40
Considerando at o item 1
Itens / Pesos
0
0
1
0
2
0
3
0
4
0
0
0
0
0
0
0
0 0
50 50
3
1
30
4
3
45
Programao Dinmica
Mochila 0-1: soluo por PD etapa 3
Passo-a-passo
1
4
50
p
v
2
2
40
Considerando at o item 2
Itens / Pesos
0
0
1
0
2
0
3
0
4
0
0
0
0
0
0
40
0
0
40
0 0
50 50
50 50
3
1
30
4
3
45
Programao Dinmica
Mochila 0-1: soluo por PD etapa 3
Passo-a-passo
1
4
50
p
v
2
2
40
Considerando at o item 3
Itens / Pesos
0
0
1
0
2
0
3
0
4
0
0
0
0
30
0
0
40
40
0
0
40
70
0 0
50 50
50 50
70 80
3
1
30
4
3
45
Programao Dinmica
Mochila 0-1: soluo por PD etapa 3
Passo-a-passo
1
4
50
p
v
2
2
40
Considerando at o item 4
Itens / Pesos
0
0
1
0
2
0
3
0
4
0
0
0
0
30
30
0
0
40
40
40
0
0
40
70
70
0
50
50
70
75
0
50
50
80
85
3
1
30
4
3
45
Programao Dinmica
Mochila 0-1: soluo por PD etapa 3
Instncia
n=4
W=5
p
v
1
4
50
2
2
40
i\w 0
1
2
3
4
5
0
0
0
0
0
0
0
1
0
0
0
0 50 50
2
0
0 40 40 50 50
3
0 30 40 70 70 80
4
0 30 40 70 75 85
3
1
30
4
3
45
Programao Dinmica
Mochila 0-1: soluo por PD algoritmo
Programao Dinmica
Mochila 0-1: soluo por PD algoritmo
Soluo final
p
v
1
4
50
2
2
40
i\w 0
1
2
3
4
5
0
0
0
0
0
0
0
1
0
0
0
0 50 50
2
0
0 40 40 50 50
3
0 30 40 70 70 80
4
0 30 40 70 75 85
3
1
30
4
3
45
Programao Dinmica
Exerccios (para a prxima aula):
A partir das soluo por programao dinmica do
Problema da Mochila 0-1, defina solues de PD para os
dois problemas abaixo:
1. Make-change problem: dados um inteiro k e um conjunto
S = {d1, d2, , dn} de n inteiros, qual o tamanho do menor
subconjunto de S cuja soma de seus elementos seja igual
a k?
2. Subset sum problem: dados um inteiro k e um conjunto S
= {d1, d2, , dn} de n inteiros, existe um subconjunto de S
cuja soma de seus elementos seja igual a k?
Recorrncia:
C[i, j] = C[i - 1, j di] or C[i - 1, j]);
Casos base:
C[i, j] = true, se j = 0
C[i, j] = false, se i = 0 e j > 0
Programao Dinmica
Subsequncia comum mais longa (LCS)
Definies bsicas:
X = <x1, x2, ..., xm>, Y = <y1, y2, ..., yn> e Z = <z1, z2, ..., zk>
Z uma subsequncia de X se existe uma sequncia
estritamente crescente <i1, i2, ..., ik> de ndices de de X tais
que xij = zj, para j=1, 2, ..., k
Exemplo: Z = <B, C, D, B> subsequncia de X = <A, B, C, B, D, A,
B> com sequncia de ndices <2, 3, 5, 7>
Programao Dinmica
Subsequncia comum mais longa (LCS)
O problema
Entrada: As sequncias
X = <x1, x2, ..., xm> e Y = <y1, y2, ..., yn>
Sada: Uma subsequncia comum de X e Y, cujo
comprimento seja mximo
Programao Dinmica
Subsequncia comum mais longa (LCS)
Etapa 1: Caracterizao de uma LCS
Dada uma sequncia X = <x1, x2, ..., xm>
Programao Dinmica
Subsequncia comum mais longa (LCS)
Etapa 2: Uma soluo recursiva
1 caso: Se xm = yn, ento deve ser encontrada
uma LCS de Xm-1 e Yn-1
Concatenando xm (ou yn) nessa LCS obtm-se a LCS
de X e Y
Programao Dinmica
Subsequncia comum mais longa (LCS)
Etapa 3: Como calcular o comprimento de uma LCS
i
0
xi
yj
Programao Dinmica
Subsequncia comum mais longa (LCS)
Etapa 3: Como calcular o comprimento de uma LCS
Programao Dinmica
Subsequncia comum mais longa (LCS)
Etapa 4: A construo de uma LCS
Referncias
[CLRS] Algoritmos: Teoria e Prtica, 3ed.
Cormen, 2012.
Algorithms in C++, Sedgewick.