Esercizio - algoritmo di Strassen sulle matrici supercircolanti (esercizi su supercircolanti e circolanti, es. SC 6)
In questa pagina 6
Esercizio supplementare 6 sulle matrici supercircolanti, dalle note ed esercizi del corso di Algoritmi per l'Ingegneria (Ing. Informatica UniPD) su supercircolanti e circolanti. Teoria usata: Algoritmo di Strassen e ibridazioneStrassen calcola il prodotto n x n con 7 chiamate ricorsive invece di 8, usando 10 somme/sottrazioni nel divide e 8 nel conquer: T(n) = 7T(n/2) + (9/2)n^2, Theta(n^(log2 7)) con soluzione esatta 7n^(log2 7) - 6n^2; la costante 7 è più che tripla di quella dell'iterativo (2) e Strassen batte l'iterativo solo da n = 655 (per le potenze di 2, da 1024). L'ibridazione cambia il caso base (iterativo per n <= n0): costo n^(log2 7)(2n0+5)/n0^(log2 7 - 2) - 6n^2, minimo per n0 = 8 con costante ~3.92.Algoritmo di Strassen e ibridazione →, Matrici circolanti e supercircolanti - algoritmi divide and conquerle matrici supercircolanti (quadranti alternati ricorsivi) hanno solo n valori distinti: somma in n operazioni, prodotto in 4n log2 n + n con il trucco (A1+A2)(B1+B2) e (A1-A2)(B1-B2) invece delle 4 chiamate (Theta(n^2)); gli autovalori sono la trasformata di Hadamard della prima riga (FHT, n log2 n) e il prodotto passa dalla base diagonalizzante; le matrici circolanti sono polinomi nella matrice di rotazione R, il loro prodotto è la convoluzione ciclica delle prime righe e si diagonalizzano con la matrice di Fourier: prodotto in O(n log n) con la FFT.Matrici circolanti e supercircolanti - algoritmi divide and conquer →, Master Theorem - enunciato, casi e applicazioniMaster Theorem per T(n) = aT(n/b) + w(n): si confronta w(n) con la funzione soglia n^(log_b a). Caso 1 (w minore di una potenza polinomiale): Theta(n^(log_b a)); caso 2 (w della stessa taglia): Theta(n^(log_b a) log n); caso 3 (w maggiore e regolare): Theta(w(n)). Prova completa dai livelli dell'albero, versione estesa (parti intere, n0 qualsiasi), esempi, e l'uso scorretto quando nessun caso si applica (w = n log n).Master Theorem - enunciato, casi e applicazioni → e Albero della ricorrenza e formula generale per le ricorrenzeL'albero della ricorrenza ha la forma dell'albero delle chiamate dell'istanza peggiore e T(n) è la somma dei lavori dei nodi. Per la famiglia T(n) = s(n)T(f(n)) + w(n) con base T0 per n <= n0, contando i nodi per livello con le iterate di f e il livello f(n,n0) si ottiene la formula chiusa T(n) = somma_l [prodotto_j s(f^(j)(n))] w(f^(l)(n)) + [prodotto s] T0, verificata per induzione e applicata a esempi (merge sort, Hanoi, ricorrenze con radice).Albero della ricorrenza e formula generale per le ricorrenze →.*
Testo
Strassen SC. Si analizzi come si semplifica la proprietà di sottostruttura dell'algoritmo di Strassen quando le matrici da moltiplicare sono supercircolanti (SC). Suggerimenti:
- Onde evitare confusione tra i blocchi delle SC e i fattori predisposti da Strassen in fase di divide, si denotino questi ultimi come e () invece che come e (notazione delle dispense).
- Le semplificazioni possono derivare, in fase di divide, dall'uguaglianza (talvolta a meno del segno) dei fattori, ma anche in fase di conquer, considerando che la matrice prodotto deve essere SC.
Si analizzi il numero di operazioni di un algoritmo per moltiplicare matrici SC basato sulla proprietà di sottostruttura come da voi semplificata. L'algoritmo ottenuto è competitivo con quello ?
Punto di partenza
Per due SC e i quadranti sono
Si riscrivono le formule di Strassen (Algoritmo di Strassen e ibridazioneStrassen calcola il prodotto n x n con 7 chiamate ricorsive invece di 8, usando 10 somme/sottrazioni nel divide e 8 nel conquer: T(n) = 7T(n/2) + (9/2)n^2, Theta(n^(log2 7)) con soluzione esatta 7n^(log2 7) - 6n^2; la costante 7 è più che tripla di quella dell'iterativo (2) e Strassen batte l'iterativo solo da n = 655 (per le potenze di 2, da 1024). L'ibridazione cambia il caso base (iterativo per n <= n0): costo n^(log2 7)(2n0+5)/n0^(log2 7 - 2) - 6n^2, minimo per n0 = 8 con costante ~3.92.Algoritmo di Strassen e ibridazione →) con e al posto di e dei fattori:
con , , , , , , , e , , , , , , .
Semplificazione del divide
Sostituendo i quadranti SC:
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 | ||
| 6 | ||
| 7 |
Si leggono quattro uguaglianze:
- e , quindi (uguaglianza a meno del segno);
- e , quindi ;
- e , quindi ;
- e , quindi .
I sette prodotti si riducono a quattro prodotti distinti, di matrici SC di ordine (i fattori sono somme e differenze di SC, quindi SC):
con , , , , . Per i fattori servono operazioni su SC di ordine : , , , (i fattori e sono blocchi, senza costo). Sono operazioni di divide, contro le di Strassen generale.
Semplificazione del conquer
Poiché il prodotto di due SC è SC, i due quadranti uguali sono e ; le formule lo confermano: e . Basta calcolare due matrici:
Controllo con la definizione (, ): ✓; e, sviluppando, ✓.
Algoritmo e conteggio
S_STRASSEN(A, B) { A, B SC di ordine n = 2^k }
n <- rows(A)
if n = 1 then return [a11 * b11]
* A = [A1 A2; A2 A1], B = [B1 B2; B2 B1] *
Q1 <- S_STRASSEN(S_SUB(A1, A2), S_SUM(B1, B2))
Q2 <- S_STRASSEN(A1, B1)
Q4 <- S_STRASSEN(S_SUM(A1, A2), B1)
Q5 <- S_STRASSEN(A1, S_SUB(B2, B1))
C1 <- S_SUM( S_SUB( S_SUB( S_SCALPROD(4, Q2), Q1), Q4), Q5)
C2 <- S_SUM(Q4, Q5)
return [C1 C2; C2 C1]- divide: (le due differenze , e le due somme , );
- conquer: , due sottrazioni e una somma per , e una somma per : .
Totale :
Master Theorem: , , soglia ; con : caso 1, .
Soluzione esatta (formula generale): il livello ha nodi su taglia con lavoro , le foglie sono :
Controllo: dà ; dà (quattro prodotti di scalari, più operazioni).
Conclusione: è competitivo?
No. La semplificazione toglie tre dei sette prodotti, ma ne restano quattro: e la soglia resta , quindi , contro dell'algoritmo con e (, due sole chiamate). Anzi, la costante è peggiore anche del metodo con quattro chiamate dalla definizione (): contro . Il motivo è che Strassen generale elimina una moltiplicazione sfruttando combinazioni delle sottomatrici in generale distinte; qui la ripetizione dei quadranti ecc. fa collassare i sette prodotti a quattro, ma non basta per arrivare a due prodotti, che sono quelli che bastano per le SC ( e determinano i due quadranti distinti). Per esempio per : operazioni contro di S_MUL.
Verifica con un programma. Un'implementazione di S_STRASSEN sulle prime righe, con conteggio delle operazioni, confrontata con il prodotto delle matrici SC piene per , dà il prodotto corretto e il conteggio ; e le uguaglianze , , valgono su matrici SC casuali di ordine .
Versione ripasso
Punto di partenza: SC con , (e così per ), poi le formule di Algoritmo di Strassen e ibridazioneStrassen calcola il prodotto n x n con 7 chiamate ricorsive invece di 8, usando 10 somme/sottrazioni nel divide e 8 nel conquer: T(n) = 7T(n/2) + (9/2)n^2, Theta(n^(log2 7)) con soluzione esatta 7n^(log2 7) - 6n^2; la costante 7 è più che tripla di quella dell'iterativo (2) e Strassen batte l'iterativo solo da n = 655 (per le potenze di 2, da 1024). L'ibridazione cambia il caso base (iterativo per n <= n0): costo n^(log2 7)(2n0+5)/n0^(log2 7 - 2) - 6n^2, minimo per n0 = 8 con costante ~3.92.Algoritmo di Strassen e ibridazione → con fattori , .
- Divide semplificato: , ; , ; , ; , ; , .
- Uguaglianze: , , , . Sette prodotti diventano quattro: , , , .
- Conquer: il prodotto è SC, quindi e con e . Controllo con : i termini si cancellano (: ; : ; : ; resta da ).
- Costo: divide operazioni su SC di ordine , conquer (prodotto per , tre per , una per ): lavoro . Master Theorem: soglia , caso 1, (Master Theorem - enunciato, casi e applicazioniMaster Theorem per T(n) = aT(n/b) + w(n): si confronta w(n) con la funzione soglia n^(log_b a). Caso 1 (w minore di una potenza polinomiale): Theta(n^(log_b a)); caso 2 (w della stessa taglia): Theta(n^(log_b a) log n); caso 3 (w maggiore e regolare): Theta(w(n)). Prova completa dai livelli dell'albero, versione estesa (parti intere, n0 qualsiasi), esempi, e l'uso scorretto quando nessun caso si applica (w = n log n).Master Theorem - enunciato, casi e applicazioni →). Esatto: (: ).
- Conclusione: non è competitivo con (due chiamate con , ), e ha costante peggiore anche dei delle quattro chiamate dalla definizione; per : contro . Con e bastano due prodotti.
- Errori tipici: non accorgersi che vale a meno del segno; dimenticare il fattore in ; calcolare anche (coincide con ); concludere (con quattro prodotti il costo è ).