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 ":
Si noti che utilizziamo 4 moltiplicazioni, che risultano in 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:
Ma i nostri 2 componenti finali possono essere rappresentati come somme di prodotti. Ecco cosa mi è venuto in mente:
Se riesci a vedere, in realtà abbiamo bisogno solo di 3 componenti di prodotto distinti per rendere i nostri ultimi due:
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: