SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
Multiplicação de Matrizes
Do 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 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(n3
), 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(n2
). Neste cenário, destacam-se os trabalhos desenvolvidos por Volker Strassen, Shmuel Winograd e Don
Coppersmith.
1Mestrado em Computação Aplicada, UPF, Campus 1 - BR 285 - Passo Fundo (RS) - Brasil
{83473@upf.br}
Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 1
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ção
mais eficientes. Para tal, a Seção 2 apresenta importantes conceitos matemáticos relacionados às matrizes e suas
operações. Na Seção 3, a importância do cálculo do produto entre matrizes e os principais trabalhos relacionados a
métodos de maior eficiência são abordados. Por fim, na Seção 4 traz algumas considerações a respeito dos assuntos
abordados.
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. As
matrizes quadradas têm importantes propriedades, dentre as quais merecem especial destaque a presença de uma
diagonal principal e de uma diagonal secundária. Os elementos que compõem a diagonal principal de uma matriz
M 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 matriz
quadrada de ordem 3.
M3 =


12 30 40
13 15 48
14 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 nenhuma
das 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 em
todos os elementos que compõem a diagonal principal. Por sua vez, todos os demais elementos da matriz identidade
contém valores iguais a zero. A matriz I3×3 (4) é um exemplo de matriz identidade de ordem 3. A principal função
de uma matriz identidade é servir de elemento neutro nas operações de multiplicação [3].
I3 =


1 0 0
0 1 0
0 0 1

 (4)
Em termos computacionais, as matrizes são representadas com uso de tipos estruturados de dados, os quais
permitem agregar em uma mesma variável diversos valores com relação estrutural entre si. Os tipos de dados
estruturados são abstraídos pelas linguagens de programação na forma de arranjos e registros. Em vista dos arranjos
caracterizam-se pela presença de elementos do mesmo tipo em todas as posições, eles são as estruturas comumente
utilizadas 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
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 matriz
A, quadrada e de ordem 2 (linha 1) e atribui à posição (1, 2) o valor 3 (linha 2). Os índices (1, 2) utilizados na
atribuição podem ser interpretados tanto como (linha, coluna) quanto (coluna, linha), dependendo unicamente
da 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, por
exemplo. 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 matrizes
merecem especial destaque.
Conceitualmente, para que duas matrizes possam ser multiplicadas é necessário que o número de colunas
da 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 da
i−é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 conforme
segue:
(I) M2×2 =
1 2
3 4
(II) N2×3 =
5 6 7
8 9 10
(III) P2×3 = M2×2 × N2×3 =
1 × 5 + 2 × 8 1 × 6 + 2 × 9 1 × 7 + 2 × 10
3 × 5 + 4 × 8 3 × 6 + 4 × 9 3 × 7 + 4 × 10
(IV) P2×3 =
21 24 27
47 54 61
A multiplicação entre matrizes não é comutativa, ou seja, o produto de A × B é diferente de B × A. Já no
que diz respeito à associatividade, o resultado de A×B ×C é idêntico ao resultado de A×(B × C). Com relação
ao elemento neutro, a multiplicação de uma matriz quadrada A pela matriz identidade I resulta na própria matriz
A. 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-se
observar o tamanho das matrizes envolvidas para realizar a operação. Duas matrizes somente podem ser somadas
entre si quando ambas apresentam o mesmo tamanho, ou seja, mesmo número de linhas e de colunas. A matriz
resultante 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ção
de adição C = A + B é realizada somando-se cada elemento da primeira matriz A pelo elemento correspondente
da 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, a
adiçã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
(I) A2×2 =
1 2
3 4
(II) B2×2 =
5 −6
−8 9
(III) C2×2 = A2×2 + B2×2 =
1 + 5 2 − 6
3 − 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 elevada
complexidade assintótica. Por muito tempo permaneceu a crença de que o algoritmo ótimo para multiplicação
de matrizes teria complexidade O(n3
) e soluções com valores abaixo disso não seriam possíveis. Contudo, essa
barreira foi quebrada quando Volker Strassen provou ser possível multiplicar duas matrizes quadradas com uma
quantidade menor de operações de multiplicação, fazendo uso de uma abordagem de divisão e conquista durante o
processo.
A partir do trabalho de Strassen, outros métodos foram desenvolvidos e permitiram alcançar coeficientes
de complexidade ainda menores, mais próximos da meta teórica O(n2
) [5]. Em sua maioria, os métodos de
otimização do cálculo do produto de matrizes visam eliminar o máximo possível a quantidade de multiplicações
necessá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 apresentados
em 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 i
itera 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ório
gerando 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
3.2 Método de Strassen
O método de Strassen foi desenvolvido pelo matemático alemão Volker Strassen em 1969. Diferentemente
do algoritmo tradicional, a versão de Strassen apresenta complexidade assintótica relativamente menor, alcançando
o valor de O(nlog 7
) no produto de duas matrizes quadradas de ordem n. Ao todo, o método desenvolvido por
Strassen requer 7 n
2
3
multiplicaçõ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, tendo
por principal meta reduzir o número de multiplicações necessárias durante o processo. Com isso, Strassen provou
ser 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 aplicar
este método quando a ordem for uma potência de 2 (21
, 22
, ..., 2n
). Em termos práticos, essa restrição pode
ser facilmente tratada adicionando-se linhas ou colunas com elementos de valor 0 até ser alcançada a ordem
imediatamente 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 C
de mesma ordem resultante do produto A × B, definidas por
C
c11 c12
c21 c22
= A
a11 a12
a21 a22
× B
b11 b12
b21 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 termos
de 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 que
minimizasse o número de multiplicações envolvidas. Como resultado, ele chegou a um conjunto de sete equações
envolvendo submatrizes [5]. Além de reduzir o número de operações de multiplicações necessárias, as equações
definidas por Strassen realizam a divisão do problema em partes menores, mantendo a abordagem de divisão e
conquista 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
A última etapa do método de Strassen representa o momento da conquista, ou seja, a etapa em que os sete
resultados 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 3
4 5 6
7 8 9

 e B3


1 4 7
2 5 8
3 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 e
colunas com elementos 0 até que a condição seja satisfeita. No caso do produto A3 × B3 será necessário
acrescentar uma linha e uma coluna em cada uma das matrizes.
A4




1 2 3 0
4 5 6 0
7 8 9 0
0 0 0 0



 B4




1 4 7 0
2 5 8 0
3 6 9 0
0 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 2
4 5
A12
3 0
6 0
A21
7 8
0 0
A22
9 0
0 0
B11
1 4
2 5
B12
7 0
8 0
B21
3 6
0 0
B22
9 0
0 0
(III) Com base nas submatrizes, calcula-se P1 = (A11 + A22) × (B11 + B22).
P1 =
1 2
4 5
+
9 0
0 0
×
1 4
2 5
+
9 0
0 0
→
104 50
50 41
(IV) Com base nas submatrizes, calcula-se P2 = (A21 + A22) × B11.
P2 =
7 8
0 0
+
9 0
0 0
×
1 4
2 5
→
32 104
0 0
(V) Com base nas submatrizes, calcula-se P3 = A11 × (B12 − B22).
P3 =
7 8
0 0
+
9 0
0 0
×
1 4
2 5
→
32 104
0 0
(VI) Com base nas submatrizes, calcula-se P4 = A22 × (B21 − B11).
P4 =
1 2
4 5
×
7 0
8 0
−
9 0
0 0
→
14 0
32 0
Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 6
(VII) Com base nas submatrizes, calcula-se P5 = (A11 + A12) × B22.
P5 =
1 2
4 5
×
3 0
6 0
×
9 0
0 0
→
6 0
90 0
(VIII) Com base nas submatrizes, calcula-se P6 = (A21 − A11) × (B11 + B12).
P6 =
7 8
0 0
−
1 2
4 5
×
1 4
2 5
+
7 8
8 0
→
108 54
-82 -41
(IX) Com base nas submatrizes, calcula-se P7 = (A12 − A22) × (B21 + B22).
P7 =
3 0
6 0
−
9 0
0 0
×
3 6
0 0
+
9 0
0 0
→
-72 -36
72 36
(X) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C11 = P1 +P4 −
P5 + P7
C11 =
104 50
50 41
+
18 18
0 0
−
36 0
90 0
+
−72 −36
72 36
→
14 32
32 77
(XI) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C12 = P3 + P5.
C12 =
14 0
32 0
+
36 0
90 0
→
50 0
122 0
(XII) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C21 = P2 + P4
C21 =
32 104
0 0
+
18 18
0 0
→
50 122
0 0
(XIII) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C22 = P1 +P3 −
P2 + P6
C22 =
104 50
50 41
+
14 0
32 0
−
32 104
0 0
+
108 54
−82 −41
→
194 0
0 0
(XIV) Compor a matriz resultado C3 utilizando as submatrizes C11, C12, C21 e C22.
C3 =
C11 C12
C21 C22
→






14 32
32 77
50 0
122 0
50 122
0 0
194 0
0 0






→




14 32 50 0
32 77 122 0
50 122 194 0
0 0 0 0




C3 =


14 32 50
32 77 122
50 122 194


Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 7
3.3 Método de Winograd
Em 1987, Shmuel Winograd desenvolveu um método para resolução do produto de matrizes que realizava
três somas a menos que o algoritmo de Strassen, trazendo uma pequena contribuição no tempo de execução total do
algoritmo [11]. Em termos de complexidade assintótica, contudo, a variante de Winograd não reduziu o coeficiente
de complexidade obtido por Strassen. Ao todo, a variante criada por Winograd requer 7 n
2
3
multiplicaçõ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 maior
de passos para realizar o cálculo do produto entre duas matrizes quadradas. No total, são necessárias 22 equações
para se chegar ao resultado final [11].
O cálculo do produto entre duas matrizes quadradas, expresso por
C
c11 c12
c21 c22
= A
a11 a12
a21 a22
× B
b11 b12
b21 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 de
Strassen 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 a
atingir 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 conhecido
para o cálculo do produto entre matrizes. Contudo, sua contribuição foi muito mais teórica do que prática, visto
que 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 tiveram
importante 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
Na Tabela 1 apresentam-se os principais marcos das pesquisas por métodos de menor complexidade para
multiplicaçã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 ter
desenvolvido 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 um
período de mais de 20 anos de hegemonia do método CW como o mais eficiente algoritmo conhecido para o
cálculo do produto entre matrizes.
Tabela 1: Evolução dos coeficientes de complexidade para o problema do cálculo do produto entre matrizes
Ano Autor(es) Complexidade
1969 Strassen log2 8 ≈ 2.807
1979 Bini, Capovani, Romani e Lotti’s 3 log12 10 ≈ 2.779
1981 Schönhage log6 5 ≈ 2.694
1986 Strassen (laser method) 2.48
1989 Coppersmith e Winograd 2.376
2012 Virginia Vassilevska Williams 2.3729
Apesar da considerável redução no expoente de complexidade obtida pelos métodos não-tradicionais, a
abordagem tradicional continua ainda sendo amplamente utilizada. Se considerado o método desenvolvido por
Strassen, 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 no
método tradicional.
• Quando as matrizes são esparsas (com grande quantidade de elementos iguais a zero), os métodos específicos
para 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 probabilidade
de 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, visto
que ambos compartilham a mesma construção matemática. Quanto aos demais métodos desenvolvidos a partir do
trabalho de Strassen, percebe-se muito mais contribuições teóricas do que práticas em seu uso. O método de
Coppersmith-Winograd, por exemplo, é mais eficiente que o método de Strassen quando as matrizes consideradas
apresentam tamanho absurdamente grande, na casa de milhares de bilhões, em razão do elevado valor da constante
oculta de complexidade [7].
Considerando-se unicamente o número de somas e multiplicações realizadas pelos métodos tradicional, de
Strassen e de Winograd para matrizes com ordem variando de 21
a 28
, o total de operações necessárias para a
multiplicação de matrizes em cada um dos casos é apresentado na Tabela 2. Pelos números obtidos fica claro que
a medida que o tamanho da matriz cresce, a diferença no número de multiplicações necessárias entre a abordagem
tradicional 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
Tabela 2: Comparação entre os métodos em relação ao número de operações de somas e multiplicações
necessárias.
Tam. (n) Tradicional Strassen Winograd
Multiplicações Somas Multiplicações Somas Multiplicações Somas
2 8 4 7 18 7 15
4 64 48 56 160 56 136
8 512 448 448 1.344 448 1.152
16 4.096 3.840 3.584 11.008 3.584 9.472
32 32.768 31.744 28.672 89.088 28.672 76.800
64 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.352
256 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 para
a computação. Em vista da sua importância, bem como da sua complexidade computacional inerente, a busca por
melhores 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 mais
eficiente 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 Shmuel
Winograd desenvolveram o método que viria a ser o mais eficiente conhecido para o cálculo do produto entre
matrizes por mais de duas décadas. Esta marca veio a ser superada somente em 2012, com o trabalho publicado
por 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 é a
decomposição das matrizes a serem multiplicadas em blocos menores. Por meio destes blocos busca-se reduzir ao
máximo o número de operações de multiplicação necessária, substituindo-as sempre que possível por operações de
soma 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 blocos
menores e posterior obtenção dos resultados por meio da junção dos resultados parciais, observa-se que boa parte
dos 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étodo
Coppersmith-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 mais
eficientes, o método tradicional continua sendo uma ótima escolha, não devendo ser desprezado ou desconsiderado
somente pela sua maior complexidade. É preciso levar em consideração que, comparado aos demais, o método
tradicional é de simples implementação e extremamente econômico no uso de espaço em memória, visto que não
faz 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
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 da
Universidade 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

Mais conteúdo relacionado

Mais procurados

Testes de especificação, diagnóstico e interpretação de Modelo OLS (Ordinary ...
Testes de especificação, diagnóstico e interpretação de Modelo OLS (Ordinary ...Testes de especificação, diagnóstico e interpretação de Modelo OLS (Ordinary ...
Testes de especificação, diagnóstico e interpretação de Modelo OLS (Ordinary ...Kleverton Saath
 
Factores Abióticos - Temperatura
Factores Abióticos - TemperaturaFactores Abióticos - Temperatura
Factores Abióticos - TemperaturaCatir
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonPriscila Mayumi
 
Plantas Tìpicas da Caatinga
Plantas Tìpicas da CaatingaPlantas Tìpicas da Caatinga
Plantas Tìpicas da Caatingagoretteleal
 
Guião into the wild 10º ano final
Guião into the wild 10º ano finalGuião into the wild 10º ano final
Guião into the wild 10º ano finalj_sdias
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 
Factores Bióticos....
Factores Bióticos....Factores Bióticos....
Factores Bióticos....Gabriela Bruno
 
Forças Policiais Em Portugal
Forças Policiais Em PortugalForças Policiais Em Portugal
Forças Policiais Em Portugalturma14EPAD
 
Trabalho de Geografia - Relevo Brasileiro
Trabalho de Geografia - Relevo BrasileiroTrabalho de Geografia - Relevo Brasileiro
Trabalho de Geografia - Relevo BrasileiroPedro Klein Garcia
 
Logica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoLogica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoRegis Magalhães
 
parque natural do vale do guadiana
parque natural do vale do guadianaparque natural do vale do guadiana
parque natural do vale do guadianaAnaGomes40
 
Metodos contraceptivos naturais
Metodos contraceptivos naturaisMetodos contraceptivos naturais
Metodos contraceptivos naturaiszeopas
 
Conceitos base de programação - parte 2
Conceitos base de programação - parte 2Conceitos base de programação - parte 2
Conceitos base de programação - parte 2João Piedade
 
Pluviômetro Caseiro
Pluviômetro CaseiroPluviômetro Caseiro
Pluviômetro Caseiroacianf
 
Psicologia - A memória
Psicologia - A memóriaPsicologia - A memória
Psicologia - A memóriaOlena Kolodiy
 

Mais procurados (20)

Aprendizagem 12º3
Aprendizagem 12º3Aprendizagem 12º3
Aprendizagem 12º3
 
Testes de especificação, diagnóstico e interpretação de Modelo OLS (Ordinary ...
Testes de especificação, diagnóstico e interpretação de Modelo OLS (Ordinary ...Testes de especificação, diagnóstico e interpretação de Modelo OLS (Ordinary ...
Testes de especificação, diagnóstico e interpretação de Modelo OLS (Ordinary ...
 
2 movimentos
2  movimentos2  movimentos
2 movimentos
 
Factores Abióticos - Temperatura
Factores Abióticos - TemperaturaFactores Abióticos - Temperatura
Factores Abióticos - Temperatura
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 
Plantas Tìpicas da Caatinga
Plantas Tìpicas da CaatingaPlantas Tìpicas da Caatinga
Plantas Tìpicas da Caatinga
 
Módulo 1 de PSI
Módulo 1 de PSIMódulo 1 de PSI
Módulo 1 de PSI
 
Guião into the wild 10º ano final
Guião into the wild 10º ano finalGuião into the wild 10º ano final
Guião into the wild 10º ano final
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Factores Bióticos....
Factores Bióticos....Factores Bióticos....
Factores Bióticos....
 
Forças Policiais Em Portugal
Forças Policiais Em PortugalForças Policiais Em Portugal
Forças Policiais Em Portugal
 
Trabalho de Geografia - Relevo Brasileiro
Trabalho de Geografia - Relevo BrasileiroTrabalho de Geografia - Relevo Brasileiro
Trabalho de Geografia - Relevo Brasileiro
 
Logica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoLogica Algoritmo 02 Algoritmo
Logica Algoritmo 02 Algoritmo
 
Algoritmo 04 - Estruturas de decisão
 Algoritmo 04 - Estruturas de decisão Algoritmo 04 - Estruturas de decisão
Algoritmo 04 - Estruturas de decisão
 
parque natural do vale do guadiana
parque natural do vale do guadianaparque natural do vale do guadiana
parque natural do vale do guadiana
 
Aula 9 - Estruturas Condicionais
Aula 9 - Estruturas CondicionaisAula 9 - Estruturas Condicionais
Aula 9 - Estruturas Condicionais
 
Metodos contraceptivos naturais
Metodos contraceptivos naturaisMetodos contraceptivos naturais
Metodos contraceptivos naturais
 
Conceitos base de programação - parte 2
Conceitos base de programação - parte 2Conceitos base de programação - parte 2
Conceitos base de programação - parte 2
 
Pluviômetro Caseiro
Pluviômetro CaseiroPluviômetro Caseiro
Pluviômetro Caseiro
 
Psicologia - A memória
Psicologia - A memóriaPsicologia - A memória
Psicologia - A memória
 

Destaque

Multiplicação de Matrizes
Multiplicação de MatrizesMultiplicação de Matrizes
Multiplicação de MatrizesDiego Lusa
 
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...Eduardo de Lucena Falcão
 
Multiplicacao de matrizes
Multiplicacao de matrizesMultiplicacao de matrizes
Multiplicacao de matrizesGlauber Cruz
 
Multiplicação de matrizes em cuda
Multiplicação de matrizes em cudaMultiplicação de matrizes em cuda
Multiplicação de matrizes em cudaJohn Tortugo
 
Aula de matrizes
Aula de matrizesAula de matrizes
Aula de matrizesBrumado
 
Matriz curric. matematica e.médio 2010
Matriz curric. matematica  e.médio 2010Matriz curric. matematica  e.médio 2010
Matriz curric. matematica e.médio 2010Creison
 
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio IIPlano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio IIElton Ribeiro da Cruz
 
Planejamento Matrizes e determinantes
Planejamento Matrizes e determinantesPlanejamento Matrizes e determinantes
Planejamento Matrizes e determinantesMarcieleEuzebio
 

Destaque (9)

Multiplicação de Matrizes
Multiplicação de MatrizesMultiplicação de Matrizes
Multiplicação de Matrizes
 
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
 
Multiplicacao de matrizes
Multiplicacao de matrizesMultiplicacao de matrizes
Multiplicacao de matrizes
 
Multiplicação de matrizes em cuda
Multiplicação de matrizes em cudaMultiplicação de matrizes em cuda
Multiplicação de matrizes em cuda
 
Aula 09 08-2013
Aula 09 08-2013Aula 09 08-2013
Aula 09 08-2013
 
Aula de matrizes
Aula de matrizesAula de matrizes
Aula de matrizes
 
Matriz curric. matematica e.médio 2010
Matriz curric. matematica  e.médio 2010Matriz curric. matematica  e.médio 2010
Matriz curric. matematica e.médio 2010
 
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio IIPlano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
 
Planejamento Matrizes e determinantes
Planejamento Matrizes e determinantesPlanejamento Matrizes e determinantes
Planejamento Matrizes e determinantes
 

Semelhante a Multiplicação de matrizes

Plano de trabalho matrizes e determinantes.
Plano de trabalho  matrizes e determinantes.Plano de trabalho  matrizes e determinantes.
Plano de trabalho matrizes e determinantes.José Américo Santos
 
Plano de trabalho matrizes e determinantes
Plano de trabalho  matrizes e determinantesPlano de trabalho  matrizes e determinantes
Plano de trabalho matrizes e determinantesJosé Américo Santos
 
Algebra linear apostila i prof inacio
Algebra linear apostila i   prof inacioAlgebra linear apostila i   prof inacio
Algebra linear apostila i prof inacioEng Amb
 
Implementação mód4 - encontro 1-
Implementação   mód4 - encontro 1-Implementação   mód4 - encontro 1-
Implementação mód4 - encontro 1-inechidias
 
Implementação módulo4
Implementação   módulo4 Implementação   módulo4
Implementação módulo4 inechidias
 
Geometria Analitica - Matrizes e Determinantes
Geometria Analitica - Matrizes e DeterminantesGeometria Analitica - Matrizes e Determinantes
Geometria Analitica - Matrizes e DeterminantesFernando Alves
 
Implementação mód4
Implementação   mód4 Implementação   mód4
Implementação mód4 inechidias
 
Implementação mód4 -
Implementação   mód4 - Implementação   mód4 -
Implementação mód4 - inechidias
 
Implementação mód4
Implementação   mód4 Implementação   mód4
Implementação mód4 inechidias
 
Apresentacao de mat.pptx
Apresentacao de mat.pptxApresentacao de mat.pptx
Apresentacao de mat.pptxkkkk819448
 
Implementação Currículo - módulo4 - Matrizes/Nºs Complexos
Implementação Currículo - módulo4 - Matrizes/Nºs ComplexosImplementação Currículo - módulo4 - Matrizes/Nºs Complexos
Implementação Currículo - módulo4 - Matrizes/Nºs Complexosinechidias
 
Implementação currículo- Módulo IV-Matrizes/Determinantes/Nºs Complexos
Implementação currículo- Módulo IV-Matrizes/Determinantes/Nºs ComplexosImplementação currículo- Módulo IV-Matrizes/Determinantes/Nºs Complexos
Implementação currículo- Módulo IV-Matrizes/Determinantes/Nºs Complexosinechidias
 
Atividade matrizes
Atividade matrizesAtividade matrizes
Atividade matrizesDani Martins
 
Matrices y Sistema de Ecuaciones Lineales ccesa007
Matrices y Sistema de Ecuaciones Lineales  ccesa007Matrices y Sistema de Ecuaciones Lineales  ccesa007
Matrices y Sistema de Ecuaciones Lineales ccesa007Demetrio Ccesa Rayme
 
Algoritmos e Programação: Matrizes
Algoritmos e Programação: MatrizesAlgoritmos e Programação: Matrizes
Algoritmos e Programação: MatrizesAlex Camargo
 

Semelhante a Multiplicação de matrizes (20)

Plano de trabalho matrizes e determinantes.
Plano de trabalho  matrizes e determinantes.Plano de trabalho  matrizes e determinantes.
Plano de trabalho matrizes e determinantes.
 
Plano de trabalho matrizes e determinantes
Plano de trabalho  matrizes e determinantesPlano de trabalho  matrizes e determinantes
Plano de trabalho matrizes e determinantes
 
Matrizes
MatrizesMatrizes
Matrizes
 
Algebra linear apostila i prof inacio
Algebra linear apostila i   prof inacioAlgebra linear apostila i   prof inacio
Algebra linear apostila i prof inacio
 
Implementação mód4 - encontro 1-
Implementação   mód4 - encontro 1-Implementação   mód4 - encontro 1-
Implementação mód4 - encontro 1-
 
Implementação módulo4
Implementação   módulo4 Implementação   módulo4
Implementação módulo4
 
Matrizes.pptx
Matrizes.pptxMatrizes.pptx
Matrizes.pptx
 
Geometria Analitica - Matrizes e Determinantes
Geometria Analitica - Matrizes e DeterminantesGeometria Analitica - Matrizes e Determinantes
Geometria Analitica - Matrizes e Determinantes
 
Aula_1_Matrizes.pptx
Aula_1_Matrizes.pptxAula_1_Matrizes.pptx
Aula_1_Matrizes.pptx
 
Implementação mód4
Implementação   mód4 Implementação   mód4
Implementação mód4
 
Implementação mód4 -
Implementação   mód4 - Implementação   mód4 -
Implementação mód4 -
 
Implementação mód4
Implementação   mód4 Implementação   mód4
Implementação mód4
 
Apresentacao de mat.pptx
Apresentacao de mat.pptxApresentacao de mat.pptx
Apresentacao de mat.pptx
 
Matrizes
MatrizesMatrizes
Matrizes
 
Implementação Currículo - módulo4 - Matrizes/Nºs Complexos
Implementação Currículo - módulo4 - Matrizes/Nºs ComplexosImplementação Currículo - módulo4 - Matrizes/Nºs Complexos
Implementação Currículo - módulo4 - Matrizes/Nºs Complexos
 
Implementação currículo- Módulo IV-Matrizes/Determinantes/Nºs Complexos
Implementação currículo- Módulo IV-Matrizes/Determinantes/Nºs ComplexosImplementação currículo- Módulo IV-Matrizes/Determinantes/Nºs Complexos
Implementação currículo- Módulo IV-Matrizes/Determinantes/Nºs Complexos
 
Atividade matrizes
Atividade matrizesAtividade matrizes
Atividade matrizes
 
Matrices y Sistema de Ecuaciones Lineales ccesa007
Matrices y Sistema de Ecuaciones Lineales  ccesa007Matrices y Sistema de Ecuaciones Lineales  ccesa007
Matrices y Sistema de Ecuaciones Lineales ccesa007
 
Matrizes
Matrizes Matrizes
Matrizes
 
Algoritmos e Programação: Matrizes
Algoritmos e Programação: MatrizesAlgoritmos e Programação: Matrizes
Algoritmos e Programação: Matrizes
 

Mais de Diego Lusa

Oracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciaisOracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciaisDiego Lusa
 
Cidades Inteligentes e Big Data
Cidades Inteligentes e Big DataCidades Inteligentes e Big Data
Cidades Inteligentes e Big DataDiego Lusa
 
Rede "Olhos do Bem"
Rede "Olhos do Bem"Rede "Olhos do Bem"
Rede "Olhos do Bem"Diego Lusa
 
Engenharia de software orientada a aspectos: do interesse ao aspecto
Engenharia de software orientada a aspectos: do interesse ao aspectoEngenharia de software orientada a aspectos: do interesse ao aspecto
Engenharia de software orientada a aspectos: do interesse ao aspectoDiego Lusa
 
Ordenação de pares e ímpares
Ordenação de pares e ímparesOrdenação de pares e ímpares
Ordenação de pares e ímparesDiego Lusa
 
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...Diego Lusa
 
O uso de tecnologias de big data na concepção e execução de estratégias de en...
O uso de tecnologias de big data na concepção e execução de estratégias de en...O uso de tecnologias de big data na concepção e execução de estratégias de en...
O uso de tecnologias de big data na concepção e execução de estratégias de en...Diego Lusa
 

Mais de Diego Lusa (9)

Oracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciaisOracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciais
 
Cidades Inteligentes e Big Data
Cidades Inteligentes e Big DataCidades Inteligentes e Big Data
Cidades Inteligentes e Big Data
 
Oracle XML DB
Oracle XML DBOracle XML DB
Oracle XML DB
 
JQuery Mobile
JQuery MobileJQuery Mobile
JQuery Mobile
 
Rede "Olhos do Bem"
Rede "Olhos do Bem"Rede "Olhos do Bem"
Rede "Olhos do Bem"
 
Engenharia de software orientada a aspectos: do interesse ao aspecto
Engenharia de software orientada a aspectos: do interesse ao aspectoEngenharia de software orientada a aspectos: do interesse ao aspecto
Engenharia de software orientada a aspectos: do interesse ao aspecto
 
Ordenação de pares e ímpares
Ordenação de pares e ímparesOrdenação de pares e ímpares
Ordenação de pares e ímpares
 
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
 
O uso de tecnologias de big data na concepção e execução de estratégias de en...
O uso de tecnologias de big data na concepção e execução de estratégias de en...O uso de tecnologias de big data na concepção e execução de estratégias de en...
O uso de tecnologias de big data na concepção e execução de estratégias de en...
 

Multiplicação de matrizes

  • 1. Multiplicação de Matrizes Do 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 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(n3 ), 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(n2 ). Neste cenário, destacam-se os trabalhos desenvolvidos por Volker Strassen, Shmuel Winograd e Don Coppersmith. 1Mestrado em Computação Aplicada, UPF, Campus 1 - BR 285 - Passo Fundo (RS) - Brasil {83473@upf.br} Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 1
  • 2. 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ção mais eficientes. Para tal, a Seção 2 apresenta importantes conceitos matemáticos relacionados às matrizes e suas operações. Na Seção 3, a importância do cálculo do produto entre matrizes e os principais trabalhos relacionados a métodos de maior eficiência são abordados. Por fim, na Seção 4 traz algumas considerações a respeito dos assuntos abordados. 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. As matrizes quadradas têm importantes propriedades, dentre as quais merecem especial destaque a presença de uma diagonal principal e de uma diagonal secundária. Os elementos que compõem a diagonal principal de uma matriz M 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 matriz quadrada de ordem 3. M3 =   12 30 40 13 15 48 14 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 nenhuma das 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 em todos os elementos que compõem a diagonal principal. Por sua vez, todos os demais elementos da matriz identidade contém valores iguais a zero. A matriz I3×3 (4) é um exemplo de matriz identidade de ordem 3. A principal função de uma matriz identidade é servir de elemento neutro nas operações de multiplicação [3]. I3 =   1 0 0 0 1 0 0 0 1   (4) Em termos computacionais, as matrizes são representadas com uso de tipos estruturados de dados, os quais permitem agregar em uma mesma variável diversos valores com relação estrutural entre si. Os tipos de dados estruturados são abstraídos pelas linguagens de programação na forma de arranjos e registros. Em vista dos arranjos caracterizam-se pela presença de elementos do mesmo tipo em todas as posições, eles são as estruturas comumente utilizadas 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
  • 3. 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 matriz A, quadrada e de ordem 2 (linha 1) e atribui à posição (1, 2) o valor 3 (linha 2). Os índices (1, 2) utilizados na atribuição podem ser interpretados tanto como (linha, coluna) quanto (coluna, linha), dependendo unicamente da 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, por exemplo. 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 matrizes merecem especial destaque. Conceitualmente, para que duas matrizes possam ser multiplicadas é necessário que o número de colunas da 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 da i−é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 conforme segue: (I) M2×2 = 1 2 3 4 (II) N2×3 = 5 6 7 8 9 10 (III) P2×3 = M2×2 × N2×3 = 1 × 5 + 2 × 8 1 × 6 + 2 × 9 1 × 7 + 2 × 10 3 × 5 + 4 × 8 3 × 6 + 4 × 9 3 × 7 + 4 × 10 (IV) P2×3 = 21 24 27 47 54 61 A multiplicação entre matrizes não é comutativa, ou seja, o produto de A × B é diferente de B × A. Já no que diz respeito à associatividade, o resultado de A×B ×C é idêntico ao resultado de A×(B × C). Com relação ao elemento neutro, a multiplicação de uma matriz quadrada A pela matriz identidade I resulta na própria matriz A. 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-se observar o tamanho das matrizes envolvidas para realizar a operação. Duas matrizes somente podem ser somadas entre si quando ambas apresentam o mesmo tamanho, ou seja, mesmo número de linhas e de colunas. A matriz resultante 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ção de adição C = A + B é realizada somando-se cada elemento da primeira matriz A pelo elemento correspondente da 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, a adiçã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
  • 4. (I) A2×2 = 1 2 3 4 (II) B2×2 = 5 −6 −8 9 (III) C2×2 = A2×2 + B2×2 = 1 + 5 2 − 6 3 − 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 elevada complexidade assintótica. Por muito tempo permaneceu a crença de que o algoritmo ótimo para multiplicação de matrizes teria complexidade O(n3 ) e soluções com valores abaixo disso não seriam possíveis. Contudo, essa barreira foi quebrada quando Volker Strassen provou ser possível multiplicar duas matrizes quadradas com uma quantidade menor de operações de multiplicação, fazendo uso de uma abordagem de divisão e conquista durante o processo. A partir do trabalho de Strassen, outros métodos foram desenvolvidos e permitiram alcançar coeficientes de complexidade ainda menores, mais próximos da meta teórica O(n2 ) [5]. Em sua maioria, os métodos de otimização do cálculo do produto de matrizes visam eliminar o máximo possível a quantidade de multiplicações necessá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 apresentados em 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 i itera 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ório gerando 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
  • 5. 3.2 Método de Strassen O método de Strassen foi desenvolvido pelo matemático alemão Volker Strassen em 1969. Diferentemente do algoritmo tradicional, a versão de Strassen apresenta complexidade assintótica relativamente menor, alcançando o valor de O(nlog 7 ) no produto de duas matrizes quadradas de ordem n. Ao todo, o método desenvolvido por Strassen requer 7 n 2 3 multiplicaçõ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, tendo por principal meta reduzir o número de multiplicações necessárias durante o processo. Com isso, Strassen provou ser 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 aplicar este método quando a ordem for uma potência de 2 (21 , 22 , ..., 2n ). Em termos práticos, essa restrição pode ser facilmente tratada adicionando-se linhas ou colunas com elementos de valor 0 até ser alcançada a ordem imediatamente 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 C de mesma ordem resultante do produto A × B, definidas por C c11 c12 c21 c22 = A a11 a12 a21 a22 × B b11 b12 b21 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 termos de 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 que minimizasse o número de multiplicações envolvidas. Como resultado, ele chegou a um conjunto de sete equações envolvendo submatrizes [5]. Além de reduzir o número de operações de multiplicações necessárias, as equações definidas por Strassen realizam a divisão do problema em partes menores, mantendo a abordagem de divisão e conquista 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
  • 6. A última etapa do método de Strassen representa o momento da conquista, ou seja, a etapa em que os sete resultados 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 3 4 5 6 7 8 9   e B3   1 4 7 2 5 8 3 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 e colunas com elementos 0 até que a condição seja satisfeita. No caso do produto A3 × B3 será necessário acrescentar uma linha e uma coluna em cada uma das matrizes. A4     1 2 3 0 4 5 6 0 7 8 9 0 0 0 0 0     B4     1 4 7 0 2 5 8 0 3 6 9 0 0 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 2 4 5 A12 3 0 6 0 A21 7 8 0 0 A22 9 0 0 0 B11 1 4 2 5 B12 7 0 8 0 B21 3 6 0 0 B22 9 0 0 0 (III) Com base nas submatrizes, calcula-se P1 = (A11 + A22) × (B11 + B22). P1 = 1 2 4 5 + 9 0 0 0 × 1 4 2 5 + 9 0 0 0 → 104 50 50 41 (IV) Com base nas submatrizes, calcula-se P2 = (A21 + A22) × B11. P2 = 7 8 0 0 + 9 0 0 0 × 1 4 2 5 → 32 104 0 0 (V) Com base nas submatrizes, calcula-se P3 = A11 × (B12 − B22). P3 = 7 8 0 0 + 9 0 0 0 × 1 4 2 5 → 32 104 0 0 (VI) Com base nas submatrizes, calcula-se P4 = A22 × (B21 − B11). P4 = 1 2 4 5 × 7 0 8 0 − 9 0 0 0 → 14 0 32 0 Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 6
  • 7. (VII) Com base nas submatrizes, calcula-se P5 = (A11 + A12) × B22. P5 = 1 2 4 5 × 3 0 6 0 × 9 0 0 0 → 6 0 90 0 (VIII) Com base nas submatrizes, calcula-se P6 = (A21 − A11) × (B11 + B12). P6 = 7 8 0 0 − 1 2 4 5 × 1 4 2 5 + 7 8 8 0 → 108 54 -82 -41 (IX) Com base nas submatrizes, calcula-se P7 = (A12 − A22) × (B21 + B22). P7 = 3 0 6 0 − 9 0 0 0 × 3 6 0 0 + 9 0 0 0 → -72 -36 72 36 (X) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C11 = P1 +P4 − P5 + P7 C11 = 104 50 50 41 + 18 18 0 0 − 36 0 90 0 + −72 −36 72 36 → 14 32 32 77 (XI) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C12 = P3 + P5. C12 = 14 0 32 0 + 36 0 90 0 → 50 0 122 0 (XII) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C21 = P2 + P4 C21 = 32 104 0 0 + 18 18 0 0 → 50 122 0 0 (XIII) Com base nos resultados parciais obtidos na resolução das equações anteriores, calcula-se C22 = P1 +P3 − P2 + P6 C22 = 104 50 50 41 + 14 0 32 0 − 32 104 0 0 + 108 54 −82 −41 → 194 0 0 0 (XIV) Compor a matriz resultado C3 utilizando as submatrizes C11, C12, C21 e C22. C3 = C11 C12 C21 C22 →       14 32 32 77 50 0 122 0 50 122 0 0 194 0 0 0       →     14 32 50 0 32 77 122 0 50 122 194 0 0 0 0 0     C3 =   14 32 50 32 77 122 50 122 194   Revista Brasileira de Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 5, n. 2, p. xx-xx, jul. 2014 7
  • 8. 3.3 Método de Winograd Em 1987, Shmuel Winograd desenvolveu um método para resolução do produto de matrizes que realizava três somas a menos que o algoritmo de Strassen, trazendo uma pequena contribuição no tempo de execução total do algoritmo [11]. Em termos de complexidade assintótica, contudo, a variante de Winograd não reduziu o coeficiente de complexidade obtido por Strassen. Ao todo, a variante criada por Winograd requer 7 n 2 3 multiplicaçõ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 maior de passos para realizar o cálculo do produto entre duas matrizes quadradas. No total, são necessárias 22 equações para se chegar ao resultado final [11]. O cálculo do produto entre duas matrizes quadradas, expresso por C c11 c12 c21 c22 = A a11 a12 a21 a22 × B b11 b12 b21 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 de Strassen 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 a atingir 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 conhecido para o cálculo do produto entre matrizes. Contudo, sua contribuição foi muito mais teórica do que prática, visto que 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 tiveram importante 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
  • 9. Na Tabela 1 apresentam-se os principais marcos das pesquisas por métodos de menor complexidade para multiplicaçã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 ter desenvolvido 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 um período de mais de 20 anos de hegemonia do método CW como o mais eficiente algoritmo conhecido para o cálculo do produto entre matrizes. Tabela 1: Evolução dos coeficientes de complexidade para o problema do cálculo do produto entre matrizes Ano Autor(es) Complexidade 1969 Strassen log2 8 ≈ 2.807 1979 Bini, Capovani, Romani e Lotti’s 3 log12 10 ≈ 2.779 1981 Schönhage log6 5 ≈ 2.694 1986 Strassen (laser method) 2.48 1989 Coppersmith e Winograd 2.376 2012 Virginia Vassilevska Williams 2.3729 Apesar da considerável redução no expoente de complexidade obtida pelos métodos não-tradicionais, a abordagem tradicional continua ainda sendo amplamente utilizada. Se considerado o método desenvolvido por Strassen, 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 no método tradicional. • Quando as matrizes são esparsas (com grande quantidade de elementos iguais a zero), os métodos específicos para 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 probabilidade de 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, visto que ambos compartilham a mesma construção matemática. Quanto aos demais métodos desenvolvidos a partir do trabalho de Strassen, percebe-se muito mais contribuições teóricas do que práticas em seu uso. O método de Coppersmith-Winograd, por exemplo, é mais eficiente que o método de Strassen quando as matrizes consideradas apresentam tamanho absurdamente grande, na casa de milhares de bilhões, em razão do elevado valor da constante oculta de complexidade [7]. Considerando-se unicamente o número de somas e multiplicações realizadas pelos métodos tradicional, de Strassen e de Winograd para matrizes com ordem variando de 21 a 28 , o total de operações necessárias para a multiplicação de matrizes em cada um dos casos é apresentado na Tabela 2. Pelos números obtidos fica claro que a medida que o tamanho da matriz cresce, a diferença no número de multiplicações necessárias entre a abordagem tradicional 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
  • 10. Tabela 2: Comparação entre os métodos em relação ao número de operações de somas e multiplicações necessárias. Tam. (n) Tradicional Strassen Winograd Multiplicações Somas Multiplicações Somas Multiplicações Somas 2 8 4 7 18 7 15 4 64 48 56 160 56 136 8 512 448 448 1.344 448 1.152 16 4.096 3.840 3.584 11.008 3.584 9.472 32 32.768 31.744 28.672 89.088 28.672 76.800 64 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.352 256 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 para a computação. Em vista da sua importância, bem como da sua complexidade computacional inerente, a busca por melhores 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 mais eficiente 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 Shmuel Winograd desenvolveram o método que viria a ser o mais eficiente conhecido para o cálculo do produto entre matrizes por mais de duas décadas. Esta marca veio a ser superada somente em 2012, com o trabalho publicado por 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 é a decomposição das matrizes a serem multiplicadas em blocos menores. Por meio destes blocos busca-se reduzir ao máximo o número de operações de multiplicação necessária, substituindo-as sempre que possível por operações de soma 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 blocos menores e posterior obtenção dos resultados por meio da junção dos resultados parciais, observa-se que boa parte dos 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étodo Coppersmith-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 mais eficientes, o método tradicional continua sendo uma ótima escolha, não devendo ser desprezado ou desconsiderado somente pela sua maior complexidade. É preciso levar em consideração que, comparado aos demais, o método tradicional é de simples implementação e extremamente econômico no uso de espaço em memória, visto que não faz 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
  • 11. 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 da Universidade 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