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

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

Embed Size (px)

Citation preview

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

Análise de algoritmos

RECURSIVIDADE

UNISUL

Ciência da Computação

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

Page 2: 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

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

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);}

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

4

Recursividade Implementação recursiva

int fatorial (int N){

if (N<= 1)return(1);

elsereturn( N * fatorial(N-1));

}

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

5

Recursividade X= fatorial (4)

return( 4* fatorial(3) ) return( 3* fatorial(2) ) return( 2* fatorial(1) ) return( 1 )

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

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

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

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

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

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

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

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

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

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)

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

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

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

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.

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

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

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

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

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

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.

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

16

Resolvendo a relação de recorrência: Desdobramento

Exemplo: divisão da pizza

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

17

Divisão da pizza

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

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

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

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

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

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)

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

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

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

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

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

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

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

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)

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

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

Page 26: Análise de algoritmos RECURSIVIDADE 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/