Você está na página 1de 32

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio A. F.

1
Cabral

RECORRÊNCIAS

PPGI/2014
Recorrências e Tempo de Execução
2

 Uma equação ou inequação que descreve uma função em termos de seu


valor sobre pequenas entradas
T(n) = T(n-1) + n
 Recorrências aparecem quando um algoritimo contém chamadas recursivas
para ele mesmo

 Qual é de fato o tempo de exeução de um algoritmo?


 É preciso resolver a recorrência
 Encontrar um fórmula explícita de uma expressão
 Limitar a recorrência por uma expressão que envolve n

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
Exemplos de Recorrências
3

 T(n) = T(n-1) + n Θ(n2)


 Algoritmo recursivo que a cada loop examina a entrada e
elimina um item
 T(n) = T(n/2) + c Θ(lgn)
 Algoritmo recursivo que divide a entrada em cada passo

 T(n) = T(n/2) + n Θ(n)


 Algoritmo recursivo que divide a entrada, mas precisa
examinar cada item na entrada
 T(n) = 2T(n/2) + 1 Θ(n)
 Algoritmo recursivo que divide a entrada em duas metades
e executa uma quantidade constante de operações
Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio
PPGI/2014
A. F. Cabral
Algoritmos Recursivos
BINARY-SEARCH
 Para um vetor ordenado A, verifique se x está no vetor A[lo…hi]

Alg.: BINARY-SEARCH (A, lo, hi, x)


1 2 3 4 5 6 7 8

if (lo > hi) 2 3 5 7 9 10 11 12


return FALSE
mid  (lo+hi)/2 lo
mid
hi
if x = A[mid]
return TRUE
if ( x < A[mid] )
BINARY-SEARCH (A, lo, mid-1, x)
if ( x > A[mid] )
BINARY-SEARCH (A, mid+1, hi, x)
Exemplo
 A[8] = {1, 2, 3, 4, 5, 7, 9, 11}
 lo =1 hi = 8 x = 7

1 2 3 4 5 6 7 8

1 2 3 4 5 7 9 11 mid = 4, lo = 5, hi = 8

1 2 3 4 5 7 9 11 mid = 6, A[mid] = x
Encontrado!!!
Outro exemplo
 A[8] = {1, 2, 3, 4, 5, 7, 9, 11}

– lo = 1 hi = 8 x=6
1 2 3 4 5 6 7 8

1 2 3 4 5 7 9 11 mid = 4, lo = 5, hi = 8

1 2 3 4 5 7 9 11 mid = 6, A[6] = 7, lo = 5, hi = 5

1 2 3 4 5 7 9 11 mid = 5, A[5] = 5, lo = 6, hi = 5
NÃO ENCONTRADO!
Análise do BINARY-SEARCH
7

Alg.: BINARY-SEARCH (A, lo, hi, x)


if (lo > hi) tempo contante: c1
return FALSE
tempo contante: c2
mid  (lo+hi)/2
if x = A[mid] tempo contante: c3
return TRUE
if ( x < A[mid] )
mesmo problema de
BINARY-SEARCH (A, lo, mid-1, x) tamanho n/2
if ( x > A[mid] ) mesmo problema de
BINARY-SEARCH (A, mid+1, hi, x) tamanho n/2

 T(n) = c + T(n/2)

 T(n) – tempo de execução para um vetor de tamanho n


Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio
PPGI/2014
A. F. Cabral
Métodos para resolver recorrências
8

 Iteração

 Substituição

 Árvore de Recursão

 Teorema Mestre

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
O Método da Iteração
9

 Converter a recorrência em um somatório e tentar


limitá-lo usando uma série conhecida
 Iterar a recorrência até a condição inicial ser alcançada.
 Usar retro-substituição para expressar a recorrência em
termos de n e a condição inicial.

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
O Método da Iteração
T(n) = c + T(n/2)
10

T(n) = c + T(n/2)
T(n/2) = c + T(n/4)
= c + c + T(n/4)
T(n/4) = c + T(n/8)
= c + c + c + T(n/8)
Assume n = 2k
T(n) = c + c + … + c + T(1)
k vezes
= clgn + T(1)
= Θ(lgn)

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
Método da Iteração– Exemplo
T(n) = n + 2T(n/2) Assuma: n = 2k
11

T(n) = n + 2T(n/2) T(n/2) = n/2 + 2T(n/4)


= n + 2(n/2 + 2T(n/4))
= n + n + 4T(n/4)
= n + n + 4(n/4 + 2T(n/8))
= n + n + n + 8T(n/8)
… = in + 2iT(n/2i)
= kn + 2kT(1)
= nlgn + nT(1) = Θ(nlgn)
Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio
PPGI/2014
A. F. Cabral
O método da substituição
12

1. Adivinhe uma solução

2. Use indução para provar que a solução


está correta

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
Método da substituição
13

 Adivinhe uma solução (um chute)


 T(n) = O(g(n))

 Objetivo da indução: aplicar a definição de notação assintótica

 T(n) ≤ d g(n), para algum d > 0 e n ≥ n0

 Hipótese indutiva: T(k) ≤ d g(k) para todo k < n

 Prove a indução
 Use a hipótese indutiva para encontrar alguns valores de constantes d
e n0 para os quais a indução seja válida

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
Exemplo: Binary Search
14

T(n) = c + T(n/2)
 Chute: T(n) = O(lgn)
 Indução: T(n) ≤ d lgn, para algum d e n ≥ n0
 Hipótese indutiva: T(n/2) ≤ d lg(n/2)
 Prova da indução:
T(n) = T(n/2) + c ≤ d lg(n/2) + c
= d lgn – d + c ≤ d lgn
se: – d + c ≤ 0, d ≥ c

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
Exemplo 2
15 T(n) = T(n-1) + n
 Chute: T(n) = O(n2)
 Indução: T(n) ≤ c n2, para algum c e n ≥ n0
 Hipótese indutiva: T(n-1) ≤ c(n-1)2 para todo k < n

 Prova da indução:
T(n) = T(n-1) + n ≤ c (n-1)2 + n
= cn2 – (2cn – c - n) ≤ cn2
se: 2cn – c – n ≥ 0  c ≥ n/(2n-1)  c ≥ 1/(2 –
1/n)
 Para n ≥ 1  2 – 1/n ≥ 1  qualquer c ≥ 1 irá satisfazer
Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio
PPGI/2014
A. F. Cabral
Exemplo 3
16

T(n) = 2T(n/2) + n
 Chute: T(n) = O(nlgn)
 Indução: T(n) ≤ cn lgn, para algum c e n ≥ n0
 Hipótese indutiva : T(n/2) ≤ cn/2 lg(n/2)
 Prova da indução:
T(n) = 2T(n/2) + n ≤ 2c (n/2)lg(n/2) + n
= cn lgn – cn + n ≤ cn lgn
se: - cn + n ≤ 0  c ≥ 1

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
Mudança de variáveis
T(n) = 2T( n ) + lgn
 Fazendo: m = lgn  n = 2m
T (2m) = 2T(2m/2) + m
 Tomando: S(m) = T(2m)
S(m) = 2S(m/2) + m  S(m) = O(mlgm) (como visto
anteriormente)
T(n) = T(2m) = S(m) = O(mlgm)=O(lgnlglgn)
Idéia: transformar a recorrência em uma que seja conhecida
O método da árvore de recursão

Converter a recorrência em uma árvore:


 Cada nó representa o custo incorrido ´nos vários
níveis de recursão

 Some os custos de todos os níveis

Usado para “adivinhar” uma solução para a recorrência


Exemplo 1
W(n) = 2W(n/2) + n2
19

 Tamanho do subproblema no nível i é: n/2i


 Tamanho de subproblema alcança 1 quando 1 = n/2i  i = lgn
 Custo de um problema no nível i = (n/2i)2
 Número de nós no nível i = 2i
 Custo total: lg n 1 2 lg n 1 i  i
n 1 1 1
W (n)   i  2 W (1)  n     n  n     O(n) n 2
lg n 2 2
 O ( n)  2n 2
i 0 2 i 0  2  i 0  2  1 1
2
 W(n) = O(n2)
Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio
PPGI/2014
A. F. Cabral
Exemplo 2
E.g.: T(n) = 3T(n/4) + cn2

• Tamanho do subproblema no nível i é: n/4i


• Tamanho do subproblema alcança 1quando 1 = n/4i  i = log4n
• Custo de um nó no nível i = c(n/4i)2
• Número de nós no nível i = 3i  último nível tem 3log4n = nlog43 nós
• Custo total: log n1 i

     
 i
3 2 3 2 1

  cn   n 4     cn   n 4 
4

T ( n)  log 3 log 3
cn 2   n log4 3  O(n 2 )
i 0  16  i 0  16 
3
1
•  T(n) = O(n2) 16
Exemplo 2 - Substituição
21 T(n) = 3T(n/4) + cn2
 Chute: T(n) = O(n2)
 Indução: T(n) ≤ dn2, para algum d e n ≥ n0
 Hipótese indutiva: T(n/4) ≤ d (n/4)2
 Prova da indução:
T(n) = 3T(n/4) + cn2
≤ 3d (n/4)2 + cn2
= (3/16) d n2 + cn2
≤ d n2 se: d ≥ (16/13)c

 Portanto: T(n) = O(n2)


Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio
PPGI/2014
A. F. Cabral
Exemplo 3
W(n) = W(n/3) +
W(2n/3) + n
• O maior caminho da raiz até uma
folha é: n
 (2/3)n  (2/3)2 n  …  1

• Tamanho de subproblema alcança 1


quando

1 = (2/3)in  i=log3/2n

• Custo de um problema no nível i = n

• Custo total: (log3 / 2 n ) 1


W (n)  n  n  ...  i 0
n  2(log3 / 2 n )W (1) 
log3 / 2 n
lg n 1
n  1 n
i 0
log3 / 2 2
 n log3/ 2 n  O(n)  n
lg 3/ 2
 O ( n) 
lg 3/ 2
n lg n  O(n)

 W(n) = O(nlgn)
Exemplo 3 - Substitution
23

W(n) = W(n/3) + W(2n/3) + O(n)


 Chute: W(n) = O(nlgn)
 Indução: W(n) ≤ d nlgn, para algum d e n ≥ n0
 Hipótese indutiva: W(k) ≤ d klgk para qualquer K <
n (n/3, 2n/3)
 Prova da indução:
Fica como exercício!
 T(n) = O(nlgn)

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
Teorema Mestre

 “Receita de bolo” para resolver recorrências da forma:

n
T (n)  aT    f (n)
b

onde, a ≥ 1, b > 1, e f(n) > 0

Idéia: comparar f(n) com nlogba

 f(n) é assintoticamente menor ou maior do que nlogba por um


fator polinomial n

 f(n) é assintoticamente igual a nlogba


Teorema Mestre
 “Receita de bolo” para resolver recorrências da forma:

n
T (n)  aT    f (n)
b

onde, a ≥ 1, b > 1, e f(n) > 0

Caso 1: se f(n) = O(nlogba -) para algum  > 0, então: T(n) = (nlogba)

Caso 2: se f(n) = (nlogba lgkn), para algum k ≥0, então:


T(n) = (nlogba lgk+1n)

Caso 3: se f(n) = (nlogba +) para algum  > 0, e se

af(n/b) ≤ cf(n) para algum c < 1 e todo n suficientemente grande, então:

Condição de regularidade T(n) = (f(n))


Exemplos
T(n) = 2T(n/2) + n

a = 2, b = 2, log22 = 1

Compare nlog22 com f(n) = n

 f(n) = (n)  Caso 2

 T(n) = (nlgn)
Exemplos

T(n) = 2T(n/2) + n2
a = 2, b = 2, log22 = 1
Compare n com f(n) = n2
 f(n) = (n1+) Caso 3  verificando a condição de
regularidade
a f(n/b) ≤ c f(n)
 2 n2/4 ≤ c n2  c = ½ é uma solução (c<1)
 T(n) = (n2)
Exemplos (cont.)
T(n) = 2T(n/2) + n

a = 2, b = 2, log22 = 1

Compare n com f(n) = n1/2

 f(n) = O(n1-) Caso 1

 T(n) = (n)
Exemplos
30 T(n) = 3T(n/4) + nlgn

a = 3, b = 4, log43 = 0.793

Compare n0.793 com f(n) = nlgn

f(n) = (nlog43+) Case 3

Verificando a condição de regularidade:

3(n/4)lg(n/4) ≤ (3/4)nlgn = c f(n),


c=3/4

T(n) = (nlgn)
Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio
A. F. Cabral
PPGI/2014
Árvore de Recursão
31

 Considere T(n)=3T(n/4)+cn2
T(n) 2 cn

T(n/4) T(n/4) T(n/4)

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
Árvore de Recursão
32

 Considere T(n)=3T(n/4)+cn2
T(n) 2 cn

c(n/4)2 c(n/4)2 c(n/4)2

T(n/16) T(n/16) T(n/16) T(n/16) T(n/16) T(n/16) T(n/16) T(n/16) T(n/16)

Estrutura de Dados e Complexidade de Algoritmos - Prof. Lucídio


PPGI/2014
A. F. Cabral
Árvore de Recursão
33

 Considere T(n)=3T(n/4)+cn2
T(n) 2 cn2
cn

log4n c(n/4)2 c(n/4)2 c(n/4)2 3cn2/16

32cn2/16
.
2

c(n/16)2 c(n/16)2 c(n/16)2 c(n/16)2 c(n/16)2 c(n/16)2 c(n/16)2 c(n/16)2 c(n/16)2 .

. .
. . . . . . .
. . . . . . . . log43
. . . . . . . . (n )
T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)

log43 - Prof. Lucídio


Estrutura de Dados e Complexidade de Algoritmos
PPGI/2014
n A. F. Cabral

Você também pode gostar