apresentacao(t3)

22
Programação Dinâmica Princípios e Aplicações por Jéssica Leleanne e Tiago Pimentel

Upload: tiago-pimentel

Post on 20-Jan-2016

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: apresentacao(T3)

Programação DinâmicaPrincípios e Aplicações

porJéssica Leleanne e Tiago Pimentel

Page 2: apresentacao(T3)

O que é Programação Dinâmica (PD)?

Embora seja definida como programação, Programação Dinâmica se refere a um método tabular, não a o processo de

escrever um código.

Tem como objetivo resolver um problema grande, dividindo-o em subproblemas

menores.

Page 3: apresentacao(T3)

Programação DinâmicaX

Divisão e Conquista

Divisão e conquista particiona o problema em subproblemas independentes, resolve-os, e então combinam as soluções para resolver o problema

Original

Em contraste, PD é aplicável quando os subproblemas não são independentes, ou seja,

quando subproblemas compartilham sub-subproblemas.

Page 4: apresentacao(T3)

Como funciona?

PD visa evitar o recálculo desnecessário da solução dos subproblemas.

Sendo assim, define-se uma forma de armazenar essas soluções a fim de que,

sendo novamente necessária, não necessite de recalculá-la.

Page 5: apresentacao(T3)

Desenvolvendo um algoritmo de PD

A elaboração de um algoritmo pode ser desmembrado em seqüência de 4 etapas:

1. Caracterizar a estrutura de uma solução ótima;2. Definir recursivamente o valor de uma solução

ótima;3. Calcular o valor de uma solução ótima em um

processo bottom-up;4. Construir uma solução ótima a partir das

informações calculadas.

Page 6: apresentacao(T3)

Aplicabilidade

Pode ser utilizada em problemas onde há:

*Subestrutura Ótima: as soluções ótimas do problema incluem soluções ótimas de subproblemas

*Sobreposição de Subproblemas: O cálculo da solução através de recursão no recálculo de subproblemas.

Page 7: apresentacao(T3)

Vantagens e Desvantagens

Vantagens:• Pode ser utilizada num grande número de

problemas de otimização discreta. • Não necessita de muita precisão

numérica. • Útil para aplicar em problemas que

exigem teste de todas as possibilidades. Desvantagens

• Necessita de grande espaço de memória • A complexidade espacial pode ser

exponencial

Page 8: apresentacao(T3)

Exemplo 1Problema: Corte de Barras

O problema consiste em como cortar barras de aço em pedaços a fim de

maximizar, lucro.Entrada: um comprimento n e a tabela de preços p(i), para i = 1, 2, 3, . . ., n

Saída: o lucro máximo, obtido para barras cujos comprimentos somam n.

Page 9: apresentacao(T3)

Exemplo 1Problema: Corte de Barras

Existem 2n-1 maneiras diferentes de cortar a barra, ou seja, um problema com

complexidade exponencial.

Dado uma barra de comprimento n=4, teremos 8 maneiras diferentes de cortar a

barra.Aparentemente pequeno, mas se

tomarmos um n muito grande, a solução pode se tornar inviável.

Page 10: apresentacao(T3)

Exemplo 1Problema: Corte de Barras

Uma forma de decompor o problema:

•Cada solução ótima tem um corte mais à esquerda.•Há apenas a necessidade de se dividir apenas o pedaço restante.•Deixa apenas um subproblema de resolver, ao invés de dois subproblemas.

Page 11: apresentacao(T3)

Exemplo 1Problema: Corte de Barras

Implementação para obter o lucro máximo:

Page 12: apresentacao(T3)

Exemplo 1Problema: Corte de Barras

Implementação para obter o lucro máximo:

Inviável, pois CUT-ROD chama a si mesmo varias

vezes, até mesmo em subproblemas já resolvidos.

Page 13: apresentacao(T3)

Exemplo 1Problema: Corte de Barras

Tenta resolver cada subproblema apenas uma vez;

Guarda a solução de um subproblema numa tabela e à consulta sempre que rever o problema.

Tenta-se transformar uma solução de tempo Exponencial em uma de tempo

Polinomial

Page 14: apresentacao(T3)

Exemplo 2Problema: Mult. De Cadeias de

MatrizesCalcular o número mínimo de operações de multiplicação necessários para computar M.

M = M1 * M2 * M3 * ..... * Mn

A solução do algoritmo padrão de multiplicação é ineficiente, por ser um algoritmo recursivo, ocorre o recálculo de um mesmo M[i,j]

Page 15: apresentacao(T3)

Exemplo 2Problema: Mult. De Cadeias de

MatrizesUsa-se a PD, pois elimina completamente o uso de recursão

O algoritmo de PD para o problema torna-se trivial se computarmos, para valores crescente de u, o valor ótimo de todas as subcadeia de tamanho u.

Page 16: apresentacao(T3)

Exemplo 2Problema: Mult. De Cadeias de

MatrizesAlgoritmo de PD:

Para i=1 até n faça m[i,i]:=oPara u=1 até n-1 faça

para i=1 até n-u façaj:=i+u;m[i,j]:=infpara k=1 até j-1 faça

q:=m[i,k]+m[k+1,j}+b[i-1]*b[k]*b[j]

se q<m[i,j] entãom[i,j]:=q; s[i,j]:=k

Retorne(m,s)

Page 17: apresentacao(T3)

Exemplo 3Problema: Mochila, ou Container

Dada uma mochila de capacidade W e um conjunto de n itens, cada um com

tamanho w e valor c.

O objetivo é maximizar o valor c levado na mochila, sem ultrapassar a capacidade W.

Existem 2n possíveis subconjuntos de itens.

Page 18: apresentacao(T3)

Exemplo 3Problema: Mochila, ou Container

A complexidade do algoritmos recursivo para este problema no pior caso é dada

pela recorrência:

Há sobreposição de subproblemas: o recálculo de subproblemas pode ser

evitados.

Page 19: apresentacao(T3)

Algoritmo de PD:

para d=0 até W faça z[0,d]:=0para k=1 até n faça z[k,0]:=0para k=1 até n faça

para d=1 até W façaz[k,d]:=z[k-1,d]se wk<=d e ck+z[k-1,d-wk]>z[k,d]

entãoz[k,d]:= ck + z[k-1,d-wk]

Retorne(z[n,W])

Exemplo 3Problema: Mochila, ou Container

Page 20: apresentacao(T3)

Exemplo: c={10,7,25,24}, w={2,1,6,5} e W = 7

Exemplo 3Problema: Mochila, ou Container

k\d 0 1 2 3 4 5 6 7

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

Page 21: apresentacao(T3)

Problemas da PD

Dois problemas podem surgir na técnica de PD:

• Nem sempre pode ser possível combinar as soluções de subproblemas menores para formar a solução de um problema maior.

•O número de pequenos subproblemas a serem resolvidos pode ser inaceitavelmente grande.

Page 22: apresentacao(T3)

Referências:

• Cormen, Thomas e outros – Algoritmos, teoria e prática;

• Análise e Implementação de Algoritmos, aula 18 – UFRJ

• André Vignatti (DINF - UFPR) – Prog. Dinâmica: Corte de Barrras

• Fernando Nogueira, Programação Dinâmica

• Orlando Júnior – Programação Dinâmica

• Revista Científica da Faculdade Lourenço Filho - v.8, n.1, 2011