08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

notas de aula - Jerônimo C. Pellegrini<br />

12.2.1 Seleção de mensagens<br />

exercícios<br />

Ex. 95 — O algoritmo de Strassen para multiplicação de matrizes [20] pode ser modificado<br />

para usar trocas de mensagens.<br />

Para multiplicar duas matrizes A e B, tal que<br />

[ ] [ ]<br />

A 1,1 A 1,2 B 1,1 B 1,2<br />

A =<br />

, B =<br />

e<br />

A 2,1 A 2,2 B 2,1 B 2,2<br />

[ ]<br />

C 1,1 C 1,2<br />

C = AB =<br />

,<br />

C 2,1 C 2,2<br />

onde X 1,1 , X 1,2 , X 2,1 , X 2,2 representam os quatro blocos resultantes da partição de X em<br />

quatro partes iguais, usamos o algoritmo de Strassen: definimos as matrizes<br />

M 1 := (A 1,1 + A 2,2 )(B 1,1 + B 2,2 )<br />

M 2 := (A 2,1 + A 2,2 )B 1,1<br />

M 3 := A 1,1 (B 1,2 − B 2,2 )<br />

M 4 := A 2,2 (B 2,1 − B 1,1 )<br />

M 5 := (A 1,1 + A 1,2 )B 2,2<br />

M 6 := (A 2,1 − A 1,1 )(B 1,1 + B 1,2 )<br />

M 7 := (A 1,2 − A 2,2 )(B 2,1 + B 2,2 )<br />

e calculamos a matriz C:<br />

C 1,1 = M 1 + M 4 − M 5 + M 7<br />

C 1,2 = M 3 + M 5<br />

C 2,1 = M 2 + M 4<br />

C 2,2 = M 1 − M 2 + M 3 + M 6<br />

Com isso fazemos sete multiplicações de submatrizes ao invés de oito (que é o que um<br />

Versão Preliminar<br />

algoritmo ingenuo faria). Uma implementação usando troca de mensagens poderia criar<br />

um novo processo cada vez que uma chamada recursiva é feita.<br />

276<br />

[ 27 de outubro de 2010 at 15:47 ]

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

Saved successfully!

Ooh no, something went wrong!