Algorisme de Strassen

algorisme per a la multiplicació de matrius

En àlgebra lineal, l'algorisme de Strassen, que rep el nom de Volker Strassen, és un algorisme per a la multiplicació de matrius.[1] És més ràpid que l'algorisme de multiplicació de matrius estàndard per a matrius grans, amb una complexitat asimptòtica millor, tot i que l'algorisme ingenu és sovint millor per a matrius més petites. L'algorisme de Strassen és més lent que els algorismes coneguts més ràpids per a matrius extremadament grans, però aquests algorismes galàctics no són útils a la pràctica, ja que són molt més lents per a matrius de mida pràctica. Per a matrius petites existeixen algorismes encara més ràpids.

La columna de l'esquerra visualitza els càlculs necessaris per determinar el resultat d'una multiplicació matricial 2x2. La multiplicació de matrius naïf requereix una multiplicació per cada "1" de la columna de l'esquerra. Cadascuna de les altres columnes (M1-M7) representa una única de les 7 multiplicacions de l'algorisme de Strassen. La suma de les columnes M1-M7 dóna el mateix resultat que la multiplicació matricial completa a l'esquerra.

L'algorisme de Strassen funciona per a qualsevol anell, com ara més/multiplicar, però no tots els semianells, com ara min-plus o àlgebra booleana, on l'algorisme ingenu encara funciona, i l'anomenada multiplicació de matrius combinatòria.[2]

Volker Strassen va publicar per primera vegada aquest algorisme el 1969 i així va demostrar que el L'algorisme general de multiplicació de matrius no era òptim.[3] La publicació de l'algoritme de Strassen va donar lloc a més investigacions sobre la multiplicació de matrius que van conduir tant a límits inferiors asimptòticament com a límits superiors computacionals millorats.

Standard algorithm Strassen algorithm
1
2
3
4
5
6
7
8

Sumar matrius de mida només requereix operacions, mentre que la multiplicació és substancialment més cara (tradicionalment operacions de suma o multiplicació).El nombre d'addicions i multiplicacions requerides en l'algorisme de Strassen es pot calcular de la següent manera: sigui el nombre d'operacions per a a matriu. Aleshores, mitjançant l'aplicació recursiva de l'algorisme de Strassen, ho veiem , per alguna constant que depèn del nombre d'addicions realitzades a cada aplicació de l'algorisme. Per tant , és a dir, la complexitat asimptòtica per multiplicar matrius de mida utilitzant l'algorisme de Strassen és . La reducció del nombre d'operacions aritmètiques, però, té el preu d'una estabilitat numèrica una mica reduïda,[4] i l'algoritme també requereix molt més memòria en comparació amb l'algorisme ingenu.

Referències modifica

  1. «Strassen’s Matrix Multiplication Algorithm | Implementation» (en anglès). https://www.geeksforgeeks.org,+07-06-2018.+[Consulta: 2 gener 2023].
  2. «Strassen’s Matrix Multiplication algorithm» (en anglès). https://iq.opengenus.org,+13-10-2018.+[Consulta: 2 gener 2023].
  3. Strassen, Volker Numer. Math., 13, 4, 1969, pàg. 354–356. DOI: 10.1007/BF02165411.
  4. Webb, Miller SIAM J. Comput., 4, 2, 1975, pàg. 97–107. DOI: 10.1137/0204009.