Multiplicação de Matrizes
description
Transcript of Multiplicação de Matrizes
Multiplicação de Multiplicação de MatrizesMatrizes
Colégio Batista Santos Colégio Batista Santos DumontDumont
Olimpíada Brasileira de Olimpíada Brasileira de InformáticaInformática
Wladimir Araújo TavaresWladimir Araújo Tavares
ProblemaProblema
Encontrar uma ordem para a Encontrar uma ordem para a multiplicação demultiplicação de
matrizes que minimize o número de matrizes que minimize o número de operações.operações.
Sabendo que o custo de multiplicar Sabendo que o custo de multiplicar uma matriz uma matriz
A A n x m n x m por uma matriz B por uma matriz B m x p m x p é é
n x m x p.n x m x p.
Seja Seja
AA1 1 :: 5 x 2 A5 x 2 A2 2 :2 x 3 A:2 x 3 A3 3 : 3 x 4 A: 3 x 4 A4 4 :: 4 x 5 4 x 5
AA1 1 x Ax A22 x A x A33 AA1 1 x Ax A22 x A x A3 3 x Ax A44
(A(A1 1 x Ax A22 )x A )x A33 ((A((A1 1 x Ax A22) x A) x A33)) x x AA44
AA1 1 x (Ax (A22 x A x A3 3 )) ((A((A1 1 x Ax A22) x (A) x (A3 3 x x AA44))))
(A(A1 1 x (Ax (A22 x A x A33)))) x x AA44
AA1 1 x ((Ax ((A22 x A x A33)) x x AA44))
Veja que existe vários sub-problemas que se repetem.
Podemos atacar esse problema resolvendo todasPodemos atacar esse problema resolvendo todasas multiplicações envolvendo 2 matrizes e depoisas multiplicações envolvendo 2 matrizes e depoispara a multiplicações envolvendo 3 matrizes epara a multiplicações envolvendo 3 matrizes efinalmente resolver o problema.finalmente resolver o problema.Vamos denotar m[i,j] = custo de multiplicar asVamos denotar m[i,j] = custo de multiplicar as
matrizes de Amatrizes de Aii...A...Ajj. Vamos denotar b[i-1],b[i]. Vamos denotar b[i-1],b[i]como as dimensões das matrizes.como as dimensões das matrizes.b[0]=5 b[1]=2 b[2]=3 b[3]=4 b[4]=5b[0]=5 b[1]=2 b[2]=3 b[3]=4 b[4]=5Multiplicações envolvendo 1 matriz tem custo 0.Multiplicações envolvendo 1 matriz tem custo 0.Multiplicações envolvendo 2 matrizes:Multiplicações envolvendo 2 matrizes:m[1,2] = 5 x 2 x 3 = 30m[1,2] = 5 x 2 x 3 = 30m[2,3] = 2 x 3 x 4 = 24m[2,3] = 2 x 3 x 4 = 24m[3,4] = 3 x 4 x 5 = 60m[3,4] = 3 x 4 x 5 = 60
Multiplicação envolvendo 3 matrizes:Multiplicação envolvendo 3 matrizes:Podemos calcular APodemos calcular A1 1 x Ax A22 x A x A3 3 de duas formas:de duas formas: (A(A1 1 x Ax A22 )x A )x A3 3 = m[1,2] +m[3,3]+ b[0] x b[2] x = m[1,2] +m[3,3]+ b[0] x b[2] x
b[3] =b[3] =30 + 0 + 5 x 3 x 4 = 90.30 + 0 + 5 x 3 x 4 = 90.AA1 1 x (Ax (A22 x A x A33) = m[1,1] +m[2,3] b[0] x b[1] x [3] =) = m[1,1] +m[2,3] b[0] x b[1] x [3] =0 + 24 + 5 x 2 x 4 = 64.0 + 24 + 5 x 2 x 4 = 64.O custo mínimo para calcular m[1,3] =64O custo mínimo para calcular m[1,3] =64Podemos calcular APodemos calcular A22 x A x A3 3 x Ax A4 4 de duas formasde duas formas
(A(A2 2 x Ax A33 )x A )x A4 4 = m[2,3] +m[4,4]+ b[1] x b[3] x b[4] = m[2,3] +m[4,4]+ b[1] x b[3] x b[4] ==
24 + 0 + 2 x 4 x 5 = 6424 + 0 + 2 x 4 x 5 = 64AA2 2 x (Ax (A33 x A x A44) = m[2,2] +m[3,4] b[1] x b[2] x [4] =) = m[2,2] +m[3,4] b[1] x b[2] x [4] =0 + 60 + 2 x 3 x 5 = 900 + 60 + 2 x 3 x 5 = 90m[2,4]=64m[2,4]=64
Para a multiplicação de tamanho 2 temos 4 Para a multiplicação de tamanho 2 temos 4 formas:formas:
AA1 1 x (Ax (A22 x A x A3 3 x Ax A44) = m[1,1] + m[2,3] + b[0] x ) = m[1,1] + m[2,3] + b[0] x b[1] x b[4]b[1] x b[4]
0 + 64 + 2 x 5 x 5 = 1140 + 64 + 2 x 5 x 5 = 114
((A((A1 1 x Ax A22) x (A) x (A3 3 x Ax A44)) = m[1,2] + m[3,4] +b[0] )) = m[1,2] + m[3,4] +b[0] x b[2] x b[4]x b[2] x b[4]
30+ 60 + 2 x 3 x 5 = 12030+ 60 + 2 x 3 x 5 = 120
(A(A1 1 x Ax A22 x A x A33)) x Ax A4 4 = m[1,3] + m [4,4] + b[0] x = m[1,3] + m [4,4] + b[0] x b[3] x b[4]b[3] x b[4]
64 + 0 + 2 x 4 x 5 = 10464 + 0 + 2 x 4 x 5 = 104
Logo, m[1,4] = 104Logo, m[1,4] = 104
Em geral,Em geral,
m[i,j] = min m[i,j] = min i<=k<ji<=k<j( m[i,k] + m[k+1,j] + b[i-1] ( m[i,k] + m[k+1,j] + b[i-1] x b[k] x b[j])x b[k] x b[j])
Se resolvermos primeiro os casos menores Se resolvermos primeiro os casos menores poderemospoderemos
utilizar estes resultados para construir utilizar estes resultados para construir casos maiores.casos maiores.
AlgoritmoAlgoritmo
Para i=1 até n faça m[i,i] = 0Para i=1 até n faça m[i,i] = 0 variando as diagonaisvariando as diagonais Para u=1 até n-1 façaPara u=1 até n-1 faça Para i = 1 ate n – u façaPara i = 1 ate n – u faça j = i + uj = i + u min = ∞ s[i,j] = 0min = ∞ s[i,j] = 0 Para k = i ate j facaPara k = i ate j faca q = m[i,k] + m[k+1][j] + b[i-1] * b[k] q = m[i,k] + m[k+1][j] + b[i-1] * b[k]
* b[j] * b[j] Se q < min então { min = q Se q < min então { min = q s[i,j] = s[i,j] =
k }k } m[i,j] = min m[i,j] = min
Construindo a solução Construindo a solução ótimaótima
Print-MCM(s,i,j)Print-MCM(s,i,j) if i=j then if i=j then imprima “Ai” imprima “Ai” else else imprima "(" + Print- imprima "(" + Print-MCM(s,1,s[i,j]) + "*" + Print-MCM(s,1,s[i,j]) + "*" + Print-MCM(s,s[i,j]+1,j) + ")" MCM(s,s[i,j]+1,j) + ")"