Come è nato Strassen con il suo metodo di moltiplicazione a matrice?


18

Il famoso algoritmo di moltiplicazione della matrice di Strassen è un vero piacere per noi, in quanto riduce la complessità del tempo dalla tradizionale O (n 3 ) a O (n 2.8 ).

Ma di tutte le risorse che ho passato, anche il libro di Cormen e Steven Skienna, chiaramente non affermano come Strassen ci abbia pensato.

Qual è la logica dell'algoritmo di moltiplicazione della matrice di Strassen? È un incidente fortunato o c'è qualcosa di più profondo?


Mi è stato detto che nessuno lo sa davvero, qualsiasi cosa sarebbe principalmente la speculazione. Tuttavia, ho trovato questo che potrebbe essere applicabile (anche se non l'ho letto).
Dukeling,

Penso a Strassen alg. è chiaro in wikipedia.
MarshalSHI,

4
@meshuai Penso che spieghi solo perché funziona , non come ci abbia pensato , come con la maggior parte delle altre risorse.
Dukeling,

2
Potresti dare un'occhiata al documento originale di Strassen: scgroup.hpclab.ceid.upatras.gr/class/SC/Papers/Strassen.pdf
Axel Kemper,

Risposte:


26

A parte Strassen, nessuno è in grado di dirti come Strassen abbia avuto la sua idea. Howeber¹, posso dirti, come avresti potuto trovare tu stesso quella formula, a condizione che tu sia interessato alla geometria algebrica e alla teoria della rappresentazione. Questo ti dà anche gli strumenti per dimostrare che la formula di Strassen è la migliore possibile o, più precisamente, che non esiste una formula che calcola il prodotto di due matrici 2 × 2 che utilizza meno di 7 moltiplicazioni .

Dato che sei interessato alle matrici, suppongo tu conosca l'algebra lineare di base e sarà un po 'sfocato per i dettagli più avanzati.

Prima di tutto sia E l'insieme di tutte le mappe lineari da un piano a un piano. Questo è fondamentalmente l'insieme di tutte le matrici 2 × 2, ma ci dimentichiamo di un particolare sistema di coordinate, perché, se esistesse un sistema di coordinate migliore di quello "predefinito", potremmo avere interesse ad usarlo per la moltiplicazione di matrici. Indichiamo anche con E † il doppio spazio di E e con X = P (E⊗E † ⊗E †) lo spazio proiettivo associato al prodotto tensoriale E⊗E † ⊗E † .

Un elemento di X = P (E⊗E † ⊗E †) della forma speciale [c⊗α⊗β] può essere interpretato come un'operazione elementare su matrici che, in alcuni sistemi di coordinate appopriate, legge un coefficiente di una matrice a ed un coefficiente di una matrice B e scrive il prodotto di questi coefficienti in qualche matrice C . Un elemento generale di X è una combinazione di queste operazioni elementari, quindi il prodotto π di due matrici, intesa come una mappa da P (E) × P (E) a P (E), è un punto X .

La solita formula del prodotto a matrice e la formula di Strassen possono essere espresse come combinazioni di queste operazioni lineari, quindi lasciatemi indicare con W l'insieme di queste operazioni elementari [c⊗α⊗β] e lasciatemi descrivere geometricamente le loro combinazioni.

Sia W₂ la varietà di secanti di W in X. Si ottiene prendendo l'unione (chiusura dell'un ) di tutte le linee che attraversano due punti (generici) di W₁ . Possiamo pensare a esso come all'insieme di tutte le combinazioni di due operazioni di elemetary.

Sia W₃ la varietà dei piani secanti di W in X. Si ottiene prendendo l'unione (chiusura dell'un ) di tutti i piani che attraversa tre punti (generici) di W₁ . Possiamo pensare a esso come all'insieme di tutte le combinazioni di tre operazioni di elemetary.

Allo stesso modo, definiamo varietà secanti per indici maggiori. Si noti che queste varietà diventano sempre più grandi, vale a dire W₂⊂W₂⊂W₃⊂ ⋯ Quindi la formula del prodotto a matrice classica mostra che il prodotto delle matrici è un punto di W₈ . In realtà

PROPOSIZIONE (Strassen) - Il prodotto delle matrici π risiede in W₇.

Per quanto ne so, Strassen non ha messo le cose in questo modo, tuttavia questo è un punto di vista geometrico su questa domanda. Questo punto di vista è molto utile, perché ti consente anche di dimostrare che la formula di Strassen è la migliore, cioè che π non risiede in W₆ . I metodi geometrici sviluppati qui possono essere utilizzati anche per una gamma più ampia di problemi.

Spero di aver catturato la tua curiosità. Puoi andare oltre leggendo questo articolo di Landsberg e Manivel:

http://arxiv.org/abs/math/0601097

¹ Non risolverò questo errore di battitura, perché ho preso un raffreddore.


È abbastanza semplice dimostrare che essere in grado di realizzare un prodotto matrice (3x3) con 21 moltiplicazioni porterebbe a un algoritmo asintoticamente più veloce. Qualche idea se questo è possibile / impossibile / sconosciuto?
gnasher729,

3

Mi è appena stato assegnato il compito di fare questo per i compiti a casa, e pensavo di avere un'epifania ordinata: l'algoritmo di Strassen sacrifica la "larghezza" dei suoi componenti di pre-sommazione al fine di utilizzare meno operazioni in cambio di componenti di pre-somma "più profonde" che può ancora essere utilizzato per estrarre la risposta finale. (Questo non è il modo migliore per dirlo, ma è difficile per me spiegarlo).

Userò l'esempio della moltiplicazione di due numeri complessi per illustrare il bilancio di " operazioni vs. componenti ":

L'equazione per numeri complessi.

Si noti che utilizziamo 4 moltiplicazioni, che risultano in 4 componenti del prodotto :

Abbiamo 4 componenti del prodotto.

Nota che i 2 componenti finali che vogliamo: le parti reali e immaginarie del numero complesso, sono in realtà equazioni lineari: sono somme di prodotti in scala. Quindi abbiamo a che fare con due operazioni qui: addizione e moltiplicazione.

Il fatto è che i nostri 4 componenti del prodotto possono rappresentare i nostri 2 componenti finali se aggiungiamo o sottraggiamo semplicemente i nostri componenti:

I nostri componenti del prodotto possono rappresentare quelli finali.

Ma i nostri 2 componenti finali possono essere rappresentati come somme di prodotti. Ecco cosa mi è venuto in mente:

In realtà abbiamo bisogno solo di 3 componenti di prodotto distinti.

Se riesci a vedere, in realtà abbiamo bisogno solo di 3 componenti di prodotto distinti per rendere i nostri ultimi due:

I nostri 3 componenti distinti.

Ma aspetta! Ognuna delle lettere maiuscole sono di per sé prodotti! Ma il trucco è che sappiamo di poter generare (A + B + C + D) da (a + b) (c + d), che è solo 1 moltiplicazione.

Quindi, alla fine, il nostro algoritmo è ottimizzato per utilizzare meno, ma componenti "più grassi", dove scambiamo la quantità di moltiplicazioni per più operazioni di somma.

Parte di ciò che consente ciò è la proprietà distributiva, che consente ad A (B + C) di essere equivalente a (AB + AC). Nota come il primo può essere calcolato usando 1 operazione add e 1 moltiplica, mentre il secondo richiede 2 moltiplicazioni e 1 somma.

L'algoritmo di Strassen è un'estensione dell'ottimizzazione che abbiamo applicato ai prodotti con numeri complessi, tranne per il fatto che ci sono più termini di prodotto target e possibili più componenti di prodotto che possiamo usare per ottenere quei termini. Per una matrice 2x2, l'algoritmo di Strassen trasforma un algoritmo che ha bisogno di 8 moltiplicazioni per uno che ha bisogno di 7 moltiplicazioni e sfrutta la proprietà distributiva per "unire" due moltiplicazioni in un'unica operazione, e invece toglie il nuovo nodo "più grasso" per estrarne uno termine del prodotto o l'altro, ecc.

Un buon esempio: per ottenere (-1) e (2) e (5), puoi pensarlo come solo (-1), (2), (5), oppure puoi considerarlo come (2-3 ), (2), (2 + 3). Le seconde operazioni usano numeri meno distinti, comunque. Il problema è che il numero di numeri distinti è equivalente al numero di componenti del prodotto che è necessario calcolare per la moltiplicazione della matrice. Ottimizziamo semplicemente per questo per trovare una certa visione delle operazioni sottostanti che sfrutta gli output isomorfi usando una diversa variazione attraverso la proprietà distributiva.

Forse questo potrebbe essere collegato in qualche modo alla topologia? Questo è solo il modo in cui il mio profano lo capisce.

Modifica: ecco una foto dei miei appunti che ho disegnato nel processo di spiegazione del numero complesso:

Alcune note per capire la complessa parte numerica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.