análise de algoritmos recursividade unisul ciência da computação prof. maria inés castiñeira,...
TRANSCRIPT
Análise de algoritmos
RECURSIVIDADE
UNISUL
Ciência da Computação
Prof. Maria Inés Castiñeira, Dra.
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
Recursividade Cálculo de fatorialx! = se x <=0 1 senão x * (x-1)!
Implementação não recursivaint fatorial (int N){ int result = 1;
for (i=1; i<=N; i++) result = result * i;
return (result);}
4
Recursividade Implementação recursiva
int fatorial (int N){
if (N<= 1)return(1);
elsereturn( N * fatorial(N-1));
}
5
Recursividade X= fatorial (4)
return( 4* fatorial(3) ) return( 3* fatorial(2) ) return( 2* fatorial(1) ) return( 1 )
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
Análise de RecursividadeT(n)
tempo de processar o algoritmo para entrada n em função do número de passos ou operações dominantes
FatorialT(n) = 1, se n = 0
= T(n-1) + 1, se n > 0
mas quanto é T(n-1) ?
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) + 3..... forma geral, T(n) = T(n-k) + k, 1 k n fazendo n = k, reduzimos a T(n) = n
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
T(n) - Fatorial= (T(n-1)) + 1= (T(n-2) + 1) + 1= T(n-2) + 2= (T(n-3) + 1) + 2= T(n-3) + 3..... forma geral, T(n) = T(n-k) + k, 1 k n fazendo n = k, reduzimos a T(n) = n Fatorial = O(n)
11
Relação de recorrênciaComo 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
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
Derivando relação de recorrência
MergeSort(A, n)if n ≤ 1return Areturn merge(MergeSort(A1, n/2), MergeSort(A2, n/2))
Relação de Recorrência do MergeSortT(1) = cT(n) = 2.T(n/2) + d.n
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 otempo 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 mesmotamanho 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
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 desubstituiçõ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
Resolvendo a relação de recorrência: Desdobramento
Exemplo: divisão da pizza
17
Divisão da pizza
18
Divisão da pizzaCorte – Fatia
1 – 2
2 – 4
3 – 7
4 – 11
5 – 16
6 – 22
7 – 29
.......
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
Divisão da pizza• Solução para o problema da pizza:– T(1) = 2– T(n) = T(n – 1) + n , para n≥2
• Desdobrando a relação de recorrência:T(n) = T(n-1) + nT(n) = T(n-2) + (n-1) + nT(n) = T(n-3) + (n-2) + (n-1) + n...T(n) = T(n-i) + (n-i+1) + ... + (n-1) + n
20
Divisão da pizza– T(1) = 2– T(n) = T(n – 1) + n , para n≥2
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) = 2 + 2 + 3 + ... + (n – 1) + n• T(n) = 2 + 2 + 3 + ... + (n – 1) + n• T(n) = 1+1 + 2 + 3 + ... + (n – 1) + n• T(n) = 1+1 + 2 + 3 + ... + (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
Resolvendo relação de recorrência
• Resolvendo uma relação de recorrência, determina-se otempo de execução do algoritmo recursivo correspondente.
• Como resolver:1- Método do desdobramento (pizza)
2- Método master
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 ∈ ba - ε), para algum ε > 0, temos que:• T(n) Θ(n^log ∈ ba ).
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
Exemplo: mergesort
MergeSort(A, n)if n ≤ 1return Areturn merge(MergeSort(A1, n/2), MergeSort(A2, n/2))
Relação de Recorrência do MergeSortT(1) = cT(n) = 2.T(n/2) + d.n
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
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).
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/