A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Multiplicação de Matrizes

Apresentações semelhantes


Apresentação em tema: "Multiplicação de Matrizes"— Transcrição da apresentação:

1 Multiplicação de Matrizes
Colégio Batista Santos Dumont Olimpíada Brasileira de Informática Wladimir Araújo Tavares

2 Problema Encontrar uma ordem para a multiplicação de
matrizes que minimize o número de operações. Sabendo que o custo de multiplicar uma matriz A n x m por uma matriz B m x p é n x m x p.

3 Seja A1 : 5 x 2 A2 :2 x 3 A3 : 3 x 4 A4 : 4 x 5 A1 x A2 x A3 A1 x A2 x A3 x A4 (A1 x A2 )x A3 ((A1 x A2) x A3) x A4 A1 x (A2 x A3 ) ((A1 x A2) x (A3 x A4)) (A1 x (A2 x A3)) x A4 A1 x ((A2 x A3) x A4) Veja que existe vários sub-problemas que se repetem.

4 Podemos atacar esse problema resolvendo todas
as multiplicações envolvendo 2 matrizes e depois para a multiplicações envolvendo 3 matrizes e finalmente resolver o problema. Vamos denotar m[i,j] = custo de multiplicar as matrizes de Ai...Aj. Vamos denotar b[i-1],b[i] como as dimensões das matrizes. b[0]=5 b[1]=2 b[2]=3 b[3]=4 b[4]=5 Multiplicações envolvendo 1 matriz tem custo 0. Multiplicações envolvendo 2 matrizes: m[1,2] = 5 x 2 x 3 = 30 m[2,3] = 2 x 3 x 4 = 24 m[3,4] = 3 x 4 x 5 = 60

5 Multiplicação envolvendo 3 matrizes:
Podemos calcular A1 x A2 x A3 de duas formas: (A1 x A2 )x A3 = m[1,2] +m[3,3]+ b[0] x b[2] x b[3] = x 3 x 4 = 90. A1 x (A2 x A3) = m[1,1] +m[2,3] b[0] x b[1] x [3] = x 2 x 4 = 64. O custo mínimo para calcular m[1,3] =64 Podemos calcular A2 x A3 x A4 de duas formas (A2 x A3 )x A4 = m[2,3] +m[4,4]+ b[1] x b[3] x b[4] = x 4 x 5 = 64 A2 x (A3 x A4) = m[2,2] +m[3,4] b[1] x b[2] x [4] = x 3 x 5 = 90 m[2,4]=64

6 Para a multiplicação de tamanho 2 temos 4 formas:
A1 x (A2 x A3 x A4) = m[1,1] + m[2,3] + b[0] x b[1] x b[4] x 5 x 5 = 114 ((A1 x A2) x (A3 x A4)) = m[1,2] + m[3,4] +b[0] x b[2] x b[4] x 3 x 5 = 120 (A1 x A2 x A3) x A4 = m[1,3] + m [4,4] + b[0] x b[3] x b[4] x 4 x 5 = 104 Logo, m[1,4] = 104

7 Em geral, m[i,j] = min i<=k<j( m[i,k] + m[k+1,j] + b[i-1] x b[k] x b[j]) Se resolvermos primeiro os casos menores poderemos utilizar estes resultados para construir casos maiores.

8 Algoritmo Para i=1 até n faça m[i,i] = 0 variando as diagonais
Para u=1 até n-1 faça Para i = 1 ate n – u faça j = i + u min = ∞ s[i,j] = 0 Para k = i ate j faca q = m[i,k] + m[k+1][j] + b[i-1] * b[k] * b[j] Se q < min então { min = q s[i,j] = k } m[i,j] = min

9 Construindo a solução ótima
Print-MCM(s,i,j)   if i=j then     imprima “Ai”   else     imprima "(" + Print-MCM(s,1,s[i,j]) + "*" + Print-MCM(s,s[i,j]+1,j) + ")"


Carregar ppt "Multiplicação de Matrizes"

Apresentações semelhantes


Anúncios Google