Algoritmo di Strassen

In matematica, e più particolarmente in algebra lineare, per algoritmo di Strassen si intende un algoritmo (dovuto al matematico tedesco Volker Strassen) finalizzato al calcolo del prodotto di due matrici. Esso è decisamente meno intuitivo del procedimento che si basa sulla formula di definizione del prodotto fra matrici (che chiameremo procedimento standard), ma ha un ordine di complessità minore.

Storia modifica

Volker Strassen ha proposto l'algoritmo che porta il suo nome nel 1969. Si tratta di un algoritmo che rispetto allo standard risulta un po' più veloce, ma è sensibilmente più complesso da implementare e richiede più memoria. Tutto questo fa sì che esso sia ben poco utilizzato nelle applicazioni di interesse pratico. Accade però che Strassen è stato il primo a far notare che l'algoritmo di Gauss non costituisce un procedimento ottimale e suoi scritti in proposito hanno avviato la ricerca di algoritmi ancora più veloci (come ad es l'algoritmo di Coppersmith-Winograd) e in genere la ricerca di algoritmi che si allontanano dai più intuitivi.

Algoritmo modifica

Siano A e B due matrici quadrate dello stesso aspetto su un campo K. Vogliamo calcolare la matrice prodotto C

 

Se le matrici A e B non hanno aspetto della forma 2n × 2n riempiamo le righe e le colonne che mancano al raggiungimento del suddetto aspetto con zeri.

Decomponiamo A, B e C in sottomatrici con estensioni dimezzate

 

con

  .

Per le sottomatrici si trova

 
 
 
 

Con questa costruzione non abbiamo ridotto il numero di moltiplicazioni. Abbiamo ancora bisogno di 8 moltiplicazioni per calcolare le matrici Ci,j, abbiamo bisogno dello stesso numero di moltiplicazioni qualora usiamo il procedimento standard di moltiplicazione.

L'innovazione consiste nel definire nuove matrici

 
 
 
 
 
 
 

e nell'usare queste per esprimere Ci,j in termini di Mk. Secondo la definizione di Mk possiamo eliminare un prodotto di matrici e ridurre il numero di moltiplicazioni a 7 (una moltiplicazione per ogni Mk) ed esprimere le Ci,j come

 
 
 
 

Si può iterare questo processo di dimezzamento delle dimensioni n-volte finché le sottomatrici si riducono a semplici numeri.

Complessità computazionale modifica

Il prodotto di due matrici n × n effettuato implementando semplicemente la definizione richiede

  moltiplicazioni di elementi nel campo K. Si possono trascurare le addizioni poiché esse si effettuano molto più velocemente delle moltiplicazioni.

Con l'algoritmo di Strassen il numero delle moltiplicazioni si riduce a

  .

Bibliografia modifica

Collegamenti esterni modifica

  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica