Algoritmo di Strassen

Da Wikipedia, l'enciclopedia libera.

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 | modifica wikitesto]

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 | modifica wikitesto]

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 | modifica wikitesto]

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 | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

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