Multiplicação de matrizes

11
Multiplicação de Matrizes Do O(n 3 ) ao O(n 2 ) Diego Antonio Lusa 1 Resumo: As matrizes são estruturas matemáticas de grande valia para diversas áreas do conheci- mento, sendo a Ciência da Computação uma delas. Dentre as operações aplicáveis sobre matrizes destaca-se a multiplicação, tanto pela sua aplicabilidade quanto pela elevada complexidade assin- tótica envolvida no processo. O alto coeficiente de complexidade observado no método tradicional serviu de motivação para diversos pesquisadores, como Volker Strassen, Shmuel Winograd e Don Coppersmith, enveredarem-se na busca por meios mais eficientes de resolução. Em vista da impor- tância e problemática envolvida no cálculo do produto de matrizes, o presente artigo traz uma breve descrição acerca do tema, ressaltando os principais métodos desenvolvidos, suas características e restrições. Palavras-chave: Matrizes. Multiplicação. Complexidade Abstract: Matrices are mathematical structures of great value to many knowledge areas, being Computing Science one. Among the possible operations on matrices highlight the multiplication, both for its applicability as the high asymptotic complexity involved in the process. The high coef- ficient of complexity observed in the traditional method served as motivation for many researchers, as Volker Strassen, Don Coppersmith and Shmuel Winograd, embark on the search for more efficient means of resolution. In view of the importance and problems involved in calculating the matrix pro- duct, this article provides a brief description on the topic, highlighting the major developed methods, characteristics and constraints. Keywords: Matrices. Multiplication. Complexity 1 Introdução A representação de dados na forma de matrizes é algo comum para diversas áreas do conhecimento. Em especial, a Computação e a Matemática fazem uso intenso destas construções e operações relacionadas para reso- lução de problemas. Mesmo problemas que originalmente não apresentam uma construção matricial podem ser resolvidos por meio de matrizes. É o caso, por exemplo, dos sistemas de equações lineares. Dentre as operações aplicáveis sobre matrizes, a de multiplicação tem especial destaque para a Computação, sendo considerada uma das operações fundamentais da área. Contudo, além de apresentar-se como uma operação essencial para a computação simbólica e numérica, a multiplicação de matrizes representa um grande desafio computacional em termos de complexidade assintótica. A abordagem tradicional para o cálculo do produto entre matrizes possui complexidade assintótica igual a O(n 3 ), um expoente consideravelmente elevado e que implica um grande esforço computacional para efetuar a operação em matrizes de maior tamanho. Considerando-se a grande aplicabilidade do produto de matrizes, percebe-se que a elevada complexidade tende a impor severas restrições na resolução de determinados problemas de maior ordem. Na tentativa de reduzir o coeficiente de complexidade envolvido no cálculo do produto entre matrizes, di- versos pesquisadores desenvolveram métodos eficientes de resolução, alternativos ao método tradicional. Alguns destes trabalhos obtiveram resultados expressivos, alcançado coeficientes de complexidade próximos ao ideal teó- rico O(n 2 ). Neste cenário, destacam-se os trabalhos desenvolvidos por Volker Strassen, Shmuel Winograd e Don Coppersmith. 1 Mestrado em Computação Aplicada, UPF, Campus 1 - BR 285 - Passo Fundo (RS) - Brasil {[email protected]} Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 1

description

Matrices are mathematical structures of great value to many knowledge areas, being Computing Science one. Among the possible operations on matrices highlight the multiplication, both for its applicability as the high asymptotic complexity involved in the process. The high coeficient of complexity observed in the traditional method served as motivation for many researchers, as Volker Strassen, Don Coppersmith and Shmuel Winograd, embark on the search for more efficient means of resolution. In view of the importance and problems involved in calculating the matrix product, this article provides a brief description on the topic, highlighting the major developed methods, characteristics and constraints.

Transcript of Multiplicação de matrizes

Page 1: Multiplicação de matrizes

Multiplicação de MatrizesDo O(n3) ao O(n2)

Diego Antonio Lusa 1

Resumo: As matrizes são estruturas matemáticas de grande valia para diversas áreas do conheci-mento, sendo a Ciência da Computação uma delas. Dentre as operações aplicáveis sobre matrizesdestaca-se a multiplicação, tanto pela sua aplicabilidade quanto pela elevada complexidade assin-tótica envolvida no processo. O alto coeficiente de complexidade observado no método tradicionalserviu de motivação para diversos pesquisadores, como Volker Strassen, Shmuel Winograd e DonCoppersmith, enveredarem-se na busca por meios mais eficientes de resolução. Em vista da impor-tância e problemática envolvida no cálculo do produto de matrizes, o presente artigo traz uma brevedescrição acerca do tema, ressaltando os principais métodos desenvolvidos, suas características erestrições.

Palavras-chave: Matrizes. Multiplicação. Complexidade

Abstract: Matrices are mathematical structures of great value to many knowledge areas, beingComputing Science one. Among the possible operations on matrices highlight the multiplication,both for its applicability as the high asymptotic complexity involved in the process. The high coef-ficient of complexity observed in the traditional method served as motivation for many researchers,as Volker Strassen, Don Coppersmith and Shmuel Winograd, embark on the search for more efficientmeans of resolution. In view of the importance and problems involved in calculating the matrix pro-duct, this article provides a brief description on the topic, highlighting the major developed methods,characteristics and constraints.

Keywords: Matrices. Multiplication. Complexity

1 Introdução

A representação de dados na forma de matrizes é algo comum para diversas áreas do conhecimento. Emespecial, a Computação e a Matemática fazem uso intenso destas construções e operações relacionadas para reso-lução de problemas. Mesmo problemas que originalmente não apresentam uma construção matricial podem serresolvidos por meio de matrizes. É o caso, por exemplo, dos sistemas de equações lineares.

Dentre as operações aplicáveis sobre matrizes, a de multiplicação tem especial destaque para a Computação,sendo considerada uma das operações fundamentais da área. Contudo, além de apresentar-se como uma operaçãoessencial para a computação simbólica e numérica, a multiplicação de matrizes representa um grande desafiocomputacional em termos de complexidade assintótica.

A abordagem tradicional para o cálculo do produto entre matrizes possui complexidade assintótica iguala O(n3), um expoente consideravelmente elevado e que implica um grande esforço computacional para efetuara operação em matrizes de maior tamanho. Considerando-se a grande aplicabilidade do produto de matrizes,percebe-se que a elevada complexidade tende a impor severas restrições na resolução de determinados problemasde maior ordem.

Na tentativa de reduzir o coeficiente de complexidade envolvido no cálculo do produto entre matrizes, di-versos pesquisadores desenvolveram métodos eficientes de resolução, alternativos ao método tradicional. Algunsdestes trabalhos obtiveram resultados expressivos, alcançado coeficientes de complexidade próximos ao ideal teó-rico O(n2). Neste cenário, destacam-se os trabalhos desenvolvidos por Volker Strassen, Shmuel Winograd e DonCoppersmith.1Mestrado em Computação Aplicada, UPF, Campus 1 - BR 285 - Passo Fundo (RS) - Brasil{[email protected]}

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 1

Page 2: Multiplicação de matrizes

O presente artigo apresenta uma breve descrição acerca do problema da multiplicação entre matrizes, des-crevendo os principais aspectos teóricos envolvidos e trabalhos de destaque na busca por métodos de resoluçãomais eficientes. Para tal, a Seção 2 apresenta importantes conceitos matemáticos relacionados às matrizes e suasoperações. Na Seção 3, a importância do cálculo do produto entre matrizes e os principais trabalhos relacionados amétodos de maior eficiência são abordados. Por fim, na Seção 4 traz algumas considerações a respeito dos assuntosabordados.

2 Matrizes

Uma matriz é um arranjo retangular composto por m linhas e n colunas . Cada elemento que a compõe éidentificado em termos da linha e coluna a qual pertence [1, 2]. Desta forma, dada uma matriz Mm×n qualquer,onde m = 3 e n = 4, a representação de cada um dos elementos mij é expressa conforme descrito em (1).

M3×4 =

m11 m12 m13 m14

m21 m22 m23 m24

m31 m32 m33 m34

(1)

Quando o número de colunas m for igual ao números de linhas n, a matriz é dita quadrada de ordem n. Asmatrizes quadradas têm importantes propriedades, dentre as quais merecem especial destaque a presença de umadiagonal principal e de uma diagonal secundária. Os elementos que compõem a diagonal principal de uma matrizM são todos aqueles cujos índices de linha e coluna são iguais ( mij , onde i = j) [3]. Já a diagonal secundáriaé definida como todo elemento mij onde i + j = n + 1. A matriz M3 descrita em (2) é um exemplo de matrizquadrada de ordem 3.

M3 =

12 30 4013 15 4814 50 22

(2)

Na matriz M3 (2), a diagonal principal é composta pelos elementos p = {12, 15, 22}. Já a diagonal secun-dária é definida pelos elementos s = {40, 15, 14}. Desconsiderando-se os elementos não pertencentes a nenhumadas diagonais, pode-se observar a matriz M3 somente em termos de sua diagonal principal (p) e secundária (s),conforme apresentado em (3).

Mp =

12 . . . . . .. . . 15 . . .. . . . . . 22

Ms =

. . . . . . 40. . . 15 . . .14 . . . . . .

(3)

A matriz identidade é um tipo especial de matriz quadrada, caracterizada pela presença de valores 1 emtodos os elementos que compõem a diagonal principal. Por sua vez, todos os demais elementos da matriz identidadecontém valores iguais a zero. A matriz I3×3 (4) é um exemplo de matriz identidade de ordem 3. A principal funçãode uma matriz identidade é servir de elemento neutro nas operações de multiplicação [3].

I3 =

1 0 00 1 00 0 1

(4)

Em termos computacionais, as matrizes são representadas com uso de tipos estruturados de dados, os quaispermitem agregar em uma mesma variável diversos valores com relação estrutural entre si. Os tipos de dadosestruturados são abstraídos pelas linguagens de programação na forma de arranjos e registros. Em vista dos arranjoscaracterizam-se pela presença de elementos do mesmo tipo em todas as posições, eles são as estruturas comumenteutilizadas para representar as matrizes [4].

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 2

Page 3: Multiplicação de matrizes

Desta forma, quando transposta para uma linguagem computacional, uma matriz é expressa como um ar-ranjo bidimensional, onde os elementos são identificados em relação à posição que ocupam nas dimensões consi-deradas. O pseudocódigo descrito na sequência apresenta um algoritmo genérico simples, que declara uma matrizA, quadrada e de ordem 2 (linha 1) e atribui à posição (1, 2) o valor 3 (linha 2). Os índices (1, 2) utilizados naatribuição podem ser interpretados tanto como (linha, coluna) quanto (coluna, linha), dependendo unicamenteda convenção utilizada.

1. define A[2][2];2. A[1][2] = 3;

2.1 Operações envolvendo matrizes

Os elementos de uma matriz pertencem a algum sistema numérico, como reais, inteiros ou complexos, porexemplo. Em vista disso, torna-se possível aplicar operações como soma, subtração e multiplicação em matri-zes [2]. Dentre as operações aritméticas possíveis envolvendo matrizes, a multiplicação e a soma entre matrizesmerecem especial destaque.

Conceitualmente, para que duas matrizes possam ser multiplicadas é necessário que o número de colunasda primeira seja igual ao número de linhas da segunda [3]. Desta forma, Ma×b×Nc×d só é possível quando b = c.Logo, a matriz resultante do produto de Ma×b ×Nc×d é uma matriz Pa×d.

Os elementos pij da matriz Pa×d resultante são obtidos pela soma do produto de cada um dos elementos dai−ésima linha de M pelo elemento correspondente da j−ésima coluna de N . Assim, a equação matemática que

define a multiplicação entre duas matrizes é expressa como pij =a∑

k=1

mik × nkj .

Considerando-se as matrizes M2×2 e N2×3 abaixo definidas, o produto de P = M ×N é obtido conformesegue:

(I) M2×2 =

[1 23 4

]

(II) N2×3 =

[5 6 78 9 10

]

(III) P2×3 = M2×2 ×N2×3 =

[1× 5 + 2× 8 1× 6 + 2× 9 1× 7 + 2× 103× 5 + 4× 8 3× 6 + 4× 9 3× 7 + 4× 10

]

(IV) P2×3 =

[21 24 2747 54 61

]

A multiplicação entre matrizes não é comutativa, ou seja, o produto de A×B é diferente de B ×A. Já noque diz respeito à associatividade, o resultado de A×B×C é idêntico ao resultado de A× (B × C). Com relaçãoao elemento neutro, a multiplicação de uma matriz quadrada A pela matriz identidade I resulta na própria matrizA. Em vista disso, o elemento neutro do cálculo do produto entre matrizes é uma matriz identidade [1].

A adição é outra operação relevante no contexto das matrizes. Assim como ocorre na multiplicação, deve-seobservar o tamanho das matrizes envolvidas para realizar a operação. Duas matrizes somente podem ser somadasentre si quando ambas apresentam o mesmo tamanho, ou seja, mesmo número de linhas e de colunas. A matrizresultante da operação de adição terá os mesmo tamanho que as matrizes originais [3].

Considerando-se duas matrizes quaisquer A e B, ambas com mesmo número de linhas e colunas, a operaçãode adição C = A+B é realizada somando-se cada elemento da primeira matriz A pelo elemento correspondenteda segunda matriz B. Assim, cada elemento da matriz resultante C pode ser expresso pela equação cij = aij+bij .

Supondo-se que as matrizes A e B sejam matrizes quadradas de ordem 2, definidas conforme segue, aadição C = A+B é obtida por:

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 3

Page 4: Multiplicação de matrizes

(I) A2×2 =

[1 23 4

]

(II) B2×2 =

[5 −6−8 9

]

(III) C2×2 = A2×2 +B2×2 =

[1 + 5 2− 63− 8 4 + 9

]

(IV) C2×2 =

[6 −4−5 13

]

3 Multiplicação de matrizes e a Computação

A multiplicação de matrizes é uma das operações mais básicas para a computação numérica e simbólica[5, 7]. Seu uso está ligado à resolução de diversos outros problemas de álgebra linear, computação polinomial,fatoração polinomial, solução de sistemas polinomiais, transformações geométricas, entre outros [7].

A despeito do seu amplo uso, o cálculo do produto entre matrizes é uma operação que apresenta elevadacomplexidade assintótica. Por muito tempo permaneceu a crença de que o algoritmo ótimo para multiplicaçãode matrizes teria complexidade O(n3) e soluções com valores abaixo disso não seriam possíveis. Contudo, essabarreira foi quebrada quando Volker Strassen provou ser possível multiplicar duas matrizes quadradas com umaquantidade menor de operações de multiplicação, fazendo uso de uma abordagem de divisão e conquista durante oprocesso.

A partir do trabalho de Strassen, outros métodos foram desenvolvidos e permitiram alcançar coeficientesde complexidade ainda menores, mais próximos da meta teórica O(n2) [5]. Em sua maioria, os métodos deotimização do cálculo do produto de matrizes visam eliminar o máximo possível a quantidade de multiplicaçõesnecessárias, substituindo-as por operações de soma ou subtração sempre que possível.

A seguir, os principais algoritmos (ou métodos) de resolução do produto entre matrizes são apresentadosem maiores detalhes.

3.1 Método Tradicional

O algoritmo tradicional para produto de matrizes n×n tem complexidade assintótica igual a O(n3), execu-tando (n3) multiplicações e n2(n− 1) adições [2]. Até o final da década de 1960, este algoritmo era consideradoótimo e havia a crença de que a complexidade O(n3) não poderia ser reduzida [5].

O procedimento tradicional consiste basicamente de três laços aninhados i, j e k. O laço mas externo iitera sobre as linhas (linha 4), o laço j itera sobre as colunas (linha 5) e o laço mais interno k efetua o somatóriogerando o valor de cada elemento da matriz resultante (linha 6).

O pseudocódigo abaixo apresenta o procedimento tradicional de produto de matrizes.

1. define A[2][2];2. define B[2][3];3. define C[2][3];4. para cada i de 1 a 2 faça:5. para cada j de 1 a 3 faça:6. para cada k de 1 a 2 faça:7. C[i][j] = C[i][j] + A[i][k]*B[k][j];8. fim para;9. fim para;10. fim para;

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 4

Page 5: Multiplicação de matrizes

3.2 Método de Strassen

O método de Strassen foi desenvolvido pelo matemático alemão Volker Strassen em 1969. Diferentementedo algoritmo tradicional, a versão de Strassen apresenta complexidade assintótica relativamente menor, alcançandoo valor de O(nlog 7) no produto de duas matrizes quadradas de ordem n. Ao todo, o método desenvolvido porStrassen requer 7

(n2

)3multiplicações e (11n− 4)×

(n2

4

)somas/subtrações [11].

O princípio utilizado por Strassen na construção do algoritmo foi o método da divisão e conquista, tendopor principal meta reduzir o número de multiplicações necessárias durante o processo. Com isso, Strassen provouser possível multiplicar duas matrizes quadradas de ordem 2 utilizando 7 multiplicações e 18 somas ou subtrações[6]. Pelo algoritmo tradicional, a mesma operação faria uso de 8 multiplicações e 4 somas.

Uma restrição importante do algoritmo de Strassen refere-se à ordem das matrizes. Somente pode-se aplicareste método quando a ordem for uma potência de 2 (21, 22, ..., 2n). Em termos práticos, essa restrição podeser facilmente tratada adicionando-se linhas ou colunas com elementos de valor 0 até ser alcançada a ordemimediatamente posterior que seja uma potência de 2.

Supondo-se o cálculo do produto entre duas matrizes quadradas A e B de ordem 2, e uma terceira matriz Cde mesma ordem resultante do produto A×B, definidas por

C

[c11 c12c21 c22

]= A

[a11 a12a21 a22

]×B

[b11 b12b21 b22

]

é possível definir cada um dos elementos resultantes cij nos seguintes termos [6]:

(I) c11 = ((a11 × b11) + (a12 × b21))

(II) c12 = ((a11 × b21) + (a12 × b22))

(III) c21 = ((a21 × b11) + (a22 × b21))

(IV) c22 = ((a21 × b12) + (a22 × b22))

As quatro equações acima representam uma abordagem de divisão e conquista para resolução da multipli-cação de matrizes. Contudo, conforme apresentam-se, tais equações não oferecem qualquer melhoria em termosde complexidade assintótica, uma vez que continuam sendo necessárias 8 multiplicações para alcançar o resultado.

Em vista disso, ao construir seu método, Strassen preocupou-se em buscar um conjunto tal de equações queminimizasse o número de multiplicações envolvidas. Como resultado, ele chegou a um conjunto de sete equaçõesenvolvendo submatrizes [5]. Além de reduzir o número de operações de multiplicações necessárias, as equaçõesdefinidas por Strassen realizam a divisão do problema em partes menores, mantendo a abordagem de divisão econquista como estratégia de resolução. As equações desenvolvidas estão descritas na sequência.

(I) P1 = (A11 +A22)× (B11 +B22)

(II) P2 = (A21 +A22)×B11

(III) P3 = A11 × (B12 −B22)

(IV) P4 = A22 × (B21 −B11)

(V) P5 = (A11 +A12)×B22

(VI) P6 = (A21 −A11)× (B11 +B12)

(VII) P7 = (A12 −A22)× (B21 +B22)

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 5

Page 6: Multiplicação de matrizes

A última etapa do método de Strassen representa o momento da conquista, ou seja, a etapa em que os seteresultados parciais obtidos pelas equações definidas anteriormente são unidos para obtenção do resultado final.Para tal, cada um dos elementos resultantes cij é expresso nos termos das quatro equações descritas a seguir.

(I) C11 = P1 + P4 − P5 + P7

(II) C12 = P3 + P5

(III) C21 = P2 + P4

(IV) C22 = P1 + P3 − P2 + P6

Considerando-se as matrizes A3

1 2 34 5 67 8 9

e B3

1 4 72 5 83 6 9

, o produto A×B utilizando o método

de Strassen é obtido por meio das seguintes etapas:

(I) Certificar-se que a ordem das matrizes é uma potência de 2. Caso não seja, deve-se acrescentar linhas ecolunas com elementos 0 até que a condição seja satisfeita. No caso do produto A3 × B3 será necessárioacrescentar uma linha e uma coluna em cada uma das matrizes.

A4

1 2 3 04 5 6 07 8 9 00 0 0 0

B4

1 4 7 02 5 8 03 6 9 00 0 0 0

(II) Dividir a ordem de ambas as matrizes por dois. Como resultado, serão criadas quatro submatrizes de cada

uma das matrizes originais.

A11

[1 24 5

]A12

[3 06 0

]A21

[7 80 0

]A22

[9 00 0

]

B11

[1 42 5

]B12

[7 08 0

]B21

[3 60 0

]B22

[9 00 0

](III) Com base nas submatrizes, calcula-se P1 = (A11 +A22)× (B11 +B22).

P1 =

([1 24 5

]+

[9 00 0

])×([

1 42 5

]+

[9 00 0

])→[

104 5050 41

](IV) Com base nas submatrizes, calcula-se P2 = (A21 +A22)×B11.

P2 =

([7 80 0

]+

[9 00 0

])×[

1 42 5

]→[

32 1040 0

](V) Com base nas submatrizes, calcula-se P3 = A11 × (B12 −B22).

P3 =

([7 80 0

]+

[9 00 0

])×[

1 42 5

]→[

32 1040 0

](VI) Com base nas submatrizes, calcula-se P4 = A22 × (B21 −B11).

P4 =

[1 24 5

]×([

7 08 0

]−[

9 00 0

])→[

14 032 0

]

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 6

Page 7: Multiplicação de matrizes

(VII) Com base nas submatrizes, calcula-se P5 = (A11 +A12)×B22.

P5 =

([1 24 5

]×[

3 06 0

])×[

9 00 0

]→[

6 090 0

](VIII) Com base nas submatrizes, calcula-se P6 = (A21 −A11)× (B11 +B12).

P6 =

([7 80 0

]−[

1 24 5

])×([

1 42 5

]+

[7 88 0

])→[

108 54-82 -41

](IX) Com base nas submatrizes, calcula-se P7 = (A12 −A22)× (B21 +B22).

P7 =

([3 06 0

]−[

9 00 0

])×([

3 60 0

]+

[9 00 0

])→[

-72 -3672 36

](X) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C11 = P1+P4−

P5 + P7

C11 =

[104 5050 41

]+

[18 180 0

]−[

36 090 0

]+

[−72 −3672 36

]→[

14 3232 77

](XI) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C12 = P3 + P5.

C12 =

[14 032 0

]+

[36 090 0

]→[

50 0122 0

](XII) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C21 = P2 + P4

C21 =

[32 1040 0

]+

[18 180 0

]→[

50 1220 0

](XIII) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C22 = P1+P3−

P2 + P6

C22 =

[104 5050 41

]+

[14 032 0

]−[

32 1040 0

]+

[108 54−82 −41

]→[

194 00 0

](XIV) Compor a matriz resultado C3 utilizando as submatrizes C11, C12, C21 e C22.

C3 =

[C11 C12

C21 C22

]→

[

14 3232 77

] [50 0122 0

][

50 1220 0

] [194 00 0

]→

14 32 50 032 77 122 050 122 194 00 0 0 0

C3 =

14 32 5032 77 12250 122 194

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 7

Page 8: Multiplicação de matrizes

3.3 Método de Winograd

Em 1987, Shmuel Winograd desenvolveu um método para resolução do produto de matrizes que realizavatrês somas a menos que o algoritmo de Strassen, trazendo uma pequena contribuição no tempo de execução total doalgoritmo [11]. Em termos de complexidade assintótica, contudo, a variante de Winograd não reduziu o coeficientede complexidade obtido por Strassen. Ao todo, a variante criada por Winograd requer 7

(n2

)3multiplicações e(

19n3

8

)− n2 somas/subtrações [11].

Se comparado ao método desenvolvido por Strassen, a abordagem de Winograd requer um número maiorde passos para realizar o cálculo do produto entre duas matrizes quadradas. No total, são necessárias 22 equaçõespara se chegar ao resultado final [11].

O cálculo do produto entre duas matrizes quadradas, expresso por

C

[c11 c12c21 c22

]= A

[a11 a12a21 a22

]×B

[b11 b12b21 b22

],

utilizando o método desenvolvido por Winograd na resolução, requer a execução dos passos descritos na sequência[10]. No que diz respeito à ordem das matrizes a serem multiplicadas, as mesmas regras aplicadas ao método deStrassen também são aplicáveis no método de Winograd.

(I) S1 = A21 +A22

(II) S2 = S1 −A11

(III) S3 = A11 −A21

(IV) S4 = A12 − S2

(V) T1 = B12 −B11

(VI) T2 = B22 − T1

(VII) T3 = B22 −B12

(VIII) T4 = B21 − T2

(IX) P1 = A11 ×B11

(X) P2 = A12 ×B21

(XI) P3 = S1 × T1

(XII) P4 = S2 × T2

(XIII) P5 = S3 × T3

(XIV) P6 = S4 ×B22

(XV) P7 = A22 × T4

(XVI) U1 = P1 + P2

(XVII) U2 = P1 + P4

(XVIII) U3 = U2 + P5

(XIX) U4 = U3 + P7

(XX) U5 = U3 + P3

(XXI) U6 = U2 + P3

(XXII) U7 = U6 + P6

(XXIII) C11 = U1

(XXIV) C12 = U7

(XXV) C21 = U4

(XXVI) C22 = U5

3.4 Método Coppersmith-Winograd

O algoritmo Coppersmith-Winograd (CW) foi criado pelos americanos Don Coppersmith e Shmuel Wi-nograd em 1987 [8]. Utilizando como base conceitual os trabalhos antecessores, Coppersmith e Winograd cons-truíram um algoritmo que alcançou complexidade assintótica O(n2.376), sendo o primeiro algoritmo na história aatingir coeficiente de complexidade inferior a 2.5 [5, 9].

Por mais de duas décadas, o algoritmo CW permaneceu com o título do mais eficiente algoritmo conhecidopara o cálculo do produto entre matrizes. Contudo, sua contribuição foi muito mais teórica do que prática, vistoque não é aplicável para problemas de tamanho comum [9].

3.5 Evolução dos métodos e considerações

A abordagem desenvolvida por Strassen abriu caminho para o desenvolvimento de vários outros métodos.Além dos trabalhos mais conhecidos, como os de Strassen, Coppersmith e Winograd, outros pesquisadores tiveramimportante colaboração na busca por um expoente de complexidade cada vez mais próximo do ideal teórico O(n2)para o problema do produto de matrizes.

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 8

Page 9: Multiplicação de matrizes

Na Tabela 1 apresentam-se os principais marcos das pesquisas por métodos de menor complexidade paramultiplicação de matrizes [7, 5]. Uma importante e recente contribuição ocorreu em 2012, quando Virginia Vas-sileska Williams, em seu artigo intitulado “Multiplying matrices faster than Coppersmith-Winograd”, provou terdesenvolvido uma abordagem para multiplicação de matrizes com complexidade assintótica O(n2.3729), alcan-çando um expoente de complexidade inferior ao método CW. Por meio do seu método, Williams quebrou umperíodo de mais de 20 anos de hegemonia do método CW como o mais eficiente algoritmo conhecido para ocálculo do produto entre matrizes.

Tabela 1: Evolução dos coeficientes de complexidade para o problema do cálculo do produto entre matrizesAno Autor(es) Complexidade1969 Strassen log2 8 ≈ 2.8071979 Bini, Capovani, Romani e Lotti’s 3 log12 10 ≈ 2.7791981 Schönhage log6 5 ≈ 2.6941986 Strassen (laser method) 2.481989 Coppersmith e Winograd 2.3762012 Virginia Vassilevska Williams 2.3729

Apesar da considerável redução no expoente de complexidade obtida pelos métodos não-tradicionais, aabordagem tradicional continua ainda sendo amplamente utilizada. Se considerado o método desenvolvido porStrassen, por exemplo, os seguintes fatores não o tornam uma boa escolha para todos os casos [2]:

• O fator oculto no tempo de execução do método de Strassen é maior do que o fator constante encontrado nométodo tradicional.

• Quando as matrizes são esparsas (com grande quantidade de elementos iguais a zero), os métodos específicospara este tipo de matriz são os mais adequados.

• O método de Strassen é numericamente mais instável que o método tradicional devido a maior probabilidadede erros de arredondamento.

• As submatrizes necessárias nos passos intermediários do método de Strassen consomem espaço.

As considerações feitas para o método de Strassen aplicam-se também à variante criada por Winograd, vistoque ambos compartilham a mesma construção matemática. Quanto aos demais métodos desenvolvidos a partir dotrabalho de Strassen, percebe-se muito mais contribuições teóricas do que práticas em seu uso. O método deCoppersmith-Winograd, por exemplo, é mais eficiente que o método de Strassen quando as matrizes consideradasapresentam tamanho absurdamente grande, na casa de milhares de bilhões, em razão do elevado valor da constanteoculta de complexidade [7].

Considerando-se unicamente o número de somas e multiplicações realizadas pelos métodos tradicional, deStrassen e de Winograd para matrizes com ordem variando de 21 a 28, o total de operações necessárias para amultiplicação de matrizes em cada um dos casos é apresentado na Tabela 2. Pelos números obtidos fica claro quea medida que o tamanho da matriz cresce, a diferença no número de multiplicações necessárias entre a abordagemtradicional e as demais se acentua. De modo inverso, a quantidade de operações de soma no método tradicional ésempre consideravelmente menor que a quantidade necessária nos demais.

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 9

Page 10: Multiplicação de matrizes

Tabela 2: Comparação entre os métodos em relação ao número de operações de somas e multiplicaçõesnecessárias.

Tam. (n) Tradicional Strassen Winograd

Multiplicações Somas Multiplicações Somas Multiplicações Somas2 8 4 7 18 7 154 64 48 56 160 56 1368 512 448 448 1.344 448 1.152

16 4.096 3.840 3.584 11.008 3.584 9.47232 32.768 31.744 28.672 89.088 28.672 76.80064 262.144 258.048 229.376 716.800 229.376 618.496

128 2.097.152 2.080.768 1.835.008 5.750.784 1.835.008 4.964.352256 16.777.216 16.711.680 14.680.064 46.071.808 14.680.064 39.780.352

4 Considerações Finais

O cálculo do produto entre matrizes é umas das operações mais básicas tanto para a matemática quanto paraa computação. Em vista da sua importância, bem como da sua complexidade computacional inerente, a busca pormelhores métodos de resolução têm sido o desafio de muitos estudiosos da área desde a década de 1960.

No caminho que entremeia a maior complexidade O(n3) e a complexidade ideal O(n2), destaca-se o traba-lho do matemático Volker Strassen, em 1969. Além de ser o primeiro a provar a existência de uma abordagem maiseficiente que a tradicional, Strassen criou um arcabouço teórico amplamente utilizado em pesquisas posteriores.

Em 1987, cerca de 18 anos após a descoberta de Strassen, os americanos Don Coppersmith e ShmuelWinograd desenvolveram o método que viria a ser o mais eficiente conhecido para o cálculo do produto entrematrizes por mais de duas décadas. Esta marca veio a ser superada somente em 2012, com o trabalho publicadopor Virginia Vassileska Williams, intitulado “Multiplying matrices faster than coppersmith-winograd”.

Percebe-se tanto no trabalho de Strassen quanto nos demais certas características em comum. Uma delas é adecomposição das matrizes a serem multiplicadas em blocos menores. Por meio destes blocos busca-se reduzir aomáximo o número de operações de multiplicação necessária, substituindo-as sempre que possível por operações desoma e substração. Como operações de soma e subtração tem menor complexidade que operações de multiplicação,a troca de uma pela outra permite reduzir a complexidade final do problema. Em vista da divisão em blocosmenores e posterior obtenção dos resultados por meio da junção dos resultados parciais, observa-se que boa partedos métodos eficientes para multiplicação de matrizes fazem uso da técnica de divisão e conquista.

Assim como ocorre na resolução de outros problemas, o método mais adequado para o cálculo do pro-duto entre matrizes depende do contexto. Desconsiderando-se aqueles de cunho mais teórico, como o métodoCoppersmith-Winograd, por exemplo, a escolha pelo melhor método deve levar em consideração, principalmente,o tamanho das matrizes a serem multiplicadas. A aplicação do método de Strassen em matrizes muito pequenas,por exemplo, talvez não seja mais adequada, visto que o método tradicional de resolução seria de boa medida.Neste sentido, a principal questão está em dimensionar numericamente a percepção empírica do que é “pequeno”e “grande” para facilitar a escolha por um ou outro método.

Embora tenham havido grandes avanços na construção de abordagens para multiplicação de matrizes maiseficientes, o método tradicional continua sendo uma ótima escolha, não devendo ser desprezado ou desconsideradosomente pela sua maior complexidade. É preciso levar em consideração que, comparado aos demais, o métodotradicional é de simples implementação e extremamente econômico no uso de espaço em memória, visto que nãofaz uso de variáveis temporárias.

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 10

Page 11: Multiplicação de matrizes

Referências

[1] Encyclopedia of Mathmatics (online). Disponível em: <http://www.encyclopediaofmath.org/index.php?title=Matrix&oldid=30641>. Acesso em: 24 abr. 2014.

[2] CORMEN, T. H. et al. Algoritmos: Teoria e Prática. Rio de Janeiro: Editora Campus Ltda, 2002.

[3] SANTOS, R. J. et al. Matrizes, Vetores e Geometria Analítica. Belo Horizonte. Imprensa Universitária daUniversidade Federal de Minas Gerais, 2012.

[4] EDELWEISS, N. Estruturas de Dados. Bookman, 2011.

[5] WILLIAMS, V. V. Multiplying matrices faster than Coppersmith-Winograd. Proceedings of the 44th sympo-sium on Theory of Computing - STOC ’12, ACM Press, 2012.

[6] Design and Analysis of Algorithms: Lecture 12. Ohio University. Disponível em: <http://oucsace.cs.ohiou.edu/~razvan/courses/cs4040/lecture12.pdf>. Acesso em: 3 jun. 2014.

[7] ISLAM, N. Optimization Techniques For Matrix Multiplication. Dissertação (Mestrado em Ciência da Com-putação) — University of Western Ontario, Ontario, 2009.

[8] ROBINSON, S. Toward an optimal algorithm for matrix multiplication. Disponível em: <http://www.siam.org/pdf/news/174.pdf>. Acesso em: 14 jun. 2014.

[9] P. D. Alberto. Adaptive Winograd’s Matrix Multiplications. ACM Transactions on Mathematical Software,vol. V, 2009.

[10] WANG, K. Linear Algebra System, 2007. Disponível em: <http://www.cs.bath.ac.uk/~mdv/courses/CM30082/projects.bho/2006-7/Wang-K-dissertation-2006-7.pdf>. Acesso em: 14 jun. 2014.

[11] MARQUEZAN et al. Análise de Complexidade e Desempenho de Algoritmos para Multiplicação de Matri-zes. Escola Regional de Alto Desempenho – ERAD. São Leopoldo, RS, Brasil. 2002.

Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 11