13.04.2013 Views

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6.3. <strong>Algoritmos</strong> usando divisão e conquista<br />

Exemplo 6.11<br />

Consi<strong>de</strong>re T (n) = 2T (n/2) + n/ log n do exemplo 6.8 (que não po<strong>de</strong> ser resolvido<br />

pelo teorema Master). Novamente p = 1 e temos<br />

T (n) ∈ Θ(n + (1 +<br />

n<br />

1<br />

1/(u log u) du)) = Θ(n(1 + [log log u] n 1 )<br />

6.3. <strong>Algoritmos</strong> usando divisão e conquista<br />

6.3.1. O algoritmo <strong>de</strong> Strassen<br />

= Θ(n(1 + log log n))<br />

= Θ(n log(log n))<br />

No capítulo 2.2.2 analisamos um algoritmo para multiplicar matrizes quadradas<br />

<strong>de</strong> tamanho (número <strong>de</strong> linhas e colunas) n com <strong>complexida<strong>de</strong></strong> <strong>de</strong> O(n 3 )<br />

multiplicações. Um algoritmo mais eficiente foi proposto por Strassen [63].<br />

A idéia do algoritmo é: subdivi<strong>de</strong> os matrizes num produto A × B = C em<br />

quatro sub-matrizes com a meta<strong>de</strong> do tamanho (e, portanto, um quarto <strong>de</strong><br />

elementos):<br />

A11 A12<br />

A21 A22<br />

<br />

B11 B12<br />

×<br />

B21 B22<br />

<br />

=<br />

C11 C12<br />

C21 C22<br />

Com essa subdivisão, o produto AB obtem-se pelas equações<br />

C11 = A11B11 + A12B21<br />

C12 = A11B12 + A12B22<br />

C21 = A21B11 + A22B21<br />

C22 = A21B12 + A22B22<br />

e precisa-se <strong>de</strong> oito multiplicações <strong>de</strong> matrizes <strong>de</strong> tamanho n/2 ao invés <strong>de</strong><br />

uma multiplicação <strong>de</strong> matrizes <strong>de</strong> tamanho n. A recorrência correspon<strong>de</strong>nte,<br />

consi<strong>de</strong>rando somente multiplicações é<br />

T (n) = 8T (n/2) + O(1)<br />

<br />

.<br />

♦<br />

♦<br />

141

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

Saved successfully!

Ooh no, something went wrong!