A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação Dinámica Análise de algoritmos UNISUL

Apresentações semelhantes


Apresentação em tema: "Programação Dinámica Análise de algoritmos UNISUL"— Transcrição da apresentação:

1 Programação Dinámica Análise de algoritmos UNISUL
Ciência da Computação Prof. Maria Inés Castiñeira, Dra.

2 Exemplo: Fibonacci Números de Fibonacci Entrada:Um número inteiro n.
Saída:O número de Fibonacci Fn, definido da seguinte forma: F0 = 0, F1= 1, Fn= Fn-1+ Fn-2 para n ≥2 232

3 Fibonacci recursivo Solução clásica recursiva: Fib(n)
if n ≤1 then return n else return Fib(n – 1) + Fib(n - 2) 235

4 Análise de Fibonacci • Análise através da resolução de uma relação de recorrência: – T(n) = T(n – 1) + T(n – 2) + c – O(2^n) • Solução ineficiente. Qual o motivo da ineficiência? 236

5 Solução para Fibonacci
Árvore espaço das soluçoes para Fibonacci 237

6 Solução ineficiente Cálculos repetidos!

7 Solução Fibonacci alternativa
• Solução alternativa: – Utilizar um array f[0, ..., n] para guardar os valores calculados. – Inicialmente, f contém apenas símbolos especiais ∞. Fib1(n) if f[n] ≠ ∞ then return f[n] if n ≤ 1 then return f[n] ←n return f[n] ← Fib1(n – 1) + Fib1(n - 2)

8 Fibonacci f1 F5 F3 F4 % % % % % %

9 Fibonacci f1 F5 F4 F3 F3 F2 % % % % % %

10 Fibonacci f1 F5 F4 F3 F3 F2 F2 F1 % % % % % %

11 Fibonacci f1 F5 F4 F3 F3 F2 F2 F1 F1 F0 % % % % % %

12 Fibonacci f1 F5 F4 F3 F3 F2 F2 F1 F1 F0 1 % % % %

13 Fibonacci f1 F5 F4 F3 F3 F2 F1 F2 F1 F0 1 1 % % %

14 Fibonacci f1 F5 F4 F3 F3 F2 F1 F2 F1 F0 1 1 % % %

15 Fibonacci f1 F5 F4 F3 F3 F2 F1 F2 F1 F0 1 1 2 % %

16 Fibonacci f2 Uma outra solução alternativa:
– Eliminar as chamadas recursivas. – Utilizar o array para armazenar dados calculados. – Estratégia bottom-up. Fib2(n) f[0] ←0 f[1] ←1 For i ←2 to n do f[i] ←f[i – 1] + f[i - 2] return f[n]

17 Comparando soluções Podemos identificar que Fib2 é O(n). Fib1 é também O(n). Ainda usa recursão. Abordagem utilizada: – Encontrar função recursiva apropriada. – Adicionar memorização para armazenar resultados de subproblemas. – Determinar uma versão bottom-up, iterativa

18 Programação dinâmica Fib2 é PROGRAMAÇÃO DINÂMICA!!!!!
Programação dinâmica = resolver bottom-up, usar estrutura auxiliar (tabela ou array) para guardar valores intermediários

19 Programação Dinámica Quando a soma dos tamanhos dos subproblemas é O(n) então é provável que o algoritmo recursivo tenha complexidade polinomial. Quando a divisão de um problema de tamanho n resulta em n subproblemas de tamanho n-1 então é provável que o algoritmo recursivo tenha complexidade exponencial. .

20 Programação Dinámica Nesse caso, a técnica de programação dinâmica pode levar a um algoritmo mais eficiente. A programação dinâmica calcula a solução para todos os subproblemas, partindo dos subproblemas menores para os maiores, armazenando os resultados em uma tabela. A vantagem é que uma vez que um subproblema é resolvido , a resposta é armazenada em uma tabela e nunca mais é recalculado .

21 Programação dinâmica Aplicado quando recursão produz repetição dos mesmos subproblemas. Proposta: reusar computação. PD = DC + tabela. Versão bottom-up é mais compacta e fácil de efetuar análise. Estratégia utilizada em problemas de otimização.

22 Quando aplicar Prog. Dinâmica?
Aplicar em problemas que, em princípio, parece requerer muito tempo para ser resolvido (em geral é de ordem exponencial). Principais características: Princípio da Otimalidade (subproblemas ótimos): o valor ótimo global pode ser definido em termos dos valores ótimos dos subproblemas. Overlap de Subproblemas:os subproblemas não são independentes. Existe um overlap entre eles (logo, devem ser construídos bottom-up). 273

23 Bibliografia Cormen, Leiserson e Rivest, ALGORITMOS: teoria e prática. Rio de Janeiro: Campus, 2002. FIGUEREDO, Jorge. Material didático de Técnicas e análise de algoritmos. UFCG. Disponível em


Carregar ppt "Programação Dinámica Análise de algoritmos UNISUL"

Apresentações semelhantes


Anúncios Google