Algoritmode Strassen
Algoritmode Strassen
Algoritmode Strassen
8 256 256x256
9 512 512x512
10 1024 1024x1024
Algoritmo de Strassen
Funcionamiento
Suponiendo que tenemos dos matrices A y B de nxn
con n=2, entonces una forma de obtener la matriz C
resultado de la multiplicación de A y B es:
m1 = (a11+a22)(b11+b22)
m2 = (a21+a22)b11 m1 + m4 − m5 + m7 m3 + m5
m3 = a11(b12-b22) C =
m2 + m4 m1 + m3 − m2 + m6
m4 = a22(b21-b11)
m5 = (a11+a12)b22
m6 = (a21-a11)(b11+b12)
m7 = (a12-a22)(b11+b22) Este método hace solo
7 multiplicaciones y 18 sumas
Algoritmo de Strassen
Funcionamiento
Ahora suponiendo dos matrices A y B de nxn con
n=4
a11 a12 a13 a14 b11 b12 b13 b14 c11 c12 c13 c14
a 21 a22 a23 a24 b21 b22 b23 b24 c21 c22 c23 c24
a x =
a32 a33 a34 b31 b32 b33 b33 c31 c32 c33 c33
31
a a42 a43 a44 b41 b42 b43 b44 c41 c42 c43 c44
41
Algoritmo de Strassen
Funcionamiento
Dividir cada una de las matrices en 4
submatrices, y resolver por el método de
Strassen el problema.
Cada submatriz
es de n/2 X n/2
Algoritmo de Strassen
Funcionamiento
M1 = (A11+A22)(B11+B22)
M2 = (A21+A22)B11 a a12 a33 a34 b11 b12 b33 b34
M 1 = 11 + X +
M3 = A11(B12-B22)
a21 a22 a43 a44 b21 b22 b43 b44
M4 = A22(B21-B11)
M5 = (A11+A12)B22 a + a33 a12 + a34 b11 + b33 b12 + b34
M 1 = 11 x
M6 = (A21-A11)(B11+B12)
a21 + a43 a 22 + a44 b21 + b43 b22 + b44
M7 = (A12-A22)(B11+B22)
C11 = M 1 + M 4 − M 5 + M 7 C12 = M 3 + M 5
C =
C 21 = M 2 + M 4 C 22 = M 1 + M 3 − M 2 + M 6
Algoritmo de Strassen
Ventajas del algoritmo
La solución tradicional en matrices 2x2,
requiere de 8 multiplicaciones y 4 sumas…
La solución de Strassen requiere de 7
multiplicaciones y 18 sumas/restas...
Aparentemente, no es significativo el
beneficio, pero ahorrar una multiplicación de
matrices en el algoritmo de Strassen, a costa
de más sumas o restas de matrices, tiene
repercusiones significativas...
Algoritmo de Strassen
Costo del algoritmo
Sea T(n) el número total de operaciones
(sumas, restas, multiplicaciones) que
necesita el algoritmo para multiplicar dos
matrices A y B de tamaño nxn.
Tenemos que:
T(1)=1
T(2)=7+18=25
T(4)=7*25+18*4
Algoritmo de Strassen
Costo del algoritmo
Desarrollando: Tenemos que para calcular T(n)
Número de submatrices
se necesita recursividad. Sabemos
T(1)=1 que n=2^k por lo que para
T(2)=7+18=25 T(n)=T(2^k) se necesita
T(4)=7*25+18*4=247 T(2^(k-1))=T(2^(k)/2)=T(n/2)
T(8)=7*247+18*16=2017
T(16)=7*2017+18*64=15271 Para las sumas tenemos 18*X, X se
. Obtiene así:
.
. T(2)=…+18*4^0
T(n)=7*T(n/2)+18*(n/2)^2 T(4)=…+18*4^1
T(8)=…+18*4^2
.
T(n)=…+18*4^(k-1)
X=4^(k-1)=(2^2)^(k-1)=2^(2*k-2)=
(2^k)*(2^k)/2^2=(n*n)(2^2)=(n/2)^2
Costo del algoritmo
Para conocer que si el algoritmo de Strassen es menos costoso que el
Algoritmo clásico, se obtuvo T(n) de este último:
T(n)=8T(n/2)+4*(n/2)^2
50000000
45000000
40000000
35000000
30000000 T(n) Strassen's
T(n)
25000000
20000000 T(n) Clasico
15000000
10000000
5000000
0
1 2 4 8 16 32 64 128 256
n
Costo del algoritmo
Tabla de resultados:
k n nxn T(n) T(n) Mejor
Strassen's Clasico algoritmo
0 1 1x1 1 1 Igual
1 2 2x2 25 12 Clasico
Sea
A1 = a B1 = g − h P1 = ag − ah T(n/2) + Ѳ(n2)
A2 = a + b B2 = h P2 = ah + bh T(n/2) + Ѳ(n2)
A3 = c + d B3 = e P3 = ce + de T(n/2) + Ѳ(n2)
A4 = d B4 = f − e P4 = df − de T(n/2) + Ѳ(n2)
A5 = a + d B5 = e + h P5 = ae + ah + de + dh T(n/2) + Ѳ(n2)
A6 = b − d B6 = f + h P6 = bf + bh − df − dh T(n/2) + Ѳ(n2)
A7 = a − c B7 = e + g P7 = ae + ag − ce − cg T(n/2) + Ѳ(n2)
------------------------------
7T(n/2) + Ѳ(n2)
Aplicación del Teorema Maestro
Sustituyendo: nlg27
Observaciones:
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: