Anar al contingut

Algoritme de Strassen

De L'Enciclopèdia, la wikipedia en valencià

En la disciplina matemàtica del àlgebra llineal, l'algoritme de Strassen, cridat aixina per Volker Strassen, és un algoritme usat per a la multiplicació de matrius. És asintóticamente més ràpit que l'algoritme de multiplicació de matrius estàndar, pero més llent que l'algoritme més ràpit conegut, i és útil en la pràctica per a matrius grans.

Història

[editar | editar còdic]

Volker Strassen va publicar l'algoritme de Strassen en 1969. Pese a que el seu algoritme és només llaugerament més ràpit que l'algoritme estàndar per a la multiplicació de matrius, va anar el primer en senyalar que l'enfocament estàndar no és òptim. El seu artícul va començar la busca d'algoritmes encara més ràpits, com el complex algoritme de Coppersmith–Winograd de Shmuel Winograd en 2010 (que utilisa 20 multiplicacions binarias, pero utilisa 155 sumes binarias en lloc de les 18 de l'algoritme de Strassen), publicat en 2000 .

Algoritme

[editar | editar còdic]

Sean A, B dos matrius quadrades sobre un anell R. Volem calcular la matriu C com a producte

𝐂=𝐀𝐁𝐀,𝐁,𝐂R2n×2n

Si les matrius A, B no són de tipo 2n x 2n caldrà reblir lo que falta de files i columnes en zeros.

Partim A, B i C en matrius d'igual tamany de bloc

𝐀=[𝐀1,1𝐀1,2𝐀2,1𝐀2,2] , 𝐁=[𝐁1,1𝐁1,2𝐁2,1𝐁2,2] , 𝐂=[𝐂1,1𝐂1,2𝐂2,1𝐂2,2]

En

𝐀i,j,𝐁i,j,𝐂i,jR2n1×2n1

Llavors

𝐂1,1=𝐀1,1𝐁1,1+𝐀1,2𝐁2,1
𝐂1,2=𝐀1,1𝐁1,2+𝐀1,2𝐁2,2
𝐂2,1=𝐀2,1𝐁1,1+𝐀2,2𝐁2,1
𝐂2,2=𝐀2,1𝐁1,2+𝐀2,2𝐁2,2

En esta construcció, no hem reduït el número de multiplicacions. Encara tenim 8 multiplicacions per a calcular la matriu Ci, j , que és el mateix número de multiplicacions que es necessiten quan s'usa el método estàndar de multiplicació de matrius.

Ara ve la part important. Definim les matrius de nou

𝐌1:=(𝐀1,1+𝐀2,2)(𝐁1,1+𝐁2,2)
𝐌2:=(𝐀2,1+𝐀2,2)𝐁1,1
𝐌3:=𝐀1,1(𝐁1,2𝐁2,2)
𝐌4:=𝐀2,2(𝐁2,1𝐁1,1)
𝐌5:=(𝐀1,1+𝐀1,2)𝐁2,2
𝐌6:=(𝐀2,1𝐀1,1)(𝐁1,1+𝐁1,2)
𝐌7:=(𝐀1,2𝐀2,2)(𝐁2,1+𝐁2,2)

que després s'utilisen per a expressar Ci, j en térmens de Mk. Per la nostra definició de la Mk podem eliminar una multiplicació de matrius i reduir el número de multiplicacions a 7 (una multiplicació per cada Mk) i expressar Ci, j com

𝐂1,1=𝐌1+𝐌4𝐌5+𝐌7
𝐂1,2=𝐌3+𝐌5
𝐂2,1=𝐌2+𝐌4
𝐂2,2=𝐌1𝐌2+𝐌3+𝐌6

Iteramos n-voltes el procés de divisió fins que les submatrices degeneran en números (elements de l'anelle R).

Les implementacions pràctiques de l'algoritme de Strassen, permeten canviar a métodos estàndar de multiplicació de matrius per a submatrices lo suficientment menudes, per a les quals són més eficients. El punt a partir del com l'algoritme de Strassen és més eficient depén de l'implementació específica i del hardware. S'ha estimat que l'algoritme de Strassen és més ràpit per a matrius en esgambi des de 32 a 128 per a implementacions optimisades,[1] i 60.000 o més per a implementacions bàsiques.[2]

Referències

[editar | editar còdic]
  1. Erro en la seqüencia d'órdens: no existix el mòdul «Citas»..
  2. Erro en la seqüencia d'órdens: no existix el mòdul «Citas»..


Referències

[editar | editar còdic]