Algoritmode Strassen

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 14

Algoritmo de Strassen

Diseño y análisis de algoritmos


Funcionamiento
 Funciona para matrices k n nxn
0 1 1x1
de nxn con n=2^k.
1 2 2x2
 En caso de que se
2 4 4x4
quiera multiplicar una
3 8 8x8
matriz de diferente
4 16 16x16
tamaño se rellenan las
5 32 32x32
filas y/o columnas con
6 64 64x64
ceros para llegar a una
de nxn y n=2^k. 7 128 128x128

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:

 a11 a12   b11 b12   c11 c12 


  x  =  
 a21 a22   b21 b22   c21 c22 

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

Entonces una forma de obtener la matriz C resultado


de la multiplicación de A y B es:

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

7 multiplicaciones por cada 18 sumas por cada submatriz


submatriz de 2x2 con T(2)

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

En el siguiente grafico se pueden ver las comparaciones.

Costo T(n) de algoritmos de multiplicación de matrices

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

2 4 4x4 247 216 Clasico

3 8 8x8 2017 2040 Strassen

4 16 16x16 15271 16392 Strassen

5 32 32x32 111505 123192 Strassen

6 64 64x64 798967 896136 Strassen

7 128 128x128 5666497 6408120 Strassen

8 256 256x256 39960391 45397512 Strassen

9 512 512x512 280902385 319945272 Strassen

10 1024 1024x1024 1971035287 2248267656 Strassen


Aplicación del Teorema Maestro
Calcular C, a partir de P1, . . . , P7, en (n2) operaciones.

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

T(n) = 7T(n/2) + Ѳ(n^2)

a=7; b=2; f(n)= Ѳ(n^2) y nlgab

Sustituyendo: nlg27

Por lo tanto f(n) < nlg27

Por lo que: f(n) = O(n^2.80)


Aplicación del Teorema Maestro

Observaciones:

• Este algoritmo en la práctica solo es útil si las matrices son


grandes y densas.

• Usando técnicas mas avanzadas se han encontrado mejores


algoritmos. De hecho hay uno de orden Ѳ (n^2.376).

• El algoritmo de Strassen ha tenido una repercusión


fundamentalmente teórica, ya que es un algoritmo difícil de
implementar.

• Es menos estable que el algoritmo clásico, ya que para errores


similares en los datos produce mayores errores en el resultado.

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy