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 uma forma que sabemos resolver: A(n) = 0≤i≤log c2 n f(n/c i 2) c log c 2 n/c i 2 1 = 1 c log c 2 n 1 0≤i≤log c2 n f(n/c i 2)c i 1 Após de resolver essa recorrência, podemos re-substituir para obter a solução de T (n). Exemplo 6.4 (Multiplicação de números binários) Dado dois números p, q de n bits, podemos separá-los em duas partes forma p = pl pr = pl 2 n/2 + pr q = ql qr = ql 2 n/2 + qr. Logo o produto possui a representação Observação: pq = (pl 2 n/2 + pr)(ql 2 n/2 + qr) = 2 n plql + 2 n/2 ( plqr + prql ) + prqr. plqr + prql = (pl + pr)(ql + qr) − plql − prqr. Portanto a multiplicação de dois números binários com n bits é possível com três multiplicações de números binários com aproximadamente n/2 bits. Algoritmo 6.4 (mult-bin [41]) Entrada Dois números binários p, q com n bits. 130 Saída O produto pq (com ≤ 2n bits). 1 i f n = 1 then return pq 2 else 3 x1 := mult-bin(pl, ql) 4 x2 := mult-bin(pr, qr) 5 x3 := mult-bin(pl + pr, ql + qr) 6 return x12 n + (x3 − x2 − x1)2 n/2 + x2 7 end i f

6.2. Resolver recorrências O algoritmo multiplica dois números binários com no máximo ⌈n/2⌉ bits, e os números pl + pr e ql + qr com no máximo ⌈n/2⌉ + 1 bits, e portanto possui complexidade T (n) = que podemos simplificar para Θ(1) se n ≤ 1 2T (⌈n/2⌉) + T (⌈n/2⌉ + 1) + Θ(n) caso contrário T (n) = 3T (n/2) + cn. Dividindo por 3 log 2 n obtemos T (n) 3log T (n/2) = 2 n 3log cn + 2 n/2 3log2 n e substituindo A(n) = T (n)/3 log 2 n temos e portanto A(n) = A(n/2) + cn 3log = c 2 n 0≤i≤log2 n = cn 3 log 2 n 0≤i≤log 2 n 3 2 i n/2 i 3 log 2 n/2i = cn 3log2 n (3/2) log2 n+1 = 3c 1/2 T (n) = A(n)3 log 2 n = 3cn log 2 3 = Θ(n 1.58 ). Exemplo 6.5 Com p = (1101.1100)2 = (220)10 e q = (1001.0010)2 = (146)10 temos n = 8, x = p1 + p2 = 1.1001 tal que x1 = 1 e x2 = 1001 e y = q1 + q2 = 1011 tal que y1 = 0 e y2 = 1011. Logo z = x2y2 = 0110.0011, t = y22 4 + z = 21.0001.0011, u = p1q1 = 0111.0101, v = p2q2 = 0001.1000 e finalmente r = 1111.1010.111.1000 = 32120. ♦ 6.2.2. Método da árvore de recursão O método da árvore de recursão Uma árvore de recursão apresenta uma forma bem intuitiva para a análise de complexidade de algoritmos recursivos. ♦ 131

6.2. Resolver recorrências<br />

O algoritmo multiplica dois números binários com no máximo ⌈n/2⌉ bits, e<br />

os números pl + pr e ql + qr com no máximo ⌈n/2⌉ + 1 bits, e portanto possui<br />

<strong>complexida<strong>de</strong></strong><br />

T (n) =<br />

que po<strong>de</strong>mos simplificar para<br />

<br />

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

2T (⌈n/2⌉) + T (⌈n/2⌉ + 1) + Θ(n) caso contrário<br />

T (n) = 3T (n/2) + cn.<br />

Dividindo por 3 log 2 n obtemos<br />

T (n)<br />

3log T (n/2)<br />

=<br />

2 n 3log cn<br />

+<br />

2 n/2 3log2 n<br />

e substituindo A(n) = T (n)/3 log 2 n temos<br />

e portanto<br />

A(n) = A(n/2) + cn<br />

3log <br />

= c<br />

2 n<br />

0≤i≤log2 n<br />

= cn<br />

3 log 2 n<br />

<br />

0≤i≤log 2 n<br />

3<br />

2<br />

i<br />

n/2 i<br />

3 log 2 n/2i<br />

= cn<br />

3log2 n<br />

(3/2) log2 n+1<br />

= 3c<br />

1/2<br />

T (n) = A(n)3 log 2 n = 3cn log 2 3 = Θ(n 1.58 ).<br />

Exemplo 6.5<br />

Com p = (1101.1100)2 = (220)10 e q = (1001.0010)2 = (146)10 temos n = 8,<br />

x = p1 + p2 = 1.1001 tal que x1 = 1 e x2 = 1001 e y = q1 + q2 = 1011<br />

tal que y1 = 0 e y2 = 1011. Logo z = x2y2 = 0110.0011, t = y22 4 + z =<br />

21.0001.0011, u = p1q1 = 0111.0101, v = p2q2 = 0001.1000 e finalmente<br />

r = 1111.1010.111.1000 = 32120. ♦<br />

6.2.2. Método da árvore <strong>de</strong> recursão<br />

O método da árvore <strong>de</strong> recursão<br />

Uma árvore <strong>de</strong> recursão apresenta uma forma bem intuitiva para a análise <strong>de</strong><br />

<strong>complexida<strong>de</strong></strong> <strong>de</strong> algoritmos recursivos.<br />

♦<br />

131

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

Saved successfully!

Ooh no, something went wrong!