Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar

arquivoescolar.org
from arquivoescolar.org More from this publisher
13.04.2013 Views

6. Divisão e conquista Busca Binária Algoritmo 6.7 (Busca-Binária(i,f,x,S)) Entrada Um inteiro x, índices i e f e uma sequência S = a1, a2, . . . an de números ordenados. Saída Posição i em que x se encontra na sequência S ou ∞ caso x /∈ S. 1 i f i = f then 2 i f ai = x return i 3 else return ∞ 4 end i f 5 m := f−i 2 + i 6 i f x < am then 7 return Busca Binária (i , m − 1) 8 else 9 return Busca Binária (m + 1 , f ) 10 end i f Complexidade da Busca-Binária Θ(1) se n = 1 T (n) = T (⌊n/2⌋) + c se n > 1 A complexidade dessa recorrência é logarítmica, ou seja, T (n) ∈ O(log n) Quicksort Algoritmo 6.8 (Quicksort) Entrada Índices l, r e um vetor a com elementos al, . . . , ar. 136 Saída a com os elementos em ordem não-decrescente, i.e. para i < j temos ai ≤ aj. 1 i f l < r then 2 m := P a r t i t i o n ( l , r , a ) ;

3 Quicksort (l ,m − 1 ,a ) ; 4 Quicksort (m + 1 ,r ,a ) ; 5 end i f Complexidade do Quicksort no pior caso T (n) = Θ(1) se n = 1 T (n − 1) + Θ(n) se n > 1 6.2. Resolver recorrências A complexidade dessa recorrência é quadrática, ou seja, T (n) ∈ O(n 2 ) Complexidade do Quicksort no melhor caso T (n) = Θ(1) se n = 1 2T (n/2) + Θ(n) se n > 1 A complexidade dessa recorrência é T (n) ∈ O(n log n) Complexidade do Quicksort com Particionamento Balanceado T (n) = Θ(1) se n = 1 T ( 9n n 10 ) + T ( 10 ) + Θ(n) se n > 1 A complexidade dessa recorrência é T (n) ∈ O(n log n) Agora, vamos estudar dois exemplos, em que o método mestre não se aplica. Exemplo 6.7 (Contra-exemplo 1) Considere a recorrência T (n) = 2T (n/2)+n log n. Nesse caso, a função f(n) = n log n não satisfaz nenhum dos critérios do teorema Mestre (ela fica “entre” casos 2 e 3), portanto temos que analisar com árvore de recorrência que resulta em T (n) = (n log n − in) + Θ(n) = Θ(n log 2 n) 0≤i

3 Quicksort (l ,m − 1 ,a ) ;<br />

4 Quicksort (m + 1 ,r ,a ) ;<br />

5 end i f<br />

Complexida<strong>de</strong> do Quicksort no pior caso<br />

T (n) =<br />

<br />

Θ(1) se n = 1<br />

T (n − 1) + Θ(n) se n > 1<br />

6.2. Resolver recorrências<br />

A <strong>complexida<strong>de</strong></strong> <strong>de</strong>ssa recorrência é quadrática, ou seja, T (n) ∈ O(n 2 )<br />

Complexida<strong>de</strong> do Quicksort no melhor caso<br />

T (n) =<br />

<br />

Θ(1) se n = 1<br />

2T (n/2) + Θ(n) se n > 1<br />

A <strong>complexida<strong>de</strong></strong> <strong>de</strong>ssa recorrência é T (n) ∈ O(n log n)<br />

Complexida<strong>de</strong> do Quicksort com Particionamento Balanceado<br />

T (n) =<br />

<br />

Θ(1) se n = 1<br />

T ( 9n n<br />

10 ) + T ( 10 ) + Θ(n) se n > 1<br />

A <strong>complexida<strong>de</strong></strong> <strong>de</strong>ssa recorrência é T (n) ∈ O(n log n)<br />

Agora, vamos estudar dois exemplos, em que o método mestre não se aplica.<br />

Exemplo 6.7 (Contra-exemplo 1)<br />

Consi<strong>de</strong>re a recorrência T (n) = 2T (n/2)+n log n. Nesse caso, a função f(n) =<br />

n log n não satisfaz nenhum dos critérios do teorema Mestre (ela fica “entre”<br />

casos 2 e 3), portanto temos que analisar com árvore <strong>de</strong> recorrência que resulta<br />

em<br />

T (n) =<br />

<br />

(n log n − in) + Θ(n) = Θ(n log 2 n)<br />

0≤i

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!