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

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

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

Apresentações semelhantes


Apresentação em tema: "Análise de algoritmos RECURSIVIDADE UNISUL Ciência da Computação Prof. Maria Inés Castiñeira, Dra."— Transcrição da apresentação:

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

2 2 Recursividade um procedimento recursivo é aquele que contém uma ou mais chamadas a si mesmo a todo procedimento recursivo corresponde um não recursivo os programas recursivos são mais concisos aparente relação direta com a prova por indução matemática

3 3 Recursividade Cálculo de fatorial x! = se x <=0 1 senão x * (x-1)! Implementação não recursiva int fatorial (int N) { int result = 1; for (i=1; i<=N; i++) result = result * i; return (result); }

4 4 Recursividade Implementação recursiva int fatorial (int N) { if (N<= 1) return(1); else return( N * fatorial(N-1)); }

5 5 Recursividade X= fatorial (4) return( 4* fatorial(3) ) return( 3* fatorial(2) ) return( 2* fatorial(1) ) return( 1 )

6 6 Análise de Recursividade relação de recorrência – a função é definida em termos dela própria, recursivamente substituição repetida 1) int fatorial (int N) – { – if (N<= 1) – return(1); – else – return( N * fatorial(N-1)); 1) }

7 7 Análise de Recursividade T(n) tempo de processar o algoritmo para entrada n em função do número de passos ou operações dominantes Fatorial T(n) = 1, se n = 0 = T(n-1) + 1, se n > 0 mas quanto é T(n-1) ?

8 8 T(n) - Fatorial = (T(n-1)) + 1 = (T(n-2) + 1) + 1 = T(n-2) + 2 = (T(n-3) + 1) + 2 = T(n-3) forma geral, T(n) = T(n-k) + k, 1 k n fazendo n = k, reduzimos a T(n) = n

9 9 A notação Para procedimentos recursivos pode-se aplicar a seguinte técnica determina-se o número total de chamadas ao procedimento recursivo calcula-se a complexidade de execução de uma única chamada complexidade número de chamadas complexidade de uma chamada

10 10 T(n) - Fatorial = (T(n-1)) + 1 = (T(n-2) + 1) + 1 = T(n-2) + 2 = (T(n-3) + 1) + 2 = T(n-3) forma geral, T(n) = T(n-k) + k, 1 k n fazendo n = k, reduzimos a T(n) = n Fatorial = O(n)

11 11 Relação de recorrência Como proceder para derivar uma relação de recorrência para a análise do tempo de execução de um algoritmo: Determinar qual o tamanho n do problema. Verificar que valor de n é usado como base da recursão. Em geral é um valor único (n=1, por exemplo), mas pode ser valores múltiplos. Vamos considerar esse valor como n0. Determinar T(n0). Pode-se usar uma constante c, mas, em muitos, casos um número específico é necessário

12 12 Relação de recorrência T(n) é definido como uma soma de várias ocorrências de T(m) (chamadas recursivas), mais a soma de outras instruções efetuadas. Em geral, as chamadas recursivas estão relacionadas com subproblemas do mesmo tamanho f(n), definindo um termo a.T(f(n)) na relação de recorrência. A relação de recorrência é definida por: – T(n) = c, se n = n0 – T(n) = a.T(f(n)) + g(n), caso contrário.

13 13 Derivando relação de recorrência MergeSort(A, n) if n 1 return A return merge(MergeSort(A1, n/2), MergeSort(A2, n/2)) Relação de Recorrência do MergeSort T(1) = c T(n) = 2.T(n/2) + d.n

14 14 Resolvendo relação de recorrência Resolver uma relação de recorrência nem sempre é fácil. Resolvendo uma relação de recorrência, determina-se o tempo de execução do algoritmo recursivo correspondente. Relação de recorrência: T(n) = T(n1) + T(n2) T(na) + f(n) É mais fácil quando temos a subproblemas de mesmo tamanho que é uma fração de n (por exemplo, n/b): – T(n) = a.T(n/b) + f(n) Como resolver: – Método do desdobramento – Método master

15 15 Resolvendo a relação de recorrência: Desdobramento Método do desdobramento Consiste em: – Usar (algumas poucas) substituições repetidamente até encontrar um padrão. – Escrever uma fórmula em termos de n e o número de substituições i. – Escolher i de tal forma que todas as referências a T() sejam referências ao caso base. – Resolver a fórmula.

16 16 Resolvendo a relação de recorrência: Desdobramento Exemplo: divisão da pizza

17 17 Divisão da pizza

18 18 Divisão da pizza Corte – Fatia 1 – 2 2 – 4 3 – 7 4 – 11 5 – 16 6 – 22 7 – O n-ésimo corte cria n novos pedaços. Logo o número total de pedaços obtidos com n cortes é chamado P(n): P(1) = 2 P(n) = P(n-1) + n, para n>=2

19 19 Divisão da pizza Solução para o problema da pizza: – T(1) = 2 – T(n) = T(n – 1) + n, para n2 Desdobrando a relação de recorrência: T(n) = T(n-1) + n T(n) = T(n-2) + (n-1) + n T(n) = T(n-3) + (n-2) + (n-1) + n... T(n) = T(n-i) + (n-i+1) (n-1) + n

20 20 Divisão da pizza – T(1) = 2 – T(n) = T(n – 1) + n, para n2 T(n) = T(n-i) + (n-i+1) (n-1) + n Caso base (T(1)) alcançado quando n-i=1, logo i=n-1 T(n) = (n – 1) + n T(n) = (n – 1) + n T(n) = 1+ Somatória (em i de1até n) T(n) = 1 + n.(n+1)/2 Logo, T(n) = O(n^2)

21 21 Resolvendo relação de recorrência Resolvendo uma relação de recorrência, determina-se o tempo de execução do algoritmo recursivo correspondente. Como resolver: 1- Método do desdobramento (pizza) 2- Método master

22 22 Método MASTER: relação de recorrência Teorema que resolve quase todas as recorrências. T(n) da forma a.T(n/b) + f(n), a,b > 1 Casos: 1. Se f(n) O(n^log b a - ε), para algum ε > 0, temos que: T(n) Θ(n^log b a ). 2. Se f(n) O(n^log b a), temos que: T(n) Θ(n^log b a. log n). 3. Se f(n) O(n^log b a + ε), para algum ε > 0 e se a.f(n/b)c.f(n) para algum c > 0 e n suficientemente grande, temos que: T(n) Θ(f(n)).

23 23 Exemplo: mergesort MergeSort(A, n) if n 1 return A return merge(MergeSort(A1, n/2), MergeSort(A2, n/2)) Relação de Recorrência do MergeSort T(1) = c T(n) = 2.T(n/2) + d.n

24 24 Método MASTER: exemplo mergesort T(n) da forma a.T(n/b) + f(n), a,b > 1 MergeSort: – T(n) = 2.T(n/2) + n – a = b = 2 – f(n) = n log b a = 1. Cai no caso 2. Logo, T(n) = Θ(n.log n)

25 25 Método MASTER: exemplo 2 T(n) da forma a.T(n/b) + f(n), a,b > 1 Problema com Relação: T(n) = 9.T(n/3) + n – a = 9, b = 3 – f(n) = n log b a = 2. Se ε = 1, Cai no caso 1. Logo, T(n) = Θ(n^2).

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


Carregar ppt "Análise de algoritmos RECURSIVIDADE UNISUL Ciência da Computação Prof. Maria Inés Castiñeira, Dra."

Apresentações semelhantes


Anúncios Google