SlideShare ist ein Scribd-Unternehmen logo
1 von 116
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Git e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilGit e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilTiago Antônio da Silva
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizesArmando Daniel
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - JavaArthur Emanuel
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
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 assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
[Curso Java Basico - Orientacao a Objetos] Aula 35: RecursividadeLoiane Groner
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributosLoiane Groner
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoLeinylson Fontinele
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java Evandro Júnior
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebDaniel Brandão
 

Was ist angesagt? (20)

Git e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilGit e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código Fácil
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizes
 
Algoritmos de busca
Algoritmos de buscaAlgoritmos de busca
Algoritmos de busca
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
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
 
Analise Algoritmos
Analise AlgoritmosAnalise Algoritmos
Analise Algoritmos
 
Sd06 (si) exclusão mútua
Sd06 (si)   exclusão mútuaSd06 (si)   exclusão mútua
Sd06 (si) exclusão mútua
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e Especialização
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
 

Andere mochten auch

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 - 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
 
Mat 140 questoes resolvidas vol i
Mat 140 questoes resolvidas vol iMat 140 questoes resolvidas vol i
Mat 140 questoes resolvidas vol itrigono_metrico
 

Andere mochten auch (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 - 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
 
Mat 140 questoes resolvidas vol i
Mat 140 questoes resolvidas vol iMat 140 questoes resolvidas vol i
Mat 140 questoes resolvidas vol i
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioDomingasMariaRomao
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfHELENO FAVACHO
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTailsonSantos1
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptPedro Luis Moraes
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...Francisco Márcio Bezerra Oliveira
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxLeonardoGabriel65
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfamarianegodoi
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxAntonioVieira539017
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosLucianoPrado15
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfHELENO FAVACHO
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAssuser2ad38b
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...HELENO FAVACHO
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxFlviaGomes64
 

Kürzlich hochgeladen (20)

Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medio
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.ppt
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 

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