SlideShare uma empresa Scribd logo
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

Tecido conjuntivo
Tecido conjuntivoTecido conjuntivo
Tecido conjuntivo
marinadapieve
 
Plano de aula po1 capitulo 6 método simplex 2015 vrs 0000 - fazer.ppt [modo...
Plano de aula po1 capitulo 6   método simplex 2015 vrs 0000 - fazer.ppt [modo...Plano de aula po1 capitulo 6   método simplex 2015 vrs 0000 - fazer.ppt [modo...
Plano de aula po1 capitulo 6 método simplex 2015 vrs 0000 - fazer.ppt [modo...
Luis Duncan
 
Monopólio descriminador de preço
Monopólio descriminador de preçoMonopólio descriminador de preço
Monopólio descriminador de preço
Universidade Pedagogica
 
Fermentação e Respiração
Fermentação e RespiraçãoFermentação e Respiração
Fermentação e Respiração
emanuel
 
Efeito substituição e efeito renda
Efeito substituição e efeito rendaEfeito substituição e efeito renda
Efeito substituição e efeito renda
Universidade Pedagogica
 
Identificar uma função quadrática
Identificar uma função quadráticaIdentificar uma função quadrática
Identificar uma função quadrática
Paulo Mutolo
 
PolinôMios 7ª SéRie
PolinôMios 7ª SéRiePolinôMios 7ª SéRie
PolinôMios 7ª SéRie
Antonio Carneiro
 
Decisão da empresa em mercados competitivos
Decisão da empresa em mercados competitivosDecisão da empresa em mercados competitivos
Decisão da empresa em mercados competitivos
Luciano Pires
 
Aula 6 - Conceitos Econômicos
Aula 6 - Conceitos EconômicosAula 6 - Conceitos Econômicos
Aula 6 - Conceitos Econômicos
Caio Roberto de Souza Filho
 
Tópico 08 - Derivadas
Tópico 08 - DerivadasTópico 08 - Derivadas
Aula 08 monopólios
Aula 08   monopóliosAula 08   monopólios
Aula 08 monopólios
petecoslides
 
Fisica 02 - A teoria cinética dos gases
Fisica 02 - A teoria cinética dos gasesFisica 02 - A teoria cinética dos gases
Fisica 02 - A teoria cinética dos gases
Walmor Godoi
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
Marcos Castro
 
Sangue
SangueSangue
Consequências direitas do tráfico de escravos
Consequências direitas do tráfico de escravosConsequências direitas do tráfico de escravos
Consequências direitas do tráfico de escravos
Filipe Simão Kembo
 
Resumo a lógica matemática para concursos
Resumo a lógica matemática para concursosResumo a lógica matemática para concursos
Resumo a lógica matemática para concursos
Luiz Ladeira
 
Cálculo 1 - Limites
Cálculo 1 - LimitesCálculo 1 - Limites
Cálculo 1 - Limites
Amanda Saito
 
DP
DPDP
Calculo I - Uma Breve Introdução ao Estudo de Integrais
Calculo I - Uma Breve Introdução ao Estudo de IntegraisCalculo I - Uma Breve Introdução ao Estudo de Integrais
Calculo I - Uma Breve Introdução ao Estudo de Integrais
Ronildo Oliveira
 
MÓDULO 03 - TEORIA - PRONOME - EMPREGO, FORMA DE TRATMENTO E COLOCAÇÃO - ...
MÓDULO 03 - TEORIA -  PRONOME  - EMPREGO, FORMA DE TRATMENTO  E COLOCAÇÃO  - ...MÓDULO 03 - TEORIA -  PRONOME  - EMPREGO, FORMA DE TRATMENTO  E COLOCAÇÃO  - ...
MÓDULO 03 - TEORIA - PRONOME - EMPREGO, FORMA DE TRATMENTO E COLOCAÇÃO - ...
JulianaGonalves320736
 

Mais procurados (20)

Tecido conjuntivo
Tecido conjuntivoTecido conjuntivo
Tecido conjuntivo
 
Plano de aula po1 capitulo 6 método simplex 2015 vrs 0000 - fazer.ppt [modo...
Plano de aula po1 capitulo 6   método simplex 2015 vrs 0000 - fazer.ppt [modo...Plano de aula po1 capitulo 6   método simplex 2015 vrs 0000 - fazer.ppt [modo...
Plano de aula po1 capitulo 6 método simplex 2015 vrs 0000 - fazer.ppt [modo...
 
Monopólio descriminador de preço
Monopólio descriminador de preçoMonopólio descriminador de preço
Monopólio descriminador de preço
 
Fermentação e Respiração
Fermentação e RespiraçãoFermentação e Respiração
Fermentação e Respiração
 
Efeito substituição e efeito renda
Efeito substituição e efeito rendaEfeito substituição e efeito renda
Efeito substituição e efeito renda
 
Identificar uma função quadrática
Identificar uma função quadráticaIdentificar uma função quadrática
Identificar uma função quadrática
 
PolinôMios 7ª SéRie
PolinôMios 7ª SéRiePolinôMios 7ª SéRie
PolinôMios 7ª SéRie
 
Decisão da empresa em mercados competitivos
Decisão da empresa em mercados competitivosDecisão da empresa em mercados competitivos
Decisão da empresa em mercados competitivos
 
Aula 6 - Conceitos Econômicos
Aula 6 - Conceitos EconômicosAula 6 - Conceitos Econômicos
Aula 6 - Conceitos Econômicos
 
Tópico 08 - Derivadas
Tópico 08 - DerivadasTópico 08 - Derivadas
Tópico 08 - Derivadas
 
Aula 08 monopólios
Aula 08   monopóliosAula 08   monopólios
Aula 08 monopólios
 
Fisica 02 - A teoria cinética dos gases
Fisica 02 - A teoria cinética dos gasesFisica 02 - A teoria cinética dos gases
Fisica 02 - A teoria cinética dos gases
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
 
Sangue
SangueSangue
Sangue
 
Consequências direitas do tráfico de escravos
Consequências direitas do tráfico de escravosConsequências direitas do tráfico de escravos
Consequências direitas do tráfico de escravos
 
Resumo a lógica matemática para concursos
Resumo a lógica matemática para concursosResumo a lógica matemática para concursos
Resumo a lógica matemática para concursos
 
Cálculo 1 - Limites
Cálculo 1 - LimitesCálculo 1 - Limites
Cálculo 1 - Limites
 
DP
DPDP
DP
 
Calculo I - Uma Breve Introdução ao Estudo de Integrais
Calculo I - Uma Breve Introdução ao Estudo de IntegraisCalculo I - Uma Breve Introdução ao Estudo de Integrais
Calculo I - Uma Breve Introdução ao Estudo de Integrais
 
MÓDULO 03 - TEORIA - PRONOME - EMPREGO, FORMA DE TRATMENTO E COLOCAÇÃO - ...
MÓDULO 03 - TEORIA -  PRONOME  - EMPREGO, FORMA DE TRATMENTO  E COLOCAÇÃO  - ...MÓDULO 03 - TEORIA -  PRONOME  - EMPREGO, FORMA DE TRATMENTO  E COLOCAÇÃO  - ...
MÓDULO 03 - TEORIA - PRONOME - EMPREGO, FORMA DE TRATMENTO E COLOCAÇÃO - ...
 

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 Guloso
Delacyr 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áxima
Gabriel Albuquerque
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - Recursividade
Delacyr Ferreira
 
Algoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoAlgoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco Mínimo
Gabriel 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-Ford
Gabriel Albuquerque
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
Leonardo 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 Grafos
Delacyr Ferreira
 
Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Apresentacao mochila - parte 1
Apresentacao mochila - parte 1
Bianca 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ícil
Guilherme 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ências
Delacyr 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 tempo
Delacyr 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-Warshall
Johnnatan Messias
 
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-WarshallAlgoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
Joao 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-Completos
Delacyr 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 NP
Delacyr Ferreira
 
3 0 cap 003
3 0 cap 0033 0 cap 003
3 0 cap 003
luisadr
 
Algoritmo Guloso
Algoritmo GulosoAlgoritmo Guloso
Algoritmo Guloso
Vinicius Marangoni
 
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 Operacional
msleite100
 

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

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]
Grupo de Geofísica Computacional, UNICAMP
 
Prog Din08
Prog Din08Prog Din08
Prog Din08
Joel Carvalho
 
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
Aline Guedes
 
Resolvida 2.1 pagina 5
Resolvida 2.1 pagina 5Resolvida 2.1 pagina 5
Resolvida 2.1 pagina 5
Cristiano Vieira
 
Polinomios e monomios.ppt
Polinomios e monomios.pptPolinomios e monomios.ppt
Polinomios e monomios.ppt
andrade333
 
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
Vania Leitao
 
Mat equacoes do 1 grau 003
Mat equacoes do 1 grau  003Mat equacoes do 1 grau  003
Mat equacoes do 1 grau 003
trigono_metria
 
Fin a01
Fin a01Fin a01
Fin a01
Angelo Yasui
 
Trabalho de mat.pptx
Trabalho de mat.pptxTrabalho de mat.pptx
Trabalho de mat.pptx
jonaldinhogaucho08
 
Ft oper mono_poli
Ft oper mono_poliFt oper mono_poli
Ft oper mono_poli
Alexandre Freitas
 
Apostila nivelamento cal
Apostila nivelamento calApostila nivelamento cal
Apostila nivelamento cal
André Piazza
 
Teorema Chinês Dos Restos
Teorema Chinês Dos RestosTeorema Chinês Dos Restos
Teorema Chinês Dos Restos
Khayla Elias dos Santos
 
Mat equações
Mat equaçõesMat equações
Mat equações
zeramento contabil
 
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
Marcelo Auler
 
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
Clarice Leclaire
 
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
Aulas 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ébricas
Beatriz Góes
 
Aula3 operaçoes mon_polinom1
Aula3 operaçoes mon_polinom1Aula3 operaçoes mon_polinom1
Aula3 operaçoes mon_polinom1
Marcia 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
 
Equacoes grau
Equacoes  grauEquacoes  grau
Equacoes grau
Thaynan Lima
 

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.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
 
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
 
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

Aula 1 do livro de Ciências do aluno - sons
Aula 1 do livro de Ciências do aluno - sonsAula 1 do livro de Ciências do aluno - sons
Aula 1 do livro de Ciências do aluno - sons
Érika Rufo
 
Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
DECIOMAURINARAMOS
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
Marlene Cunhada
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
TomasSousa7
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
eaiprofpolly
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
edivirgesribeiro1
 
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Centro Jacques Delors
 
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptxSlides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
LuizHenriquedeAlmeid6
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
soaresdesouzaamanda8
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
MessiasMarianoG
 
Rimas, Luís Vaz de Camões. pptx
Rimas, Luís Vaz de Camões.          pptxRimas, Luís Vaz de Camões.          pptx
Rimas, Luís Vaz de Camões. pptx
TomasSousa7
 
Funções e Progressões - Livro completo prisma
Funções e Progressões - Livro completo prismaFunções e Progressões - Livro completo prisma
Funções e Progressões - Livro completo prisma
djincognito
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
MateusTavares54
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
LILIANPRESTESSCUDELE
 
347018542-PAULINA-CHIZIANE-Balada-de-Amor-ao-Vento-pdf.pdf
347018542-PAULINA-CHIZIANE-Balada-de-Amor-ao-Vento-pdf.pdf347018542-PAULINA-CHIZIANE-Balada-de-Amor-ao-Vento-pdf.pdf
347018542-PAULINA-CHIZIANE-Balada-de-Amor-ao-Vento-pdf.pdf
AntnioManuelAgdoma
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
Manuais Formação
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
cmeioctaciliabetesch
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AntonioVieira539017
 
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Biblioteca UCS
 

Último (20)

Aula 1 do livro de Ciências do aluno - sons
Aula 1 do livro de Ciências do aluno - sonsAula 1 do livro de Ciências do aluno - sons
Aula 1 do livro de Ciências do aluno - sons
 
Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
 
GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
 
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)
 
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptxSlides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptx
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
 
Rimas, Luís Vaz de Camões. pptx
Rimas, Luís Vaz de Camões.          pptxRimas, Luís Vaz de Camões.          pptx
Rimas, Luís Vaz de Camões. pptx
 
Funções e Progressões - Livro completo prisma
Funções e Progressões - Livro completo prismaFunções e Progressões - Livro completo prisma
Funções e Progressões - Livro completo prisma
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
 
347018542-PAULINA-CHIZIANE-Balada-de-Amor-ao-Vento-pdf.pdf
347018542-PAULINA-CHIZIANE-Balada-de-Amor-ao-Vento-pdf.pdf347018542-PAULINA-CHIZIANE-Balada-de-Amor-ao-Vento-pdf.pdf
347018542-PAULINA-CHIZIANE-Balada-de-Amor-ao-Vento-pdf.pdf
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
 
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
 

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