SlideShare uma empresa Scribd logo
1 de 116
Baixar para ler offline
An´alise de Algoritmos
Programação Dinâmica
– p. 1/56
Programação Dinâmica
Aplicável a problemas de otimização
– p. 2/56
Programação Dinâmica
Aplicável a problemas de otimização
Combina soluções de subproblemas
– p. 2/56
Programação Dinâmica
Aplicável a problemas de otimização
Combina soluções de subproblemas
Subproblemas não são independentes
– p. 2/56
Programação Dinâmica
Aplicável a problemas de otimização
Combina soluções de subproblemas
Subproblemas não são independentes
A relação problema – subproblema é
geralmente expressa em termos de uma
fórmula recursiva, que quando implementada
na forma “bottom-up” produz, em muitos casos,
solução eficiente
– p. 2/56
Programação Dinâmica
A diferença para o método guloso é que muitas
sequências de decisões são geradas, enquanto
que no método guloso apenas uma sequência
de decisão é gerada
– p. 3/56
Programac¸ ˜ao Dinˆamica
Multiplicação de matrizes
– p. 4/56
Multiplicação de matrizes
Problema: Multiplicar n matrizes
M = M1 × M2 × · · · × Mn
realizando o número mínimo de operações
– p. 5/56
Multiplicação de matrizes
Problema: Multiplicar n matrizes
M = M1 × M2 × · · · × Mn
realizando o número mínimo de operações
Em outras palavras, determinar qual a melhor
forma de realizar as multiplicações, ou seja, aquela
que requer o número mínimo de operações
– p. 5/56
Multiplicação de matrizes
As matrizes são multiplicadas aos pares
– p. 6/56
Multiplicação de matrizes
As matrizes são multiplicadas aos pares
Vamos supor que cada matriz Mi tem
dimensões bi−1 × bi. Logo, para calcular
Mi × Mi+1 são necessárias bi−1 ∗ bi ∗ bi+1
operações
– p. 6/56
Multiplicação de matrizes
Exemplo: M = M1 × M2 × M3 × M4 com
b = {200, 2, 30, 20, 5}.
– p. 7/56
Multiplicação de matrizes
Exemplo: M = M1 × M2 × M3 × M4 com
b = {200, 2, 30, 20, 5}.
Quantas multiplicações são realizadas nas
sequências:
M = (((M1 × M2) × M3) × M4)
M = (M1 × ((M2 × M3) × M4))
– p. 7/56
Multiplicação de matrizes
Exemplo: M = M1 × M2 × M3 × M4 com
b = {200, 2, 30, 20, 5}.
Quantas multiplicações são realizadas nas
sequências:
M = (((M1 × M2) × M3) × M4) → 152.000 operações
M = (M1 × ((M2 × M3) × M4)) → 3.400 operações
– p. 8/56
Multiplicação de matrizes
Exemplo: M = M1 × M2 × M3 × M4 com
b = {200, 2, 30, 20, 5}.
Quantas multiplicações são realizadas nas
sequências:
M = (((M1 × M2) × M3) × M4) → 152.000 operações
M = (M1 × ((M2 × M3) × M4)) → 3.400 operações
Conclusão: a ordem das multiplicações faz muita
diferença.
– p. 8/56
Multiplicação de matrizes
Como determinar uma sequência ótima de
multiplicação?
– p. 9/56
Multiplicação de matrizes
Como determinar uma sequência ótima de
multiplicação?
O algoritmo da “força bruta” é impraticável: existem
Ω(2n
) possibilidades (números de Catalão).
– p. 9/56
Multiplicação de matrizes
Como determinar uma sequência ótima de
multiplicação?
O algoritmo da “força bruta” é impraticável: existem
Ω(2n
) possibilidades (números de Catalão).
Pelo método da programação dinâmica, podemos
determinar eficientemente uma sequência ótima de
multiplicação.
– p. 9/56
Multiplicação de matrizes
Para resolver este problema, tudo que precisamos
é saber qual o melhor índice k tal que
M = (M1 ×M2 ×· · ·×Mk).(Mk+1 ×Mk+2 ×· · ·×Mn)
onde k varia de 1 a n − 1.
– p. 10/56
Multiplicação de matrizes
Mais precisamente, seja Mij o número mínimo de
operações para realizar o produto
Mi × Mi+1 × · · · × Mj
– p. 11/56
Multiplicação de matrizes
Mais precisamente, seja Mij o número mínimo de
operações para realizar o produto
Mi × Mi+1 × · · · × Mj
Podemos calcular Mij?
– p. 11/56
Multiplicação de matrizes
Mais precisamente, seja Mij o número mínimo de
operações para realizar o produto
Mi × Mi+1 × · · · × Mj
Podemos calcular Mij? Sim.
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
– p. 11/56
Multiplicação de matrizes
Esta expressão constitui uma recorrência típica do
método de programação dinâmica. Ela sugere um
algoritmo recursivo, mas uma implementação
“bottom-up” é mais eficiente.
– p. 12/56
Multiplicação de matrizes
Um algoritmo baseado nesta fórmula tem os
seguintes passos iterativos:
1. os Mi,i são calculados, para 1 ≤ i ≤ n.
Claramente, Mi,i = 0, para todo i;
2. os Mi,i+1 são calculados, para 1 ≤ i ≤ n − 1;
3. os Mi,i+2 são calculados, para 1 ≤ i ≤ n − 2;
4. ... e assim por diante.
– p. 13/56
Multiplicação de matrizes
Por exemplo, vamos aplicar o algoritmo acima para
as seguintes matrizes:
M = M1 × M2 × M3 × M4
(200 × 2) (2 × 30) (30 × 20) (20 × 5)
(b0 × b1) (b1 × b2) (b2 × b3) (b3 × b4)
– p. 14/56
Multiplicação de matrizes
Por exemplo, vamos aplicar o algoritmo acima para
as seguintes matrizes:
M = M1 × M2 × M3 × M4
(200 × 2) (2 × 30) (30 × 20) (20 × 5)
(b0 × b1) (b1 × b2) (b2 × b3) (b3 × b4)
M1,1 = M2,2 = M3,3 = M4,4 = 0
– p. 14/56
Multiplicação de matrizes
Por exemplo, vamos aplicar o algoritmo acima para
as seguintes matrizes:
M = M1 × M2 × M3 × M4
(200 × 2) (2 × 30) (30 × 20) (20 × 5)
(b0 × b1) (b1 × b2) (b2 × b3) (b3 × b4)
M1,1 = M2,2 = M3,3 = M4,4 = 0
M1,2 = 12000, M2,3 = 1200, M3,4 = 3000
– p. 14/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
– p. 15/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
M1,3 = min{M1,k + Mk+1,3 + b0bkb3}, k = 1, 2
– p. 15/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
M1,3 = min{M1,k + Mk+1,3 + b0bkb3}, k = 1, 2
M1,3 = min{M1,1 + M2,3 + b0b1b3, M1,2 + M3,3 + b0b2b3}
= min{0 + 1200 + 8000, 12000 + 0 + 120000}
= 9200 (M1 × (M2 × M3))
– p. 15/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
– p. 16/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
M2,4 = min{M2,k + Mk+1,4 + b1bkb4}, k = 2, 3
– p. 16/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
M2,4 = min{M2,k + Mk+1,4 + b1bkb4}, k = 2, 3
M2,4 = min{M2,2 + M3,4 + b1b2b4, M2,3 + M4,4 + b1b3b4}
= min{0 + 3000 + 300, 1200 + 0 + 200}
= 1400 ((M2 × M3) × M4))
– p. 16/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
– p. 17/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
M1,4 = min{M1,k + Mk+1,4 + b0bkb4}, k = 1, 3
– p. 17/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
M1,4 = min{M1,k + Mk+1,4 + b0bkb4}, k = 1, 3
M1,4 = min{M1,1 + M2,4 + b0b1b4, M1,2 + M3,4 + b0b2b4,
M1,3 + M4,4 + b0b3b4}
= min{0 + 1400 + 2000, 12000 + 3000 + 30000,
9200 + 0 + 20000}
= 3400 (M1 × ((M2 × M3) × M4))
– p. 17/56
Multiplicação de matrizes
Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1
M1,4 = min{M1,k + Mk+1,4 + b0bkb4}, k = 1, 3
M1,4 = min{M1,1 + M2,4 + b0b1b4, M1,2 + M3,4 + b0b2b4,
M1,3 + M4,4 + b0b3b4}
= min{0 + 1400 + 2000, 12000 + 3000 + 30000,
9200 + 0 + 20000}
= 3400 (M1 × ((M2 × M3) × M4))
Solução ótima: (M1 × ((M2 × M3) × M4))
– p. 17/56
Exercícios
1. Aplique o algoritmo para multiplicar 5 matrizes, onde
b = {30, 35, 15, 5, 10, 20}
2. Descreva mais precisamente o algoritmo estudado
3. Quantas operações são realizadas por este algoritmo?
4. Considere a seguinte proposta gulosa para a solução
do problema de multiplicação de matrizes: a cada
passo, selecione o produto que requer um número
mínimo de operações
5. Apresente uma solução para a variante do problema de
multiplicação de matrizes em que o objetivo é
maximizar o número de operações
– p. 18/56
Programac¸ ˜ao Dinˆamica
Maior subsequência comum
– p. 19/56
Maior subsequência comum
Problema: Dadas as sequências
X = x1, x2, . . . , xm e Y = y1, y2, . . . , yn , encontrar
uma subsequência comum de maior tamanho
(LCS(X, Y )).
– p. 20/56
Maior subsequência comum
Problema: Dadas as sequências
X = x1, x2, . . . , xm e Y = y1, y2, . . . , yn , encontrar
uma subsequência comum de maior tamanho
(LCS(X, Y )).
springtime horseback
snowflakepioneer
– p. 20/56
Maior subsequência comum
Uma subsequência não necessita ter elementos
consecutivos; Ela deve ter apenas elementos na
mesma ordem na sequência.
– p. 21/56
LCS – Algoritmo força bruta
Para cada subsequência de X, verifique se ela
é subsequência de Y .
– p. 22/56
LCS – Algoritmo força bruta
Para cada subsequência de X, verifique se ela
é subsequência de Y .
Qual o tempo?
– p. 22/56
LCS – Algoritmo força bruta
Para cada subsequência de X, verifique se ela
é subsequência de Y .
Qual o tempo?
2m
subsequências de X para verificar (pois
cada subsequência de X corresponde a um
subconjunto de {1, 2, . . . , m}) + tempo linear
para verificar cada uma.
– p. 22/56
LCS – Algoritmo força bruta
Para cada subsequência de X, verifique se ela
é subsequência de Y .
Qual o tempo?
2m
subsequências de X para verificar (pois
cada subsequência de X corresponde a um
subconjunto de {1, 2, . . . , m}) + tempo linear
para verificar cada uma.
Portanto, esta não é uma boa estratégia.
– p. 22/56
LCS – Algoritmo força bruta
Podemos fazer melhor?
– p. 23/56
LCS – Algoritmo força bruta
Podemos fazer melhor?
Sim, utilizando programação dinâmica.
– p. 23/56
LCS – Algoritmo força bruta
Podemos fazer melhor?
Sim, utilizando programação dinâmica.
Notação:
Xi = x1, x2, . . . , xi , o i-ésimo prefixo de X
Yi = y1, y2, . . . , yi , o i-ésimo prefixo de Y
– p. 23/56
Maior subsequência comum
Uma LCS(X, Y ) pode ser obtida recursivamente
da seguinte forma:
– p. 24/56
Maior subsequência comum
Uma LCS(X, Y ) pode ser obtida recursivamente
da seguinte forma:
Se xm = yn então uma LCS(X, Y ) é formada
por uma LCS(Xm−1, Yn−1) concatenada com
xm
– p. 24/56
Maior subsequência comum
Uma LCS(X, Y ) pode ser obtida recursivamente
da seguinte forma:
Se xm = yn então uma LCS(X, Y ) é formada
por uma LCS(Xm−1, Yn−1) concatenada com
xm
Se xm = yn então uma LCS(X, Y ) é formada
por uma LCS(Xm, Yn−1) ou LCS(Xm−1, Yn)
– p. 24/56
Maior subsequência comum
Defina c(i, j) como o tamanho da LCS(Xi, Yj).
– p. 25/56
Maior subsequência comum
Defina c(i, j) como o tamanho da LCS(Xi, Yj).
Então
c(i, j) =



0 se i = 0 ou j = 0
c(i − 1, j − 1) + 1 se xi = yj
max{c(i − 1, j), c(i, j − 1)} se xi = yj
– p. 25/56
Maior subsequência comum
Defina c(i, j) como o tamanho da LCS(Xi, Yj).
Então
c(i, j) =



0 se i = 0 ou j = 0
c(i − 1, j − 1) + 1 se xi = yj
max{c(i − 1, j), c(i, j − 1)} se xi = yj
Podemos implementar eficientemente esta fórmula
calculando os c(i, j) para valores crescentes de i e
j até calcular c(m, n).
– p. 25/56
Maior subsequência comum
Vamos calcular LCS(X, Y ), onde
X = ABCB e Y = BDCAB.
– p. 26/56
Maior subsequência comum
Vamos calcular LCS(X, Y ), onde
X = ABCB e Y = BDCAB.
Xi
Yj
A
A
B
B
B B
C
CD
0
0
0
000000
0
– p. 26/56
Maior subsequência comum
Vamos calcular LCS(X, Y ), onde
X = ABCB e Y = BDCAB.
Xi
Yj
A
A
B
B
B B
C
CD
00
0
0
0
0
000000
0
– p. 27/56
Maior subsequência comum
Vamos calcular LCS(X, Y ), onde
X = ABCB e Y = BDCAB.
Xi
Yj
A
A
B
B
B B
C
CD
000
0
0
0
0
000000
1 1
– p. 28/56
Maior subsequência comum
Vamos calcular LCS(X, Y ), onde
X = ABCB e Y = BDCAB.
Xi
Yj
A
A
B
B
B B
C
CD
000
0
0
0
0
000000
11
11
1111
11
22
222
2
3
– p. 29/56
LCS - exemplo para completar
Ex.: X = (A, B, C, B, D, A, B) e Y = (B, D, C, A, B, A).
Yj B D C A B A
Xi 0 0 0 0 0 0 0
A 0
B 0
C 0
B 0
D 0
A 0
B 0
– p. 30/56
Maior subsequência comum
Qual o tempo gasto pelo algoritmo?
– p. 31/56
Maior subsequência comum
Qual o tempo gasto pelo algoritmo? O(m.n)
– p. 31/56
Maior subsequência comum
Qual o tempo gasto pelo algoritmo? O(m.n)
Como encontrar uma LCS(X, Y ) após completada
a tabela? Qual o tempo?
– p. 31/56
Exercícios
1. Determine uma LCS para X = 1, 0, 0, 1, 0, 1, 0, 1 e
Y = 0, 1, 0, 1, 1, 0, 1, 1, 0
2. Descreva mais precisamente o algoritmo estudado
3. Mostre como computar o comprimento de uma LCS
usando apenas 2.min(m, n) entradas (2 linhas ou
colunas da tabela)
4. Forneça um algoritmo O(n2) para encontrar uma maior
subsequência não descrescente de uma dada
sequência de n números
– p. 32/56
Exercícios
5. Forneça um algoritmo O(n log n) para encontrar uma
maior subsequência não descrescente de uma dada
sequência de n números
– p. 33/56
Programac¸ ˜ao Dinˆamica
O problema do caixeiro viajante
– p. 34/56
Caixeiro viajante (PCV)
O PCV consiste em encontrar um circuito de custo
mínimo que contém todos os vertices (circuito
hamiltoniano) em um grafo G com custos não
negativos cij associados à cada aresta (i, j).
– p. 35/56
Caixeiro viajante (PCV)
Vamos supor, sem perda de generalidade, que os
vértices estão numerados de 1 a n, e que o circuito
começa e termina no vértice 1.
– p. 36/56
Caixeiro viajante (PCV)
Vamos supor, sem perda de generalidade, que os
vértices estão numerados de 1 a n, e que o circuito
começa e termina no vértice 1.
OBS: qualquer circuito hamiltoniano é constituído
por uma aresta (1, k), 2 ≤ k ≤ n, e um caminho de
k até 1 que contém todos os vértices de
V (G) − {1, k}. Esta observação nos motiva a
definir a seguinte função.
– p. 36/56
Caixeiro viajante
Seja f(i, C) o custo de um caminho mínimo do
vértice i até 1 e que visita todos os vértices do
conjunto C.
– p. 37/56
Caixeiro viajante
Seja f(i, C) o custo de um caminho mínimo do
vértice i até 1 e que visita todos os vértices do
conjunto C.
Podemos calcular f(i, C)?
– p. 37/56
Caixeiro viajante
Seja f(i, C) o custo de um caminho mínimo do
vértice i até 1 e que visita todos os vértices do
conjunto C.
Podemos calcular f(i, C)? Sim. Os valores de
f(i, C) podem ser calculados recursivamente da
seguinte forma:
f(i, C) = minj∈C{cij + f(j, C − {j})}
– p. 37/56
Caixeiro viajante
Os valores de f(i, C) podem ser calculados
recursivamente da seguinte forma:
f(i, C) = minj∈C{cij + f(j, C − {j})}
– p. 38/56
Caixeiro viajante
Os valores de f(i, C) podem ser calculados
recursivamente da seguinte forma:
f(i, C) = minj∈C{cij + f(j, C − {j})}
A solução do PCV está no cálculo de
f(1, V (G)−{1}) = min2≤k≤n{c1k+f(k, V (G)−{1, k})}
– p. 38/56
Caixeiro viajante
Os valores de f necessários para resolver o PCV
podem ser obtidos em ordem crescente de |C|, da
seguinte forma:
– p. 39/56
Caixeiro viajante
Os valores de f necessários para resolver o PCV
podem ser obtidos em ordem crescente de |C|, da
seguinte forma:
|C| = 0: f(i, ∅) = ci1, ∀ 2 ≤ i ≤ n.
– p. 39/56
Caixeiro viajante
Os valores de f necessários para resolver o PCV
podem ser obtidos em ordem crescente de |C|, da
seguinte forma:
|C| = 0: f(i, ∅) = ci1, ∀ 2 ≤ i ≤ n.
|C| = 1: f(i, {j}) = cij + f(j, ∅) = cij + cj1,
∀ 2 ≤ i, j ≤ n, i = j.
– p. 39/56
Caixeiro viajante
Os valores de f necessários para resolver o PCV
podem ser obtidos em ordem crescente de |C|, da
seguinte forma:
|C| = 0: f(i, ∅) = ci1, ∀ 2 ≤ i ≤ n.
|C| = 1: f(i, {j}) = cij + f(j, ∅) = cij + cj1,
∀ 2 ≤ i, j ≤ n, i = j.
|C| = 2, 3, . . . , n − 2, usa-se a fórmula geral,
utilizando os valores de f calculados
anteriormente.
– p. 39/56
Caixeiro viajante - exemplo
1
110
2 7
7
12
1
5
9 3
15
20
3
2 4
– p. 40/56
Caixeiro viajante - exemplo
1
110
2 7
7
12
1
5
9 3
15
20
3
2 4
f(2, {3}) = c23 + c31 = 9 + 1 = 10
– p. 40/56
Caixeiro viajante - exemplo
1
110
2 7
7
12
1
5
9 3
15
20
3
2 4
f(2, {3}) = c23 + c31 = 9 + 1 = 10
f(2, {4}) = c24 + c41 = 1 + 7 = 8
– p. 40/56
Caixeiro viajante - exemplo
1
110
2 7
7
12
1
5
9 3
15
20
3
2 4
f(2, {3}) = c23 + c31 = 9 + 1 = 10
f(2, {4}) = c24 + c41 = 1 + 7 = 8
f(3, {2}) = c32 + c21 = 5 + 20 = 25
– p. 40/56
Caixeiro viajante - exemplo
1
110
2 7
7
12
1
5
9 3
15
20
3
2 4
f(2, {3}) = c23 + c31 = 9 + 1 = 10
f(2, {4}) = c24 + c41 = 1 + 7 = 8
f(3, {2}) = c32 + c21 = 5 + 20 = 25
f(3, {4}) = c34 + c41 = 15 + 7 = 22
– p. 40/56
Caixeiro viajante - exemplo
1
110
2 7
7
12
1
5
9 3
15
20
3
2 4
f(2, {3}) = c23 + c31 = 9 + 1 = 10
f(2, {4}) = c24 + c41 = 1 + 7 = 8
f(3, {2}) = c32 + c21 = 5 + 20 = 25
f(3, {4}) = c34 + c41 = 15 + 7 = 22
f(4, {2}) = c42 + c21 = 12 + 20 = 32
– p. 40/56
Caixeiro viajante - exemplo
1
110
2 7
7
12
1
5
9 3
15
20
3
2 4
f(2, {3}) = c23 + c31 = 9 + 1 = 10
f(2, {4}) = c24 + c41 = 1 + 7 = 8
f(3, {2}) = c32 + c21 = 5 + 20 = 25
f(3, {4}) = c34 + c41 = 15 + 7 = 22
f(4, {2}) = c42 + c21 = 12 + 20 = 32
f(4, {3}) = c43 + c31 = 3 + 1 = 4
– p. 40/56
Caixeiro viajante - exemplo
f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})}
– p. 41/56
Caixeiro viajante - exemplo
f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})}
= min{9 + 22, 1 + 4} = 5 (j = 4)
– p. 41/56
Caixeiro viajante - exemplo
f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})}
= min{9 + 22, 1 + 4} = 5 (j = 4)
f(3, {2, 4}) = min{c32 + f(2, {4}), c34 + f(4, {2})}
– p. 41/56
Caixeiro viajante - exemplo
f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})}
= min{9 + 22, 1 + 4} = 5 (j = 4)
f(3, {2, 4}) = min{c32 + f(2, {4}), c34 + f(4, {2})}
= min{5 + 8, 15 + 32} = 13 (j = 2)
– p. 41/56
Caixeiro viajante - exemplo
f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})}
= min{9 + 22, 1 + 4} = 5 (j = 4)
f(3, {2, 4}) = min{c32 + f(2, {4}), c34 + f(4, {2})}
= min{5 + 8, 15 + 32} = 13 (j = 2)
f(4, {2, 3}) = min{c42 + f(2, {3}), c43 + f(3, {2})}
– p. 41/56
Caixeiro viajante - exemplo
f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})}
= min{9 + 22, 1 + 4} = 5 (j = 4)
f(3, {2, 4}) = min{c32 + f(2, {4}), c34 + f(4, {2})}
= min{5 + 8, 15 + 32} = 13 (j = 2)
f(4, {2, 3}) = min{c42 + f(2, {3}), c43 + f(3, {2})}
= min{12 + 10, 3 + 25} = 22 (j = 2)
– p. 41/56
Caixeiro viajante - exemplo
f(1, {2, 3, 4}) = min{c12 + f(2, {3, 4}),
c13 + f(3, {2, 4}),
c14 + f(4, {2, 3})}
– p. 42/56
Caixeiro viajante - exemplo
f(1, {2, 3, 4}) = min{c12 + f(2, {3, 4}),
c13 + f(3, {2, 4}),
c14 + f(4, {2, 3})}
= min{2 + 5, 10 + 13, 7 + 22} = 7 (j = 2)
– p. 42/56
Caixeiro viajante - exemplo
f(1, {2, 3, 4}) = min{c12 + f(2, {3, 4}),
c13 + f(3, {2, 4}),
c14 + f(4, {2, 3})}
= min{2 + 5, 10 + 13, 7 + 22} = 7 (j = 2)
Portanto, um circuito hamiltoniano de custo mínimo
é (1, 2, 4, 3, 1) com custo 7.
– p. 42/56
Exercícios
1. Dado um polígono convexo P com vértices
numerados de 1 a n na ordem cíclica, e
suponha que cada diagonal ligando os vértices
i e j possui custo dij. Projete um algoritmo para
determinar uma triangulação de custo mínimo
de P.
– p. 43/56
Programac¸ ˜ao Dinˆamica
O problema binário da mochila
– p. 44/56
Problema da Mochila
Dados n objetos com valor e peso associado a
cada um deles, e uma mochila que suporta peso
máximo W, determinar um subconjunto de objetos
de valor máximo e cujo peso não excede W.
– p. 45/56
Problema da Mochila
Dados n objetos com valor e peso associado a
cada um deles, e uma mochila que suporta peso
máximo W, determinar um subconjunto de objetos
de valor máximo e cujo peso não excede W.
Notação:
Objetos: x1, x2, . . . , xn
Valores: v1, v2, . . . , vn
Pesos: p1, p2, . . . , pn
Peso da mochila: W
– p. 45/56
Problema da Mochila
Uma solução para o problema da mochila pode ser
obtida pelo seguinte raciocínio:
“O objeto xn pode estar ou não na solução ótima”
– p. 46/56
Problema da Mochila
Uma solução para o problema da mochila pode ser
obtida pelo seguinte raciocínio:
“O objeto xn pode estar ou não na solução ótima”
Se o objeto xn estiver na solução ótima, o valor
desta solução será vn mais o valor de uma
solução ótima do problema da mochila com
capacidade W − pn e considerando só os n − 1
primeiros itens.
– p. 46/56
Problema da Mochila
Se o objeto xn não estiver na solução ótima, o
valor ótimo será dado pelo valor de uma
solução ótima do problema da mochila com
capacidade W e considerando só os n − 1
primeiros itens.
– p. 47/56
Problema da Mochila
Se o objeto xn não estiver na solução ótima, o
valor ótimo será dado pelo valor de uma
solução ótima do problema da mochila com
capacidade W e considerando só os n − 1
primeiros itens.
Seja f(i, w) o valor ótimo considerando apenas os
i primeiros ítens e uma mochila de capacidade w.
– p. 47/56
Problema da Mochila
A recorrência fica então:
f(i, w) =
f(i − 1, w) se pi > w
max{f(i − 1, w − pi) + vi, f(i − 1, w)} se pi ≤ w
– p. 48/56
Problema da Mochila
A recorrência fica então:
f(i, w) =
f(i − 1, w) se pi > w
max{f(i − 1, w − pi) + vi, f(i − 1, w)} se pi ≤ w
f(0, w) = 0 e f(i, 0) = 0
– p. 48/56
Problema da Mochila - Exemplo
Peso da mochila = 7
Objetos: x1, x2, x3, x4
Valores: 10, 7, 25, 24
Pesos: 2, 1, 6, 5
– p. 49/56
Problema da Mochila - Exemplo
Peso da mochila = 7
Objetos: x1, x2, x3, x4
Valores: 10, 7, 25, 24
Pesos: 2, 1, 6, 5
0 1 2 3 4 5 6 7 w
0 0 0 0 0 0 0 0 0
1 0
2 0
3 0
4 0
i
– p. 49/56
Problema da Mochila
Exemplo: Peso da mochila = 7
Objetos: x1, x2, x3, x4
Valores: 10, 7, 25, 24
Pesos: 2, 1, 6, 5
0 1 2 3 4 5 6 7 w
0 0 0 0 0 0 0 0 0
1 0 0 10 10 10 10 10 10
2 0 7 10 17 17 17 17 17
3 0 7 10 17 17 17 25 32
4 0 7 10 17 17 24 31 34
i
– p. 50/56
Problema da Mochila
Qual o tempo gasto pelo algoritmo?
– p. 51/56
Problema da Mochila
Qual o tempo gasto pelo algoritmo? O(n.W)
– p. 51/56
Problema da Mochila
Qual o tempo gasto pelo algoritmo? O(n.W)
Como encontrar uma composição ótima após
completada a tabela? Qual o tempo?
– p. 51/56
Exercício
1. Resolva o problema da mochila para os valores
Peso da mochila = 15
Objetos: x1, x2, x3, x4
Valores: 5, 6, 11, 12
Pesos: 3, 5, 6, 7
2. Uma haste de comprimento H precisa ser cortada em
pequenos pedaços/partes de comprimento
{h1, h2, . . . , hn}. Projete um algoritmo para determinar
em quais pedaços a haste deve ser cortada de forma
que a sobra seja a menor possível.
3. Dada uma coleção A = {a1, a2, . . . , an} de n inteiros
positivos que somam N. Projete um algoritmo para
determinar se existe uma partição de A em dois
subconjuntos com a mesma soma.
– p. 52/56
Exercício para pesquisar
4. Considere o seguinte algoritmo guloso para o problema
da mochila: a cada passo, escolha o objeto de maior
valor. Este algoritmo está correto?
– p. 53/56
Exercício
5. Problema de investimento de capital:
R$6, 00 unidades de capital disponível
N = 3 atividades diferentes para investimento com
ganhos dados pelo quadro abaixo:
R g1(R) g2(R) g3(R)
0 0 0 0
1 15 15 26
2 40 40 40
3 80 60 45
4 90 70 50
5 95 73 51
6 100 75 53
Qual o distribuição ótima do recurso? – p. 54/56
Exercício para pesquisar
6. O problema do corte bidimensional guilhotinado: ...
(mochila bidimensional)
– p. 55/56
Exercício para pesquisar
1. Árvore de busca binária ótima: Consideremos o
problema de realizar buscas em uma árvore binária de
busca contendo os elementos de um conjunto
C = {x1, x2, . . . , xn} (listados em ordem crescente)
conhecendo-se as seguintes probabilidades:
(a) q0 = Prob. de buscar um elemento x < x1
(b) pi = Prob. de buscar o elemento xi
(c) qi = Prob. de buscar um elemento xi < x < xi+1
(d) qn = Prob. de buscar um elemento x > xn
O problema é construir uma árvore binária de busca
que representa C em que a execução das buscas seja
feita com número mínimo de comparações.
– p. 56/56

Mais conteúdo relacionado

Mais procurados

Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dadosFernando Palma
 
Apostila Matemática e Raciocínio Lógico
Apostila Matemática e Raciocínio LógicoApostila Matemática e Raciocínio Lógico
Apostila Matemática e Raciocínio LógicoValclidesGuerra
 
Classificação de software. Livre, demo e proprietário. Básico, Aplicativo e u...
Classificação de software. Livre, demo e proprietário. Básico, Aplicativo e u...Classificação de software. Livre, demo e proprietário. Básico, Aplicativo e u...
Classificação de software. Livre, demo e proprietário. Básico, Aplicativo e u...Labin2bpm
 
Aula 01: introdução à informática aplicada
Aula 01:  introdução à informática aplicadaAula 01:  introdução à informática aplicada
Aula 01: introdução à informática aplicadaRubens Vinicius Conte
 
Aula 04 arquitetura de computadores
Aula 04   arquitetura de computadoresAula 04   arquitetura de computadores
Aula 04 arquitetura de computadoresDaniel Moura
 
Informática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsInformática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsJoeldson Costa Damasceno
 
Aula 01 introdução a computação
Aula 01 introdução a computaçãoAula 01 introdução a computação
Aula 01 introdução a computaçãoMatheus Brito
 
Tecnologia em Coolers
Tecnologia em CoolersTecnologia em Coolers
Tecnologia em CoolersFernanda Klug
 
Exercicios de computador e computação
Exercicios de computador e computaçãoExercicios de computador e computação
Exercicios de computador e computaçãogastaovalle
 
Aula 01 - Sistemas Operacionais - Windows 10
Aula 01 - Sistemas Operacionais - Windows 10Aula 01 - Sistemas Operacionais - Windows 10
Aula 01 - Sistemas Operacionais - Windows 10LucasMansueto
 
Aula 05 sistemas de numeração
Aula 05   sistemas de numeraçãoAula 05   sistemas de numeração
Aula 05 sistemas de numeraçãoDaniel Moura
 
Exemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dadosExemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dadosLuis Borges Gouveia
 
Introdução aos Sistemas Distribuídos
Introdução aos Sistemas DistribuídosIntrodução aos Sistemas Distribuídos
Introdução aos Sistemas DistribuídosFrederico Madeira
 
Barramentos de placas e tipos
Barramentos de placas e tiposBarramentos de placas e tipos
Barramentos de placas e tiposRogério Cardoso
 
Aula02 - Componentes de um Computador
Aula02 - Componentes de um ComputadorAula02 - Componentes de um Computador
Aula02 - Componentes de um ComputadorSuzana Viana Mota
 

Mais procurados (20)

Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dados
 
Apostila Matemática e Raciocínio Lógico
Apostila Matemática e Raciocínio LógicoApostila Matemática e Raciocínio Lógico
Apostila Matemática e Raciocínio Lógico
 
Classificação de software. Livre, demo e proprietário. Básico, Aplicativo e u...
Classificação de software. Livre, demo e proprietário. Básico, Aplicativo e u...Classificação de software. Livre, demo e proprietário. Básico, Aplicativo e u...
Classificação de software. Livre, demo e proprietário. Básico, Aplicativo e u...
 
Aula 15 processadores
Aula 15 processadoresAula 15 processadores
Aula 15 processadores
 
Sistemas digitais
Sistemas digitaisSistemas digitais
Sistemas digitais
 
Aula 07 - Os tipos de computador - Operador de computador
Aula 07 - Os tipos de computador - Operador de computadorAula 07 - Os tipos de computador - Operador de computador
Aula 07 - Os tipos de computador - Operador de computador
 
Aula 01: introdução à informática aplicada
Aula 01:  introdução à informática aplicadaAula 01:  introdução à informática aplicada
Aula 01: introdução à informática aplicada
 
Aula 04 arquitetura de computadores
Aula 04   arquitetura de computadoresAula 04   arquitetura de computadores
Aula 04 arquitetura de computadores
 
Fluxograma fritar ovo
Fluxograma fritar ovoFluxograma fritar ovo
Fluxograma fritar ovo
 
Informática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsInformática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional Windows
 
Aula 01 introdução a computação
Aula 01 introdução a computaçãoAula 01 introdução a computação
Aula 01 introdução a computação
 
Tecnologia em Coolers
Tecnologia em CoolersTecnologia em Coolers
Tecnologia em Coolers
 
Exercicios de computador e computação
Exercicios de computador e computaçãoExercicios de computador e computação
Exercicios de computador e computação
 
Aula 01 - Sistemas Operacionais - Windows 10
Aula 01 - Sistemas Operacionais - Windows 10Aula 01 - Sistemas Operacionais - Windows 10
Aula 01 - Sistemas Operacionais - Windows 10
 
Aula 05 sistemas de numeração
Aula 05   sistemas de numeraçãoAula 05   sistemas de numeração
Aula 05 sistemas de numeração
 
Exemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dadosExemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dados
 
Introdução aos Sistemas Distribuídos
Introdução aos Sistemas DistribuídosIntrodução aos Sistemas Distribuídos
Introdução aos Sistemas Distribuídos
 
Virtualização
VirtualizaçãoVirtualização
Virtualização
 
Barramentos de placas e tipos
Barramentos de placas e tiposBarramentos de placas e tipos
Barramentos de placas e tipos
 
Aula02 - Componentes de um Computador
Aula02 - Componentes de um ComputadorAula02 - Componentes de um Computador
Aula02 - Componentes de um Computador
 

Destaque

Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoDelacyr Ferreira
 
Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaGabriel Albuquerque
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeDelacyr Ferreira
 
Algoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoAlgoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoGabriel Albuquerque
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordGabriel Albuquerque
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem CLeonardo Lima
 
Análise de Algoritmos - Conceitos de Grafos
Análise de Algoritmos - Conceitos de GrafosAnálise de Algoritmos - Conceitos de Grafos
Análise de Algoritmos - Conceitos de GrafosDelacyr Ferreira
 
Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Bianca Dantas
 
Classes de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícilClasses de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícilGuilherme Coelho
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasDelacyr Ferreira
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoDelacyr Ferreira
 
Caminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-WarshallCaminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-WarshallJohnnatan Messias
 
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-WarshallAlgoritmo de Floyd-Warshall
Algoritmo de Floyd-WarshallJoao Silva
 
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...iPhoneDevBr
 
Análise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-CompletosAnálise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-CompletosDelacyr Ferreira
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPDelacyr Ferreira
 
3 0 cap 003
3 0 cap 0033 0 cap 003
3 0 cap 003luisadr
 
AI - Backtracking vs Depth-First Search (DFS)
AI - Backtracking vs Depth-First Search (DFS)AI - Backtracking vs Depth-First Search (DFS)
AI - Backtracking vs Depth-First Search (DFS)Johnnatan Messias
 
Pesquisa Operacional
Pesquisa OperacionalPesquisa Operacional
Pesquisa Operacionalmsleite100
 

Destaque (20)

Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma Máxima
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - Recursividade
 
Algoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoAlgoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco Mínimo
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Análise de Algoritmos - Conceitos de Grafos
Análise de Algoritmos - Conceitos de GrafosAnálise de Algoritmos - Conceitos de Grafos
Análise de Algoritmos - Conceitos de Grafos
 
Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Apresentacao mochila - parte 1
Apresentacao mochila - parte 1
 
Classes de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícilClasses de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícil
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
 
Caminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-WarshallCaminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-Warshall
 
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-WarshallAlgoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
 
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
 
Análise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-CompletosAnálise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-Completos
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NP
 
3 0 cap 003
3 0 cap 0033 0 cap 003
3 0 cap 003
 
Algoritmo Guloso
Algoritmo GulosoAlgoritmo Guloso
Algoritmo Guloso
 
AI - Backtracking vs Depth-First Search (DFS)
AI - Backtracking vs Depth-First Search (DFS)AI - Backtracking vs Depth-First Search (DFS)
AI - Backtracking vs Depth-First Search (DFS)
 
Pesquisa Operacional
Pesquisa OperacionalPesquisa Operacional
Pesquisa Operacional
 

Semelhante a Análise de Algoritmos - Programação Dinâmica

Aula 4 Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17
Aula 4   Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17Aula 4   Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17
Aula 4 Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17Aline Guedes
 
Polinomios e monomios.ppt
Polinomios e monomios.pptPolinomios e monomios.ppt
Polinomios e monomios.pptandrade333
 
Otimizações e Funções Quadráticas
Otimizações e Funções QuadráticasOtimizações e Funções Quadráticas
Otimizações e Funções QuadráticasVania Leitao
 
Mat equacoes do 1 grau 003
Mat equacoes do 1 grau  003Mat equacoes do 1 grau  003
Mat equacoes do 1 grau 003trigono_metria
 
Apostila nivelamento cal
Apostila nivelamento calApostila nivelamento cal
Apostila nivelamento calAndré Piazza
 
Polinômia, expr alg e prod nat
Polinômia, expr alg e prod natPolinômia, expr alg e prod nat
Polinômia, expr alg e prod natMarcelo Auler
 
www.AulasDeMatematicaApoio.com - Matemática - Frações Algébricas
 www.AulasDeMatematicaApoio.com  - Matemática -  Frações Algébricas www.AulasDeMatematicaApoio.com  - Matemática -  Frações Algébricas
www.AulasDeMatematicaApoio.com - Matemática - Frações AlgébricasAulas De Matemática Apoio
 
www.AulasDeMatematicaApoio.com.br - Matemática - Frações Algébricas
 www.AulasDeMatematicaApoio.com.br - Matemática -  Frações Algébricas www.AulasDeMatematicaApoio.com.br - Matemática -  Frações Algébricas
www.AulasDeMatematicaApoio.com.br - Matemática - Frações AlgébricasBeatriz Góes
 
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Frações Algébricas
 www.AulasDeMatematicanoRJ.Com.Br - Matemática -  Frações Algébricas www.AulasDeMatematicanoRJ.Com.Br - Matemática -  Frações Algébricas
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Frações AlgébricasClarice Leclaire
 
Aula3 operaçoes mon_polinom1
Aula3 operaçoes mon_polinom1Aula3 operaçoes mon_polinom1
Aula3 operaçoes mon_polinom1Marcia Roberto
 
Módulo 01 - 8 ano / Ens.Fundamental
Módulo 01 - 8 ano / Ens.Fundamental  Módulo 01 - 8 ano / Ens.Fundamental
Módulo 01 - 8 ano / Ens.Fundamental Adriana De Moraes
 

Semelhante a Análise de Algoritmos - Programação Dinâmica (20)

Full Waveform Inversion: Introdução e Aplicações [3/5]
Full Waveform Inversion: Introdução e Aplicações [3/5]Full Waveform Inversion: Introdução e Aplicações [3/5]
Full Waveform Inversion: Introdução e Aplicações [3/5]
 
Prog Din08
Prog Din08Prog Din08
Prog Din08
 
Aula 4 Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17
Aula 4   Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17Aula 4   Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17
Aula 4 Profmat - Algoritmo de Euclides - MDC e MMC 25 08-17
 
Resolvida 2.1 pagina 5
Resolvida 2.1 pagina 5Resolvida 2.1 pagina 5
Resolvida 2.1 pagina 5
 
Polinomios e monomios.ppt
Polinomios e monomios.pptPolinomios e monomios.ppt
Polinomios e monomios.ppt
 
Otimizações e Funções Quadráticas
Otimizações e Funções QuadráticasOtimizações e Funções Quadráticas
Otimizações e Funções Quadráticas
 
Mat equacoes do 1 grau 003
Mat equacoes do 1 grau  003Mat equacoes do 1 grau  003
Mat equacoes do 1 grau 003
 
Fin a01
Fin a01Fin a01
Fin a01
 
Trabalho de mat.pptx
Trabalho de mat.pptxTrabalho de mat.pptx
Trabalho de mat.pptx
 
Ft oper mono_poli
Ft oper mono_poliFt oper mono_poli
Ft oper mono_poli
 
Apostila nivelamento cal
Apostila nivelamento calApostila nivelamento cal
Apostila nivelamento cal
 
Teorema Chinês Dos Restos
Teorema Chinês Dos RestosTeorema Chinês Dos Restos
Teorema Chinês Dos Restos
 
Mat equações
Mat equaçõesMat equações
Mat equações
 
Polinômia, expr alg e prod nat
Polinômia, expr alg e prod natPolinômia, expr alg e prod nat
Polinômia, expr alg e prod nat
 
www.AulasDeMatematicaApoio.com - Matemática - Frações Algébricas
 www.AulasDeMatematicaApoio.com  - Matemática -  Frações Algébricas www.AulasDeMatematicaApoio.com  - Matemática -  Frações Algébricas
www.AulasDeMatematicaApoio.com - Matemática - Frações Algébricas
 
www.AulasDeMatematicaApoio.com.br - Matemática - Frações Algébricas
 www.AulasDeMatematicaApoio.com.br - Matemática -  Frações Algébricas www.AulasDeMatematicaApoio.com.br - Matemática -  Frações Algébricas
www.AulasDeMatematicaApoio.com.br - Matemática - Frações Algébricas
 
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Frações Algébricas
 www.AulasDeMatematicanoRJ.Com.Br - Matemática -  Frações Algébricas www.AulasDeMatematicanoRJ.Com.Br - Matemática -  Frações Algébricas
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Frações Algébricas
 
Aula3 operaçoes mon_polinom1
Aula3 operaçoes mon_polinom1Aula3 operaçoes mon_polinom1
Aula3 operaçoes mon_polinom1
 
Módulo 01 - 8 ano / Ens.Fundamental
Módulo 01 - 8 ano / Ens.Fundamental  Módulo 01 - 8 ano / Ens.Fundamental
Módulo 01 - 8 ano / Ens.Fundamental
 
Equacoes grau
Equacoes  grauEquacoes  grau
Equacoes grau
 

Último

Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....LuizHenriquedeAlmeid6
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorEdvanirCosta
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamentalAntônia marta Silvestre da Silva
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?AnabelaGuerreiro7
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 

Último (20)

Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de Professor
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 

Análise de Algoritmos - Programação Dinâmica

  • 2. Programação Dinâmica Aplicável a problemas de otimização – p. 2/56
  • 3. Programação Dinâmica Aplicável a problemas de otimização Combina soluções de subproblemas – p. 2/56
  • 4. Programação Dinâmica Aplicável a problemas de otimização Combina soluções de subproblemas Subproblemas não são independentes – p. 2/56
  • 5. Programação Dinâmica Aplicável a problemas de otimização Combina soluções de subproblemas Subproblemas não são independentes A relação problema – subproblema é geralmente expressa em termos de uma fórmula recursiva, que quando implementada na forma “bottom-up” produz, em muitos casos, solução eficiente – p. 2/56
  • 6. Programação Dinâmica A diferença para o método guloso é que muitas sequências de decisões são geradas, enquanto que no método guloso apenas uma sequência de decisão é gerada – p. 3/56
  • 8. Multiplicação de matrizes Problema: Multiplicar n matrizes M = M1 × M2 × · · · × Mn realizando o número mínimo de operações – p. 5/56
  • 9. Multiplicação de matrizes Problema: Multiplicar n matrizes M = M1 × M2 × · · · × Mn realizando o número mínimo de operações Em outras palavras, determinar qual a melhor forma de realizar as multiplicações, ou seja, aquela que requer o número mínimo de operações – p. 5/56
  • 10. Multiplicação de matrizes As matrizes são multiplicadas aos pares – p. 6/56
  • 11. Multiplicação de matrizes As matrizes são multiplicadas aos pares Vamos supor que cada matriz Mi tem dimensões bi−1 × bi. Logo, para calcular Mi × Mi+1 são necessárias bi−1 ∗ bi ∗ bi+1 operações – p. 6/56
  • 12. Multiplicação de matrizes Exemplo: M = M1 × M2 × M3 × M4 com b = {200, 2, 30, 20, 5}. – p. 7/56
  • 13. Multiplicação de matrizes Exemplo: M = M1 × M2 × M3 × M4 com b = {200, 2, 30, 20, 5}. Quantas multiplicações são realizadas nas sequências: M = (((M1 × M2) × M3) × M4) M = (M1 × ((M2 × M3) × M4)) – p. 7/56
  • 14. Multiplicação de matrizes Exemplo: M = M1 × M2 × M3 × M4 com b = {200, 2, 30, 20, 5}. Quantas multiplicações são realizadas nas sequências: M = (((M1 × M2) × M3) × M4) → 152.000 operações M = (M1 × ((M2 × M3) × M4)) → 3.400 operações – p. 8/56
  • 15. Multiplicação de matrizes Exemplo: M = M1 × M2 × M3 × M4 com b = {200, 2, 30, 20, 5}. Quantas multiplicações são realizadas nas sequências: M = (((M1 × M2) × M3) × M4) → 152.000 operações M = (M1 × ((M2 × M3) × M4)) → 3.400 operações Conclusão: a ordem das multiplicações faz muita diferença. – p. 8/56
  • 16. Multiplicação de matrizes Como determinar uma sequência ótima de multiplicação? – p. 9/56
  • 17. Multiplicação de matrizes Como determinar uma sequência ótima de multiplicação? O algoritmo da “força bruta” é impraticável: existem Ω(2n ) possibilidades (números de Catalão). – p. 9/56
  • 18. Multiplicação de matrizes Como determinar uma sequência ótima de multiplicação? O algoritmo da “força bruta” é impraticável: existem Ω(2n ) possibilidades (números de Catalão). Pelo método da programação dinâmica, podemos determinar eficientemente uma sequência ótima de multiplicação. – p. 9/56
  • 19. Multiplicação de matrizes Para resolver este problema, tudo que precisamos é saber qual o melhor índice k tal que M = (M1 ×M2 ×· · ·×Mk).(Mk+1 ×Mk+2 ×· · ·×Mn) onde k varia de 1 a n − 1. – p. 10/56
  • 20. Multiplicação de matrizes Mais precisamente, seja Mij o número mínimo de operações para realizar o produto Mi × Mi+1 × · · · × Mj – p. 11/56
  • 21. Multiplicação de matrizes Mais precisamente, seja Mij o número mínimo de operações para realizar o produto Mi × Mi+1 × · · · × Mj Podemos calcular Mij? – p. 11/56
  • 22. Multiplicação de matrizes Mais precisamente, seja Mij o número mínimo de operações para realizar o produto Mi × Mi+1 × · · · × Mj Podemos calcular Mij? Sim. Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 – p. 11/56
  • 23. Multiplicação de matrizes Esta expressão constitui uma recorrência típica do método de programação dinâmica. Ela sugere um algoritmo recursivo, mas uma implementação “bottom-up” é mais eficiente. – p. 12/56
  • 24. Multiplicação de matrizes Um algoritmo baseado nesta fórmula tem os seguintes passos iterativos: 1. os Mi,i são calculados, para 1 ≤ i ≤ n. Claramente, Mi,i = 0, para todo i; 2. os Mi,i+1 são calculados, para 1 ≤ i ≤ n − 1; 3. os Mi,i+2 são calculados, para 1 ≤ i ≤ n − 2; 4. ... e assim por diante. – p. 13/56
  • 25. Multiplicação de matrizes Por exemplo, vamos aplicar o algoritmo acima para as seguintes matrizes: M = M1 × M2 × M3 × M4 (200 × 2) (2 × 30) (30 × 20) (20 × 5) (b0 × b1) (b1 × b2) (b2 × b3) (b3 × b4) – p. 14/56
  • 26. Multiplicação de matrizes Por exemplo, vamos aplicar o algoritmo acima para as seguintes matrizes: M = M1 × M2 × M3 × M4 (200 × 2) (2 × 30) (30 × 20) (20 × 5) (b0 × b1) (b1 × b2) (b2 × b3) (b3 × b4) M1,1 = M2,2 = M3,3 = M4,4 = 0 – p. 14/56
  • 27. Multiplicação de matrizes Por exemplo, vamos aplicar o algoritmo acima para as seguintes matrizes: M = M1 × M2 × M3 × M4 (200 × 2) (2 × 30) (30 × 20) (20 × 5) (b0 × b1) (b1 × b2) (b2 × b3) (b3 × b4) M1,1 = M2,2 = M3,3 = M4,4 = 0 M1,2 = 12000, M2,3 = 1200, M3,4 = 3000 – p. 14/56
  • 28. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 – p. 15/56
  • 29. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 M1,3 = min{M1,k + Mk+1,3 + b0bkb3}, k = 1, 2 – p. 15/56
  • 30. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 M1,3 = min{M1,k + Mk+1,3 + b0bkb3}, k = 1, 2 M1,3 = min{M1,1 + M2,3 + b0b1b3, M1,2 + M3,3 + b0b2b3} = min{0 + 1200 + 8000, 12000 + 0 + 120000} = 9200 (M1 × (M2 × M3)) – p. 15/56
  • 31. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 – p. 16/56
  • 32. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 M2,4 = min{M2,k + Mk+1,4 + b1bkb4}, k = 2, 3 – p. 16/56
  • 33. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 M2,4 = min{M2,k + Mk+1,4 + b1bkb4}, k = 2, 3 M2,4 = min{M2,2 + M3,4 + b1b2b4, M2,3 + M4,4 + b1b3b4} = min{0 + 3000 + 300, 1200 + 0 + 200} = 1400 ((M2 × M3) × M4)) – p. 16/56
  • 34. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 – p. 17/56
  • 35. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 M1,4 = min{M1,k + Mk+1,4 + b0bkb4}, k = 1, 3 – p. 17/56
  • 36. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 M1,4 = min{M1,k + Mk+1,4 + b0bkb4}, k = 1, 3 M1,4 = min{M1,1 + M2,4 + b0b1b4, M1,2 + M3,4 + b0b2b4, M1,3 + M4,4 + b0b3b4} = min{0 + 1400 + 2000, 12000 + 3000 + 30000, 9200 + 0 + 20000} = 3400 (M1 × ((M2 × M3) × M4)) – p. 17/56
  • 37. Multiplicação de matrizes Mij = min{Mik +Mk+1,j +bi−1bkbj}, k = i, . . . , j −1 M1,4 = min{M1,k + Mk+1,4 + b0bkb4}, k = 1, 3 M1,4 = min{M1,1 + M2,4 + b0b1b4, M1,2 + M3,4 + b0b2b4, M1,3 + M4,4 + b0b3b4} = min{0 + 1400 + 2000, 12000 + 3000 + 30000, 9200 + 0 + 20000} = 3400 (M1 × ((M2 × M3) × M4)) Solução ótima: (M1 × ((M2 × M3) × M4)) – p. 17/56
  • 38. Exercícios 1. Aplique o algoritmo para multiplicar 5 matrizes, onde b = {30, 35, 15, 5, 10, 20} 2. Descreva mais precisamente o algoritmo estudado 3. Quantas operações são realizadas por este algoritmo? 4. Considere a seguinte proposta gulosa para a solução do problema de multiplicação de matrizes: a cada passo, selecione o produto que requer um número mínimo de operações 5. Apresente uma solução para a variante do problema de multiplicação de matrizes em que o objetivo é maximizar o número de operações – p. 18/56
  • 39. Programac¸ ˜ao Dinˆamica Maior subsequência comum – p. 19/56
  • 40. Maior subsequência comum Problema: Dadas as sequências X = x1, x2, . . . , xm e Y = y1, y2, . . . , yn , encontrar uma subsequência comum de maior tamanho (LCS(X, Y )). – p. 20/56
  • 41. Maior subsequência comum Problema: Dadas as sequências X = x1, x2, . . . , xm e Y = y1, y2, . . . , yn , encontrar uma subsequência comum de maior tamanho (LCS(X, Y )). springtime horseback snowflakepioneer – p. 20/56
  • 42. Maior subsequência comum Uma subsequência não necessita ter elementos consecutivos; Ela deve ter apenas elementos na mesma ordem na sequência. – p. 21/56
  • 43. LCS – Algoritmo força bruta Para cada subsequência de X, verifique se ela é subsequência de Y . – p. 22/56
  • 44. LCS – Algoritmo força bruta Para cada subsequência de X, verifique se ela é subsequência de Y . Qual o tempo? – p. 22/56
  • 45. LCS – Algoritmo força bruta Para cada subsequência de X, verifique se ela é subsequência de Y . Qual o tempo? 2m subsequências de X para verificar (pois cada subsequência de X corresponde a um subconjunto de {1, 2, . . . , m}) + tempo linear para verificar cada uma. – p. 22/56
  • 46. LCS – Algoritmo força bruta Para cada subsequência de X, verifique se ela é subsequência de Y . Qual o tempo? 2m subsequências de X para verificar (pois cada subsequência de X corresponde a um subconjunto de {1, 2, . . . , m}) + tempo linear para verificar cada uma. Portanto, esta não é uma boa estratégia. – p. 22/56
  • 47. LCS – Algoritmo força bruta Podemos fazer melhor? – p. 23/56
  • 48. LCS – Algoritmo força bruta Podemos fazer melhor? Sim, utilizando programação dinâmica. – p. 23/56
  • 49. LCS – Algoritmo força bruta Podemos fazer melhor? Sim, utilizando programação dinâmica. Notação: Xi = x1, x2, . . . , xi , o i-ésimo prefixo de X Yi = y1, y2, . . . , yi , o i-ésimo prefixo de Y – p. 23/56
  • 50. Maior subsequência comum Uma LCS(X, Y ) pode ser obtida recursivamente da seguinte forma: – p. 24/56
  • 51. Maior subsequência comum Uma LCS(X, Y ) pode ser obtida recursivamente da seguinte forma: Se xm = yn então uma LCS(X, Y ) é formada por uma LCS(Xm−1, Yn−1) concatenada com xm – p. 24/56
  • 52. Maior subsequência comum Uma LCS(X, Y ) pode ser obtida recursivamente da seguinte forma: Se xm = yn então uma LCS(X, Y ) é formada por uma LCS(Xm−1, Yn−1) concatenada com xm Se xm = yn então uma LCS(X, Y ) é formada por uma LCS(Xm, Yn−1) ou LCS(Xm−1, Yn) – p. 24/56
  • 53. Maior subsequência comum Defina c(i, j) como o tamanho da LCS(Xi, Yj). – p. 25/56
  • 54. Maior subsequência comum Defina c(i, j) como o tamanho da LCS(Xi, Yj). Então c(i, j) =    0 se i = 0 ou j = 0 c(i − 1, j − 1) + 1 se xi = yj max{c(i − 1, j), c(i, j − 1)} se xi = yj – p. 25/56
  • 55. Maior subsequência comum Defina c(i, j) como o tamanho da LCS(Xi, Yj). Então c(i, j) =    0 se i = 0 ou j = 0 c(i − 1, j − 1) + 1 se xi = yj max{c(i − 1, j), c(i, j − 1)} se xi = yj Podemos implementar eficientemente esta fórmula calculando os c(i, j) para valores crescentes de i e j até calcular c(m, n). – p. 25/56
  • 56. Maior subsequência comum Vamos calcular LCS(X, Y ), onde X = ABCB e Y = BDCAB. – p. 26/56
  • 57. Maior subsequência comum Vamos calcular LCS(X, Y ), onde X = ABCB e Y = BDCAB. Xi Yj A A B B B B C CD 0 0 0 000000 0 – p. 26/56
  • 58. Maior subsequência comum Vamos calcular LCS(X, Y ), onde X = ABCB e Y = BDCAB. Xi Yj A A B B B B C CD 00 0 0 0 0 000000 0 – p. 27/56
  • 59. Maior subsequência comum Vamos calcular LCS(X, Y ), onde X = ABCB e Y = BDCAB. Xi Yj A A B B B B C CD 000 0 0 0 0 000000 1 1 – p. 28/56
  • 60. Maior subsequência comum Vamos calcular LCS(X, Y ), onde X = ABCB e Y = BDCAB. Xi Yj A A B B B B C CD 000 0 0 0 0 000000 11 11 1111 11 22 222 2 3 – p. 29/56
  • 61. LCS - exemplo para completar Ex.: X = (A, B, C, B, D, A, B) e Y = (B, D, C, A, B, A). Yj B D C A B A Xi 0 0 0 0 0 0 0 A 0 B 0 C 0 B 0 D 0 A 0 B 0 – p. 30/56
  • 62. Maior subsequência comum Qual o tempo gasto pelo algoritmo? – p. 31/56
  • 63. Maior subsequência comum Qual o tempo gasto pelo algoritmo? O(m.n) – p. 31/56
  • 64. Maior subsequência comum Qual o tempo gasto pelo algoritmo? O(m.n) Como encontrar uma LCS(X, Y ) após completada a tabela? Qual o tempo? – p. 31/56
  • 65. Exercícios 1. Determine uma LCS para X = 1, 0, 0, 1, 0, 1, 0, 1 e Y = 0, 1, 0, 1, 1, 0, 1, 1, 0 2. Descreva mais precisamente o algoritmo estudado 3. Mostre como computar o comprimento de uma LCS usando apenas 2.min(m, n) entradas (2 linhas ou colunas da tabela) 4. Forneça um algoritmo O(n2) para encontrar uma maior subsequência não descrescente de uma dada sequência de n números – p. 32/56
  • 66. Exercícios 5. Forneça um algoritmo O(n log n) para encontrar uma maior subsequência não descrescente de uma dada sequência de n números – p. 33/56
  • 67. Programac¸ ˜ao Dinˆamica O problema do caixeiro viajante – p. 34/56
  • 68. Caixeiro viajante (PCV) O PCV consiste em encontrar um circuito de custo mínimo que contém todos os vertices (circuito hamiltoniano) em um grafo G com custos não negativos cij associados à cada aresta (i, j). – p. 35/56
  • 69. Caixeiro viajante (PCV) Vamos supor, sem perda de generalidade, que os vértices estão numerados de 1 a n, e que o circuito começa e termina no vértice 1. – p. 36/56
  • 70. Caixeiro viajante (PCV) Vamos supor, sem perda de generalidade, que os vértices estão numerados de 1 a n, e que o circuito começa e termina no vértice 1. OBS: qualquer circuito hamiltoniano é constituído por uma aresta (1, k), 2 ≤ k ≤ n, e um caminho de k até 1 que contém todos os vértices de V (G) − {1, k}. Esta observação nos motiva a definir a seguinte função. – p. 36/56
  • 71. Caixeiro viajante Seja f(i, C) o custo de um caminho mínimo do vértice i até 1 e que visita todos os vértices do conjunto C. – p. 37/56
  • 72. Caixeiro viajante Seja f(i, C) o custo de um caminho mínimo do vértice i até 1 e que visita todos os vértices do conjunto C. Podemos calcular f(i, C)? – p. 37/56
  • 73. Caixeiro viajante Seja f(i, C) o custo de um caminho mínimo do vértice i até 1 e que visita todos os vértices do conjunto C. Podemos calcular f(i, C)? Sim. Os valores de f(i, C) podem ser calculados recursivamente da seguinte forma: f(i, C) = minj∈C{cij + f(j, C − {j})} – p. 37/56
  • 74. Caixeiro viajante Os valores de f(i, C) podem ser calculados recursivamente da seguinte forma: f(i, C) = minj∈C{cij + f(j, C − {j})} – p. 38/56
  • 75. Caixeiro viajante Os valores de f(i, C) podem ser calculados recursivamente da seguinte forma: f(i, C) = minj∈C{cij + f(j, C − {j})} A solução do PCV está no cálculo de f(1, V (G)−{1}) = min2≤k≤n{c1k+f(k, V (G)−{1, k})} – p. 38/56
  • 76. Caixeiro viajante Os valores de f necessários para resolver o PCV podem ser obtidos em ordem crescente de |C|, da seguinte forma: – p. 39/56
  • 77. Caixeiro viajante Os valores de f necessários para resolver o PCV podem ser obtidos em ordem crescente de |C|, da seguinte forma: |C| = 0: f(i, ∅) = ci1, ∀ 2 ≤ i ≤ n. – p. 39/56
  • 78. Caixeiro viajante Os valores de f necessários para resolver o PCV podem ser obtidos em ordem crescente de |C|, da seguinte forma: |C| = 0: f(i, ∅) = ci1, ∀ 2 ≤ i ≤ n. |C| = 1: f(i, {j}) = cij + f(j, ∅) = cij + cj1, ∀ 2 ≤ i, j ≤ n, i = j. – p. 39/56
  • 79. Caixeiro viajante Os valores de f necessários para resolver o PCV podem ser obtidos em ordem crescente de |C|, da seguinte forma: |C| = 0: f(i, ∅) = ci1, ∀ 2 ≤ i ≤ n. |C| = 1: f(i, {j}) = cij + f(j, ∅) = cij + cj1, ∀ 2 ≤ i, j ≤ n, i = j. |C| = 2, 3, . . . , n − 2, usa-se a fórmula geral, utilizando os valores de f calculados anteriormente. – p. 39/56
  • 80. Caixeiro viajante - exemplo 1 110 2 7 7 12 1 5 9 3 15 20 3 2 4 – p. 40/56
  • 81. Caixeiro viajante - exemplo 1 110 2 7 7 12 1 5 9 3 15 20 3 2 4 f(2, {3}) = c23 + c31 = 9 + 1 = 10 – p. 40/56
  • 82. Caixeiro viajante - exemplo 1 110 2 7 7 12 1 5 9 3 15 20 3 2 4 f(2, {3}) = c23 + c31 = 9 + 1 = 10 f(2, {4}) = c24 + c41 = 1 + 7 = 8 – p. 40/56
  • 83. Caixeiro viajante - exemplo 1 110 2 7 7 12 1 5 9 3 15 20 3 2 4 f(2, {3}) = c23 + c31 = 9 + 1 = 10 f(2, {4}) = c24 + c41 = 1 + 7 = 8 f(3, {2}) = c32 + c21 = 5 + 20 = 25 – p. 40/56
  • 84. Caixeiro viajante - exemplo 1 110 2 7 7 12 1 5 9 3 15 20 3 2 4 f(2, {3}) = c23 + c31 = 9 + 1 = 10 f(2, {4}) = c24 + c41 = 1 + 7 = 8 f(3, {2}) = c32 + c21 = 5 + 20 = 25 f(3, {4}) = c34 + c41 = 15 + 7 = 22 – p. 40/56
  • 85. Caixeiro viajante - exemplo 1 110 2 7 7 12 1 5 9 3 15 20 3 2 4 f(2, {3}) = c23 + c31 = 9 + 1 = 10 f(2, {4}) = c24 + c41 = 1 + 7 = 8 f(3, {2}) = c32 + c21 = 5 + 20 = 25 f(3, {4}) = c34 + c41 = 15 + 7 = 22 f(4, {2}) = c42 + c21 = 12 + 20 = 32 – p. 40/56
  • 86. Caixeiro viajante - exemplo 1 110 2 7 7 12 1 5 9 3 15 20 3 2 4 f(2, {3}) = c23 + c31 = 9 + 1 = 10 f(2, {4}) = c24 + c41 = 1 + 7 = 8 f(3, {2}) = c32 + c21 = 5 + 20 = 25 f(3, {4}) = c34 + c41 = 15 + 7 = 22 f(4, {2}) = c42 + c21 = 12 + 20 = 32 f(4, {3}) = c43 + c31 = 3 + 1 = 4 – p. 40/56
  • 87. Caixeiro viajante - exemplo f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})} – p. 41/56
  • 88. Caixeiro viajante - exemplo f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})} = min{9 + 22, 1 + 4} = 5 (j = 4) – p. 41/56
  • 89. Caixeiro viajante - exemplo f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})} = min{9 + 22, 1 + 4} = 5 (j = 4) f(3, {2, 4}) = min{c32 + f(2, {4}), c34 + f(4, {2})} – p. 41/56
  • 90. Caixeiro viajante - exemplo f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})} = min{9 + 22, 1 + 4} = 5 (j = 4) f(3, {2, 4}) = min{c32 + f(2, {4}), c34 + f(4, {2})} = min{5 + 8, 15 + 32} = 13 (j = 2) – p. 41/56
  • 91. Caixeiro viajante - exemplo f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})} = min{9 + 22, 1 + 4} = 5 (j = 4) f(3, {2, 4}) = min{c32 + f(2, {4}), c34 + f(4, {2})} = min{5 + 8, 15 + 32} = 13 (j = 2) f(4, {2, 3}) = min{c42 + f(2, {3}), c43 + f(3, {2})} – p. 41/56
  • 92. Caixeiro viajante - exemplo f(2, {3, 4}) = min{c23 + f(3, {4}), c24 + f(4, {3})} = min{9 + 22, 1 + 4} = 5 (j = 4) f(3, {2, 4}) = min{c32 + f(2, {4}), c34 + f(4, {2})} = min{5 + 8, 15 + 32} = 13 (j = 2) f(4, {2, 3}) = min{c42 + f(2, {3}), c43 + f(3, {2})} = min{12 + 10, 3 + 25} = 22 (j = 2) – p. 41/56
  • 93. Caixeiro viajante - exemplo f(1, {2, 3, 4}) = min{c12 + f(2, {3, 4}), c13 + f(3, {2, 4}), c14 + f(4, {2, 3})} – p. 42/56
  • 94. Caixeiro viajante - exemplo f(1, {2, 3, 4}) = min{c12 + f(2, {3, 4}), c13 + f(3, {2, 4}), c14 + f(4, {2, 3})} = min{2 + 5, 10 + 13, 7 + 22} = 7 (j = 2) – p. 42/56
  • 95. Caixeiro viajante - exemplo f(1, {2, 3, 4}) = min{c12 + f(2, {3, 4}), c13 + f(3, {2, 4}), c14 + f(4, {2, 3})} = min{2 + 5, 10 + 13, 7 + 22} = 7 (j = 2) Portanto, um circuito hamiltoniano de custo mínimo é (1, 2, 4, 3, 1) com custo 7. – p. 42/56
  • 96. Exercícios 1. Dado um polígono convexo P com vértices numerados de 1 a n na ordem cíclica, e suponha que cada diagonal ligando os vértices i e j possui custo dij. Projete um algoritmo para determinar uma triangulação de custo mínimo de P. – p. 43/56
  • 97. Programac¸ ˜ao Dinˆamica O problema binário da mochila – p. 44/56
  • 98. Problema da Mochila Dados n objetos com valor e peso associado a cada um deles, e uma mochila que suporta peso máximo W, determinar um subconjunto de objetos de valor máximo e cujo peso não excede W. – p. 45/56
  • 99. Problema da Mochila Dados n objetos com valor e peso associado a cada um deles, e uma mochila que suporta peso máximo W, determinar um subconjunto de objetos de valor máximo e cujo peso não excede W. Notação: Objetos: x1, x2, . . . , xn Valores: v1, v2, . . . , vn Pesos: p1, p2, . . . , pn Peso da mochila: W – p. 45/56
  • 100. Problema da Mochila Uma solução para o problema da mochila pode ser obtida pelo seguinte raciocínio: “O objeto xn pode estar ou não na solução ótima” – p. 46/56
  • 101. Problema da Mochila Uma solução para o problema da mochila pode ser obtida pelo seguinte raciocínio: “O objeto xn pode estar ou não na solução ótima” Se o objeto xn estiver na solução ótima, o valor desta solução será vn mais o valor de uma solução ótima do problema da mochila com capacidade W − pn e considerando só os n − 1 primeiros itens. – p. 46/56
  • 102. Problema da Mochila Se o objeto xn não estiver na solução ótima, o valor ótimo será dado pelo valor de uma solução ótima do problema da mochila com capacidade W e considerando só os n − 1 primeiros itens. – p. 47/56
  • 103. Problema da Mochila Se o objeto xn não estiver na solução ótima, o valor ótimo será dado pelo valor de uma solução ótima do problema da mochila com capacidade W e considerando só os n − 1 primeiros itens. Seja f(i, w) o valor ótimo considerando apenas os i primeiros ítens e uma mochila de capacidade w. – p. 47/56
  • 104. Problema da Mochila A recorrência fica então: f(i, w) = f(i − 1, w) se pi > w max{f(i − 1, w − pi) + vi, f(i − 1, w)} se pi ≤ w – p. 48/56
  • 105. Problema da Mochila A recorrência fica então: f(i, w) = f(i − 1, w) se pi > w max{f(i − 1, w − pi) + vi, f(i − 1, w)} se pi ≤ w f(0, w) = 0 e f(i, 0) = 0 – p. 48/56
  • 106. Problema da Mochila - Exemplo Peso da mochila = 7 Objetos: x1, x2, x3, x4 Valores: 10, 7, 25, 24 Pesos: 2, 1, 6, 5 – p. 49/56
  • 107. Problema da Mochila - Exemplo Peso da mochila = 7 Objetos: x1, x2, x3, x4 Valores: 10, 7, 25, 24 Pesos: 2, 1, 6, 5 0 1 2 3 4 5 6 7 w 0 0 0 0 0 0 0 0 0 1 0 2 0 3 0 4 0 i – p. 49/56
  • 108. Problema da Mochila Exemplo: Peso da mochila = 7 Objetos: x1, x2, x3, x4 Valores: 10, 7, 25, 24 Pesos: 2, 1, 6, 5 0 1 2 3 4 5 6 7 w 0 0 0 0 0 0 0 0 0 1 0 0 10 10 10 10 10 10 2 0 7 10 17 17 17 17 17 3 0 7 10 17 17 17 25 32 4 0 7 10 17 17 24 31 34 i – p. 50/56
  • 109. Problema da Mochila Qual o tempo gasto pelo algoritmo? – p. 51/56
  • 110. Problema da Mochila Qual o tempo gasto pelo algoritmo? O(n.W) – p. 51/56
  • 111. Problema da Mochila Qual o tempo gasto pelo algoritmo? O(n.W) Como encontrar uma composição ótima após completada a tabela? Qual o tempo? – p. 51/56
  • 112. Exercício 1. Resolva o problema da mochila para os valores Peso da mochila = 15 Objetos: x1, x2, x3, x4 Valores: 5, 6, 11, 12 Pesos: 3, 5, 6, 7 2. Uma haste de comprimento H precisa ser cortada em pequenos pedaços/partes de comprimento {h1, h2, . . . , hn}. Projete um algoritmo para determinar em quais pedaços a haste deve ser cortada de forma que a sobra seja a menor possível. 3. Dada uma coleção A = {a1, a2, . . . , an} de n inteiros positivos que somam N. Projete um algoritmo para determinar se existe uma partição de A em dois subconjuntos com a mesma soma. – p. 52/56
  • 113. Exercício para pesquisar 4. Considere o seguinte algoritmo guloso para o problema da mochila: a cada passo, escolha o objeto de maior valor. Este algoritmo está correto? – p. 53/56
  • 114. Exercício 5. Problema de investimento de capital: R$6, 00 unidades de capital disponível N = 3 atividades diferentes para investimento com ganhos dados pelo quadro abaixo: R g1(R) g2(R) g3(R) 0 0 0 0 1 15 15 26 2 40 40 40 3 80 60 45 4 90 70 50 5 95 73 51 6 100 75 53 Qual o distribuição ótima do recurso? – p. 54/56
  • 115. Exercício para pesquisar 6. O problema do corte bidimensional guilhotinado: ... (mochila bidimensional) – p. 55/56
  • 116. Exercício para pesquisar 1. Árvore de busca binária ótima: Consideremos o problema de realizar buscas em uma árvore binária de busca contendo os elementos de um conjunto C = {x1, x2, . . . , xn} (listados em ordem crescente) conhecendo-se as seguintes probabilidades: (a) q0 = Prob. de buscar um elemento x < x1 (b) pi = Prob. de buscar o elemento xi (c) qi = Prob. de buscar um elemento xi < x < xi+1 (d) qn = Prob. de buscar um elemento x > xn O problema é construir uma árvore binária de busca que representa C em que a execução das buscas seja feita com número mínimo de comparações. – p. 56/56