Análise de algoritmos Programação Dinámica UNISUL Ciência da Computação Prof. Maria Inés...

23
Análise de algoritmos Programação Dinámica UNISUL Ciência da Computação Prof. Maria Inés

Transcript of Análise de algoritmos Programação Dinámica UNISUL Ciência da Computação Prof. Maria Inés...

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

Análise de algoritmos

Programação Dinámica

UNISUL

Ciência da Computação

Prof. Maria Inés Castiñeira, Dra.

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

2

Exemplo: Fibonacci

Números de FibonacciEntrada: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

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

3

Fibonacci recursivo Solução clásica recursiva:

Fib(n)if n ≤1 then return n else return Fib(n – 1) + Fib(n - 2)

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

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?

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

5

Solução para Fibonacci

Árvore espaço das soluçoes para Fibonacci

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

6

Solução ineficiente Cálculos repetidos!

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

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] ←nreturn f[n] ← Fib1(n – 1) + Fib1(n - 2)

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

8

Fibonacci f1

F3F4

F5

% % % % % %

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

9

Fibonacci f1

F3F4

F5

% % % % % %

F2F3

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

10

Fibonacci f1

F3F4

F5

% % % % % %

F2F3

F1F2

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

11

Fibonacci f1

F3F4

F5

% % % % % %

F2F3

F1F2

F0F1

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

12

Fibonacci f1

F3F4

F5

0 1 % % % %

F2F3

F1F2

F0F1

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

13

Fibonacci f1

F3F4

F5

0 1 1 % % %

F2F3

F1F2

F0F1

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

14

Fibonacci f1

F3F4

F5

0 1 1 % % %

F2F3

F1F2

F0F1

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

15

Fibonacci f1

F3F4

F5

0 1 1 2 % %

F2F3

F1F2

F0F1

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

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]

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

17

Comparando soluçõesPodemos 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

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

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

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

Programação DinámicaQuando 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.

.

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

Programação DinámicaNesse 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 .

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

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.

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

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).

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

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 www.dsc.ufcg.edu.br/~abrantes/