Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos...

55
Programação Dinâmica Prof. Anderson Almeida Ferreira

Transcript of Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos...

Page 1: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Programação Dinâmica

Prof. Anderson Almeida Ferreira

Page 2: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Programação Dinâmica

• 1950, Bellman • Evitar recálculos dos subproblemas em comum

– Menor para maior (bottom-up) – Tabelas ou memorização

• É uma técnica de programação • Foi desenvolvida na época em que

“programação” significava “método tabular”. • Usada para problemas de otimização

– Encontre a solução a com o valor ótimo. – Minimizar ou maximizar

Page 3: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Programação Dinâmica

• Quatro passos do método

– Caracterize a estrutura de uma solução ótima.

– Recursivamente defina o valor de uma solução ótima.

– Compute o valor de uma solução ótima de maneira bottom-up.

– Construa a solução ótima por meio da informação computada.

Page 4: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Exemplo – Linha de montagem

Page 5: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Exemplo

• Montadora de veículos com duas linhas de montagem – Cada linha tem n estações: S1,1, . . . , S1,n and S2,1, . . . ,

S2,n. – Estações correspondentes S1,j e S2,j possuem a mesma

função, mas podem ter tempo de execução diferentes, a1,j e a2,j.

– Tempos de entrada: e1 e e2. – Tempos de saída: x1 e x2. – Para chegar a uma estação:

• Ficando na mesma linha – nenhum custo • Transferido de outra linha – depois da estação Si,j é ti,j.

Page 6: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Exemplo

• Problema

– Que estações das linhas 1 e 2 devem ser escolhidas para ter uma fabricação mais rápida?

– Tentar todas as possibilidades?

• Cada candidato pode ser completamente especificado por quais estações da linha 1 são incluídas.

• Linha 1 tem n estações

• 2n subconjuntos

Page 7: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Exemplo

• Estrutura de uma solução ótima

–Pense em uma maneira rápida da entrada até a estação S1,j.

• Se j=1, fácil

• Se j>= 2, há duas opções

– De S1,j-1

– De S2,j-1

Page 8: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Exemplo

• Observação chave: Nós devemos ter um caminho rápido da entrada até Si,j-1 nesta solução.

• Se uma maneira rápida de chegar é por meio de S1,j-1, nós podemos usá-la para chegar a S1,j.

• Se uma maneira rápida de chegar é por meio de S2,j-1, nós podemos usá-la para chegar a S1,j.

Page 9: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Exemplo

• Geralmente: Uma solução ótima para um problema (maneira rápida de chegar a S1,j) contém com ele uma solução ótima para os subproblemas (maneiras rápidas de chegar a S1,j-1 ou S2,j-1).

• Isto é uma subestrutura ótima.

Page 10: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Subestrutura ótima

• Use subestruturas ótimas para construir soluções ótimas para problemas, por meio de soluções ótimas de subproblemas.

• Maneira rápida de chegar a Si,j:

– S1,j-1, então vá diretamente para S1,j, ou

– S2,j-1, transfira da linha 2 para a 1 e então vá para S1,j

Page 11: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Solução Recursiva

• Seja fi [ j ] = o tempo mais rápido até a estação Si, j , i = 1, 2 and j = 1, . . . , n.

• Meta: f∗ = min( f1[n] + x1, f2[n] + x2)

f1[1] = e1 + a1,1

f2[1] = e2 + a2,1

For j = 2, . . . , n:

f1[ j ] = min( f1[ j − 1] + a1, j , f2[ j − 1] + t2, j−1 + a1, j )

f2[ j ] = min( f2[ j − 1] + a2, j , f1[ j − 1] + t1, j−1 + a2, j )

Page 12: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

• f* dá o valor da solução ótima.

• E se quisermos construir a solução ótima?

– li [ j ] = número da linha (1 ou 2) cuja estação j − 1 é usada para chegar a Si, j .

• Sli [ j ], j−1 precede Si, j .

• l∗ = número da linha da estação n usada.

Page 13: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

FASTEST-WAY(a, t, e, x, n) f1[1] ← e1 + a1,1 f2[1] ← e2 + a2,1 for j ← 2 to n do if f1[ j − 1] + a1, j ≤ f2[ j − 1] + t2, j−1 + a1, j

then f1[ j ]← f1[ j − 1] + a1, j

l1[ j ] ← 1 else f1[ j ]← f2[ j − 1] + t2, j−1 + a1, j

l1[ j ] ← 2 if f2[ j − 1] + a2, j ≤ f1[ j − 1] + t1, j−1 + a2, j

then f2[ j ]← f2[ j − 1] + a2, j

l2[ j ] ← 2 else f2[ j ]← f1[ j − 1] + t1, j−1 + a2, j

l2[ j ] ← 1 if f1[n] + x1 ≤ f2[n] + x2

then f∗ = f1[n] + x1

l* = 1 else f∗ = f2[n] + x2

l∗ = 2

Page 14: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

PRINT-STATIONS(l, n)

i ←l∗

print “linha” i “, estação” n

for j ← n downto 2

do i ←li [ j ]

print “linha” i “, estação” j − 1

Construindo a solução ótima

Page 15: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização
Page 16: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

BCC241/2011-2

Fibonacci: definindo recorrência

• Grafo de recorrência

– Subproblemas – nós

– Dependência – arestas

16

Page 17: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

BCC241/2011-2

Fibonacci: definindo recursão

• Grafo de recorrência

– Subproblemas – nós

– Dependência – arestas

• Memoização

17

Page 18: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

BCC241/2011-2

Fibonacci: definindo recursão

• Grafo de recorrência

– Subproblemas – nós

– Dependência – arestas

• Memoização

18

Page 19: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

BCC241/2011-2

Fibonacci: usando tabela

• Grafo de recorrência

– Subproblemas – nós

– Dependência – arestas

• Memoização

19

Page 20: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

BCC241/2011-2

Fibonacci: usando tabela

• Grafo de recorrência

– Subproblemas – nós

– Dependência – arestas

• Memoização

• Tabela

– Ordenação parcial

20

Page 21: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

BCC241/2011-2

Fibonacci: economizando espaço

• Grafo de recorrência – Subproblemas – nós – Dependência – arestas

• Memoização

• Tabela

– Ordenação parcial – Economizando memória

21

Page 22: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Problemas alvo para Programação Dinâmica (PD)

• Problema pode ser dividido em subproblemas menores.

• Sub-estrutura ótima (princípio da otimalidade)

– Solução ótima do problema inclui soluções ótimas dos subproblemas.

• Subproblemas são sobrepostos.

– Número “pequeno” de subproblemas distintos.

Page 23: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Linearização de Grafos Direcionados Acíclicos (DAGs)

Algoritmo de Linearização: Percorrer vértices na ordem de grau de entrada. Diminuir das arestas a cada passo.

Page 24: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Recorrência a partir de DAGs

Page 25: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Algoritmo de menor caminho em DAGs

Subproblemas Menores

Subestrutura Ótima

Page 26: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Subsequência Crescente Mais Longa

• Problema: Dada uma sequência de números naturais, definir qual a subsequência crescente com mais elementos.

Page 27: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

MSC: Recorrência e DAG implícito

Page 28: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

SCML: Recorrência

Etapa1:

Maior caminho em DAG

)}({max1

jLSCMLnj

Page 29: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 2: Algoritmo Recursivo

Page 30: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 3: Algoritmo Iterativo (Tabela)

• Vetor L, preenchido da menor posição para maior.

Page 31: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 3: Complexidade

Page 32: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 4: Construindo solução

Page 33: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Distância de Edição

• Transformar uma sequência em outra ao menor custo.

– Casamento, substituição, inserção, remoção.

SITUADO

ESTUDO-

-SITUADO

ES-TU-DO

Page 34: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Edição: Subproblemas

• Problema: Alinhar duas sequências de caracteres

Page 35: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 1: Equação de Recorrência

• Problema: Alinhar duas sequências de caracteres

• Subproblema: alinhamento de prefixos

• Composição: inserir, remover, casar

Page 36: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Distância de Edição - DAG

Page 37: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 2: Algoritmo Recursivo

Page 38: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 2: Algoritmo Recursivo

Page 39: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 3: Algoritmo Iterativo

39

Page 40: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 3: Complexidade

•Θ(mn) de tempo e espaço

Page 41: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 3: Como economizar espaço?

•Θ(mn) de tempo e Θ(m) espaço

Page 42: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Distância de Edição - Exemplo P O L I N O M I A L

E

X

P

O

N

E

N

C

I

A

L

Page 43: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 4: Solução I – armazenar

Page 44: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 4: Solução I – calcular

Page 45: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Problema da mochila

• Ladrão está com uma mochila que suporta no máximo 10 quilos e quer o maior lucro possível

Page 46: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Problema da mochila

• Ladrão está com uma mochila que suporta no máximo 10 quilos e quer o maior lucro possível

Page 47: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 1: Equação de Recorrência

),( jwK

Page 48: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 1: Equação de Recorrência

),( jwK

Page 49: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

j

j 1

wjww

jj vjwwKjwKjwK 1,,1,max,

Page 50: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 2: Algoritmo Recursivo

Page 51: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 3: Algoritmo Iterativo

Page 52: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 3: Complexidade

BCC241/2011-2 52

•Pseudo-polinomial (NP-completo) •Somente para valores inteiros •Θ(Wn)

Page 53: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização
Page 54: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Etapa 4: Solução

Page 55: Programação Dinâmica - DECOM · Programação Dinâmica •1950, Bellman •Evitar recálculos dos subproblemas em comum –Menor para maior (bottom-up) –Tabelas ou memorização

Considerações Finais

• Diferença entre PD e D&C

– Sobreposição de problemas

• Definição da Equação de Recorrência

– Grafo induzido

– Automatização dos passos

• Memoização