Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


11 - programação - dinamica, Notas de estudo de Engenharia Telemática

11 ATAL - Análise e Técnicas de Algoritmos UFCG

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 27/11/2010

samuel-santos-22
samuel-santos-22 🇧🇷

4.6

(41)

262 documentos

1 / 89

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Análise e Técnicas de Algoritmos
Tiago Massoni
Jorge Figueiredo
Projeto de Algoritmos
Programação Dinâmica
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59

Pré-visualização parcial do texto

Baixe 11 - programação - dinamica e outras Notas de estudo em PDF para Engenharia Telemática, somente na Docsity!

Análise e Técnicas de Algoritmos

Tiago Massoni Jorge Figueiredo

Projeto de Algoritmos

Programação Dinâmica

Programação dinâmica

• Quando “programação” significava

método tabular

– também chamado planejamento dinâmico

• não é programação de computadores

• usado em problemas de otimização

– Achar solução com valor ótimo

– Minimização ou maximização

Sobre a Solução Apresentada

• Análise através da resolução de uma

relação de recorrência

– T(n) = T(n – 1) + T(n – 2) + c

– O(

n

Qual o motivo da ineficiência?

Solução alternativa para

Fibonacci

  • Eliminar as chamadas recursivas
    • Utilizar um vetor para armazenar dados calculados
  • Estratégia bottom-up
    • Armazena soluções para subproblemas
    • aos poucos, vai definindo o resultado do problema a partir dos resultados dos subproblemas armazenados FibPD(n) f[0] 0 f[1] 1 for i 2 to n do f[i] f[i – 1] + f[i - 2] return f[n] Exemplo: n=

Análise

• É fácil identificar que FibPD é O(n)

• Abordagem utilizada

– Encontrar função recursiva apropriada

– memorização para armazenar resultados de

subproblemas

– Determinar uma versão bottom-up, iterativa

FibPD é PROGRAMAÇÃO DINÂMICA!

Programação Dinâmica

• Aplicado quando recursão produz

repetição dos mesmos subproblemas

• Proposta: reusar computação

• PD = D-C + tabela

• usar quando ocorre a resolução de um

mesmo subproblema (cálculo) muitas

vezes

– Então, melhor armazenar as soluções

Exercício PD

Número de Combinações (coeficiente binomial) Entrada: Dois números inteiros n e k, em que n indica o número de elementos dos quais tenho que escolher k. Saída: O número possível de combinações de k itens.

• Para escolher k itens de n, podemos

proceder de duas formas:

  • Escolher o primeiro item. Depois escolher k-1 itens dos n-1 itens restantes
  • Não escolher o primeiro item. Escolher, então, k itens dos n-1 itens restantes

Análise do Algoritmo D-C

T(n) = 2.T(n-1) + c T(n) = O( n )

• Cálculos repetidos

  • Ex: C(5,3) por C(4,2) e C(4,3), e ambos usam C(3,2)

• Solução: Programação Dinâmica

Exercicio

• fazer o algoritmo PD bottom-up para

calcula C(n,k)

• Dica: tabela é um triângulo de Pascal

n/k 0 1 2 3 … k 0 1 1 1 1 2 1 2 1 3 1 3 3 1 … n C(n-1,k-1) C(n-1,k)

C(n,k)

PD em otimização

Sobreposição de subproblemas

O problema pode ser quebrado em

subproblemas que são reutilizados várias

vezes

Subestrutura ótima

Uma solução ótima pode ser construída a partir

de soluções ótimas para seus subproblemas

solução com subestrutura ótima

Subconjunto máximo em S a partir de

{1...n}

se X é máximo e contém um elemento n

então X−{n} é um elemento máximo de S/n

troco agora em PD

6c 4c 1c

total: US$ 0,

ótima!

greedy

subestrutura ótima

para um valor N do troco desejado

  • se existe um moeda de N cents, então uma moeda é o mínimo
  • senão, para um valor x < N e moeda i, considerar dois subproblemas - mínimo número de moedas sem incluir moeda i - mínimo número de moedas incluindo a moeda i
  • Escolher o menor resultado!