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

Preview:

Citation preview

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/

Recommended