E
STRUTURASDED
ADOS EA
LGORITMOSA
NÁLISEDEA
LGORITMOSR
ECURSIVOSAdalberto Cajueiro
Departamento de Sistemas e Computação Universidade Federal de Campina Grande 1
P
ERGUNTAS PERTINENTES Quais são as características de um algoritmo
recursivo?
Como encontrar o número de chamadas
recursivas?
Como saber o tamanho da entrada de cada
chamada?
B
ACKGROUNDM
ATEMÁTICO Somatórios Linearidade
n k k k a a a a 1 2 1 ...
1 1 lim k n k k n k a a 3B
ACKGROUNDM
ATEMÁTICO Progressão aritmética Progressão geométrica ) ,..., , , (a1 a2 a3 an r n a an 1( 1). ,...) 16 , 13 , 10 , 7 , 4 , 1 ( : Ex 2 ) ( 1 n n a a n S ) ,..., , , (a1 a2 a3 an Ex:(2,4,8,16,32,64,...) 1 1. n n a q aB
ACKGROUNDM
ATEMÁTICO Logarítmosb
a
ab
c c c(
)
log
log
log
a bb
a
log a n a b n b .log log 1
log
aa
n
n
n
lg
log
2log
a n b bn
a
log
log a b b c c a log log log 5R
ELAÇÕES DE RECORRÊNCIA Equacoes ou inequacoes que descrevem uma
funcao em termos de seus valores (recursão) considerando entradas menores (mais simples).
Exemplo:
V
ISÃOG
ERAL: A
NÁLISE DEA
LGORITMOSR
ECURSIVOS 7 int XYZ(int n, …) { … XYZ(…) } T(n)=T(n-..)... Algoritmo Recursivo Relação de Recorrência Método Mestre T(n) = aT(n/b) + f(n) , onde ε>0 c<1 , onde ε>0 , então T = Θ(n2) n2 … Θ(1) n2 n2/2 … n2/4 n2/4 n2/16 n2/4 n2/2... altura=log2(n) Método IterativoM
ÉTODOI
TERATIVO Intuição MERGE-SORT(A) if n = 1 done. MERGE-SORT(A[1.. ⌈n/2⌉]) MERGE-SORT(A[⌈n/2⌉+1..n]) “Merge” the 2 sorted listsmerge: O(n) merge-sort(n/2) merge-sort(n/2)
M
ÉTODOI
TERATIVO Intuição MERGE-SORT(A) if n = 1 done. MERGE-SORT(A[1.. ⌈n/2⌉]) MERGE-SORT(A[⌈n/2⌉+1..n]) “Merge” the 2 sorted listsmerge: O(n) merge-sort(n/4) merge: O(n/2) merge-sort(n/4) merge-sort(n/4) merge: O(n/2) merge-sort(n/4) 9
M
ÉTODOI
TERATIVO Árvore de recorrência Visualizacao conveniente da expansao de uma relacao
de recorrencia
Exemplo
combinar as respostas do processamento recursivo
M
ÉTODOI
TERATIVO Árvore de recorrênciaSerie geométrica decrescente
) ( 2 )) 2 / 1 /( 1 ( )) 2 / 1 1 /( 1 ( )) 1 /( 1 ( ) 1 /( 1 2 2 2 2 2 n n n n q n q a Sn ) 2 / 1 ... 4 / 1 2 / 1 1 ( 2 h n n S n grande PG infinita 11
E
NCONTRANDOR
ELAÇÃO MERGE-SORT(A) if n = 1 done. MERGE-SORT(A[1.. ⌈n/2⌉]) MERGE-SORT(A[⌈n/2⌉+1..n])“Merge” the 2 sorted lists
Θ(1) n é o tamanho de A T(⌊n/2⌋) T(⌈n/2⌉) Θ(n)
T(n) = T(
⌊
n/2
⌋
) + T(
⌈
n/2
⌉
) + Θ(n)
T(n) = 2T(n/2) + Θ(n)
E
XERCÍCIO Encontre a relação de recorrência do algoritmo a
seguir.
13
int fatorial (int n) { if (n == 0) return 1; else return n * fatorial(n-1); }
E
XERCÍCIO Encontre a relação de recorrência do algoritmo a
seguir.
int fatorial (int n) { if (n == 0)
return 1; else
E
XERCÍCIO Encontre a relação de recorrência do algoritmo a
seguir. 15 T (n) { if (n == 0) return 1; else return n * T(n-1); }
E
XERCÍCIO Encontre a relação de recorrência do algoritmo a
seguir. T (n) { if (n == 0) return 1; T(1) = 1 else return n * T(n-1); }
E
XERCÍCIO Encontre a relação de recorrência do algoritmo a
seguir. 17 T (n) { if (n == 0) return 1; (1) else return n * T(n-1); }
E
XERCÍCIO Encontre a relação de recorrência do algoritmo a
seguir.
T (n) =
(1) + T(n-1)
E
XERCÍCIO Encontre a relação de recorrência do algoritmo a
seguir. 19 T (n) = (1) + T(n-1) T (n) = T(n-1)+(1)
M
ÉTODOI
TERATIVO Como resolver a recorrência do merge sort?
Que tal usar no lugar de
2T(n/2) + (n)?
T(n) = 2T(n/2) + cn
T(n) = (1), se n=1 2T(n/2) + (n), se n>1P
ROCEDIMENTO: M
ÉTODOI
TERATIVO 1. Desenhe a árvore de recursão com base narelação de recorrência (T) (EXPANSÃO)
2. Encontre a maior altura (h) até o caso base 3. Some os custos de cada nível
4. Analise o relacionamento entre os custos de
cada nível (RESOLUÇÃO DE TERMOS)
5. Some o custo de todos os níveis com base na
relação encontrada em 4.1.
PA, PG (q>1), PG (q<1)?
21
M
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
T(n) = 2T(n/2) + cnT(n/2)
T(n/2)
Visualização: Árvore de RecursãoT(n)
23
T(n/2)
T(n/2)
T(n) = 2T(n/2) + cn
M
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
T(n)
M
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
T(n/2)
T(n/2)
T(n/2) = 2T(n/4) + cn/2
T(n)
T(n/2) = 2T(n/4) + cn/2M
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
25T(n/4)
T(n/4) T(n/4)
T(n/4)
T(n/2) = 2T(n/4) + cn/2 T(n/2) = 2T(n/4) + cn/2T(n/2)
T(n/2)
T(n)
T(n) = 2T(n/2) + cnM
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
T(n/4)
T(n/4) T(n/4)
T(n/4)
T(n/2) = 2T(n/4) + cn/2 T(n/2) = 2T(n/4) + cn/2T(n/2)
T(n/2)
T(n)
T(n) = 2T(n/2) + cn T(n/4) = 2T(n/8) + cn/4M
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
27T(n/4)
T(n/4) T(n/4)
T(n/4)
T(n/2) = 2T(n/4) + cn/2 T(n/2) = 2T(n/4) + cn/2T(n/2)
T(n/2)
T(n)
T(n) = 2T(n/2) + cn T(n/4) = 2T(n/8) + cn/4T(n/8) T(n/8)
...
...
M
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
T(n/4)
T(n/4) T(n/4)
T(n/4)
T(n/2)
T(n/2)
T(n)
T(n/8) T(n/8)
...
h=0 h=1 h=2 h=3M
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
29T(n/4)
T(n/4) T(n/4)
T(n/4)
T(n/2)
T(n/2)
T(n)
T(n/8) T(n/8)
...
h=0 h=1 h=2 h=3 h=......
T(n/2
h)
T(n) = (1), se n=1 2T(n/2) + (n), se n>1M
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
T(n/4)
T(n/4) T(n/4)
T(n/4)
T(n/2)
T(n/2)
T(n)
h=0 h=1 h=2M
ÉTODOI
TERATIVO(E
XPANDINDO AÁ
RVORE)
31T(n/4)
T(n/4) T(n/4)
T(n/4)
T(n/2)
T(n/2)
T(n)
T(n/8) T(n/8)
...
h=0 h=1 h=2 h=3 h=......
T(n/2
h) = 1
n h n h n h 1 2 log 2 M
ÉTODOI
TERATIVO(R
ESOLVENDO OS TERMOS)
T(n/4)
T(n/4) T(n/4)
T(n/4)
T(n/2)
T(n/2)
T(
n
)
T(n/8) T(n/8)
...
T(n) = 2T(n/2) + cnM
ÉTODOI
TERATIVO(R
ESOLVENDO OS TERMOS)
33T(n/4)
T(n/4) T(n/4)
T(n/4)
T(n/2)
T(n/2)
cn
T(n/8) T(n/8)
...
...
T(n/2
h)
T(n) = 2T(n/2) + cnM
ÉTODOI
TERATIVO(R
ESOLVENDO OS TERMOS)
T(n/4)
T(n/4) T(n/4)
T(n/4)
T(
n/2
)
T(
n/2
)
cn
T(n) = 2T(n/2) + cn T(n/2) = 2T(n/4) + cn/2M
ÉTODOI
TERATIVO(R
ESOLVENDO OS TERMOS)
35T(n/4)
T(n/4) T(n/4)
T(n/4)
cn/2
cn/2
cn
T(n/8) T(n/8)
...
...
T(n/2
h)
T(n) = 2T(n/2) + cn T(n/2) = 2T(n/4) + cn/2M
ÉTODOI
TERATIVO(R
ESOLVENDO OS TERMOS)
T(
n/4
)
cn/2
cn/2
cn
T(n/8) T(n/8)
...
T(n) = 2T(n/2) + cn T(n/2) = 2T(n/4) + cn/2 T(n/4) = 2T(n/8) + cn/4T(
n/4
) T(
n/4
)
T(
n/4
)
M
ÉTODOI
TERATIVO(R
ESOLVENDO OS TERMOS)
37cn/4
cn/2
cn/2
cn
T(n/8) T(n/8)
...
...
T(n/2
h)
T(n) = 2T(n/2) + cn T(n/2) = 2T(n/4) + cn/2 T(n/4) = 2T(n/8) + cn/4cn/4
cn/4
cn/4
M
ÉTODOI
TERATIVO(R
ESOLVENDO OS TERMOS)
cn/4
cn/2
cn/2
cn
cn/4
cn/4
cn/4
h=0 h=1 h=2M
ÉTODOI
TERATIVO(R
ESOLVENDO OS TERMOS)
39cn/2
1cn
...
...
h=0 h=1 h=2 h=3 h=log ncn/2
1cn/2
2cn/2
2cn/2
2cn/2
2cn/2
3cn/2
hM
ÉTODOI
TERATIVO(
SOMANDO OS CUSTOS POR ALTURA)
cn/2
1cn
...
h=0 h=1 h=2 h=3cn/2
1cn/2
2cn/2
2cn/2
2cn/2
2cn/2
3cn
cn
cn
…
+ + + + +M
ÉTODOI
TERATIVO(
SOMANDO OS CUSTOS POR ALTURA)
41cn/2
1cn
...
...
h=0 h=1 h=2 h=3 h=log ncn/2
1cn/2
2cn/2
2cn/2
2cn/2
2cn/2
3cn/2
hcn
cn
cn
…
cn
) log ( ) (log .cn n cn n n h + + + + +E
XERCÍCIO1
Utilize o método iterativo (utilizando a árvore de recursão para visualização) para resolver a recorrência a seguir:
T(n) = 2T(n/2) + n
2E
XERCÍCIO2
Utilize o método iterativo (utilizando a árvore de recursão para visualização) para resolver a recorrência a seguir:
43
T(n) = 3T(n/2) + n
2T = O(n
2)
E
XERCÍCIO3
Faça um algoritmo recursivo que realize uma busca
sequencial em um elemento de um vetor. Qual a relação de recorrência?
Utilize o método iterativo (árvore de recursão) para
resolver a recorrência.
M
ÉTODOM
ESTRE Provê um livro de receitas para um bom número de
recorrências da forma:
Onde
a≥1
e
b>1
são constantes e f(n) é uma
função assintoticamente positiva.
Os a problemas sao resolvidos
recursivamente em T(n/b) e o tempo de
dividir e combinar os resultados dos
subproblemas é dado por f(n).
45T(n) = aT(n/b) + f(n)
a=Número de
subproblemas b=Tamanho do subproblema
C
OMPARAÇÃOB
ÁSICA DOM
ÉTODOf(n) < f(n) = Caso 1 Caso 2 Só a parte polinomial
T(n) = aT(n/b) + f(n)
) ( ) (n nlog ab T ) log ). ( ( ) log ( ) ( log n n f n n n T b b a b T
EOREMAM
ESTRE(C
ASO1)
47T(n) = aT(n/b) + f(n)
Exemplo
:
8 log2n
1000
n
2
n
log28P
ROCEDIMENTO: M
ÉTODOM
ESTRE1.
Identifique
a, b, f(n), log a
2.
Verifique
as condições sobre a≥1 e b>1 e f(n)
3.Compare
f(n) com para identificar o
caso
4.
Confirme
a condição do caso
5.Encontre
o Θ
T
EOREMAM
ESTRE(C
ASO2)
49T(n) = aT(n/b) + f(n)
Exemplo
:
2 log2n
10
n
n
log22T
EOREMAM
ESTRE(C
ASO3)
T(n) = aT(n/b) + f(n)
Exemplo
:
E
XERCÍCIO1
O método mestre pode ser aplicado nas seguintes
recorrências? Justifique.
51
E
XERCÍCIO1
O método mestre pode ser aplicado nas seguintes
recorrências? Justifique.
a=2n não é constante
a=0.5<1
E
XERCÍCIO2
Indique o limite assintoticamente restrito da
recorrência T(n) = 2T(n/2) + n utilizando o método mestre
53
E
XERCÍCIO3
Uma busca binaria acontece em arrays ordenados. Se o elemento a ser buscado é o do meio do array entao
a busca termina. Senao
Se o elemento buscado é menor do que o elemento do meio
entao a busca se dá na primeira metade. Senao a busca se dá na segunda metade.
boolean search(int x, int v[], int l, int r) { int m = (l + r) / 2;
E
XERCÍCIO4
Considerando uma entrada ordenada. Qual dos
algoritmos você escolheria para uma busca:
seqüencial ou binária? Considere os algoritmos implementados anteriormente. 55