Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Un nuovo record di complessità per l'algoritmo di moltiplicazione tra matrici
Scritto da Alessandro Piccarolo il 12-12-2011 ore 09:49
La moltiplicazione tra matrici costituisce un'operazione fondamentale in molte applicazioni di calcolo numerico (si pensi ad esempio alla statistica e ai modelli meteorologici), al punto che l'utilizzo di un algoritmo efficiente e veloce per la sua esecuzione consente di risparmiare tempo in termini di impiego della CPU.

L'algoritmo classico di moltiplicazione delle righe per colonne di due matrici quadrate di n elementi è semplice da implementare, in quanto prevede solamente l'esecuzione di tre cicli annidati, ma richiede un numero di moltiplicazioni pari a n3.

Tuttavia, l'idea secondo la quale la moltiplicazione tra matrici potesse essere realizzata in un tempo quadratico (o quasi), ossia n2, ha portato alla definizione di nuovi algoritmi di calcolo, meno intuitivi di quello classico, ma più veloci. Ciascuno di questi algoritmi prende come riferimento la moltiplicazione tra matrici quadrate di dimensione 2x2, in quanto le operazioni tra matrici di dimensioni maggiori possono sempre essere scomposte in operazioni ricorsive tra blocchi di dimensioni 2x2.

Il primo di questi algoritmi, sviluppato nel 1969 da Volker Strassen, consentì di ridurre il numero di moltiplicazioni da 8 a 7, aumentando d'altra parte il numero di addizioni, riuscendo tuttavia a ottenere un ordine dell'algoritmo di n2807. Sebbene il miglioramento introdotto da questo algoritmo rispetto a quello classico sia lieve e il suo impiego nella pratica sia limitato solamente a matrici di dimensioni non troppo elevate, l'importanza di questo algoritmo risiede nel fatto di aver dimostrato che l'approccio classico di esecuzione della moltiplicazione tra matrici, fino ad allora considerato l'unico possibile, non rappresentava il limite minimo raggiungibile per la complessità dell'algoritmo.

Dopo numerosi altri lievi miglioramenti, un nuovo passo in avanti fu realizzato nel 1990, grazie a un algoritmo sviluppato da Coppersmith e Winograd, che permise di raggiungere il nuovo ordine di grandezza di n2376, tuttora considerato il record di velocità di esecuzione.

Tuttavia, a vent'anni di distanza dal lavoro di Coppersmith e Winograd, un lavoro pubblicato da Virginia Vassilevska Williams dell'Università di Berkeley ha dimostrato l'elaborazione di un nuovo algoritmo, che ha portato l'ordine di complessità a n2373, sfruttando l'applicazione iterativa dell'algoritmo per un numero di volte pari a otto.

Anche in questo caso, come già visto nell'algoritmo di Strassen, l'importanza di questo nuovo algoritmo è essenzialmente teorica, in quanto la sua applicabilità è praticamente nulla, dal momento che la complessità di implementazione nel caso delle dimensioni delle matrici comunemente utilizzate sarebbe troppo elevata.
Precedente: HTML5 Canvas: Native Interactivity and Animation for the Web
Successiva: webOS diventa open source
Intervento di fivemilesout del 28-12-2011 ore 14:18
Plebeo
Plebeo
(5 interventi)
Iscritto il 20-07-2006
Interessante contributo.
Anche se forse può apparire chiaro dal contesto, sarebbe meglio precisare che l'ordine di grandezza è n^2,807 per Strassen, n^2,376 per Coppersmith–Winograd e n^2,373 per Vassilevska Williams. Cioè meno di 2^3 (dal testo, sembra meno di 2^3000).
Intervento di Alessandro Piccarolo a.k.a. apiccarolo del 28-12-2011 ore 23:57, Torino (TO)
Plebeo
Plebeo
(6 interventi)
Iscritto il 02-10-2008
Grazie per la precisazione, si tratta di un refuso.
Alessandro
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.278 secondi.