Esercizio - domande di prima parte su moltiplicazione di matrici (simulazioni d'esame)
Domande della prima parte (risposta unica o scelta multipla, senza procedimento) delle simulazioni d'esame di Algoritmi per l'Ingegneria, Ing. Informatica UniPD, sull'argomento moltiplicazione di matrici. Teoria: Prodotto di matrici - algoritmo iterativo e ricorsivo a blocchimodello di costo sulle matrici n x n (operazioni tra scalari, taglia n oppure N = n^2); somma in n^2 operazioni (ottima); prodotto righe per colonne iterativo con costo esatto 2n^3 - n^2; proprietà frattale del prodotto a blocchi dimostrata sugli indici; algoritmo ricorsivo RMUL con T(n) = 8T(n/2) + n^2, Theta(n^3) e soluzione esatta 2n^3 - n^2 per induzione e per srotolamento: fa le stesse operazioni dell'iterativo.Prodotto di matrici - algoritmo iterativo e ricorsivo a blocchi →, 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 → e Esponenziazione veloce per quadrature successivepotenza x^n con un operatore associativo con elemento neutro, costo = numero di applicazioni dell'operatore; STUPID_POWER costa n-1, la sottostruttura x^n = (x^floor(n/2))^2 (per n dispari per x) dà POWER con T(n) = floor(log2 n) + (numero di bit a 1 di n) - 1, Theta(log n) (caso peggiore 2 floor(log2 n), n = 2^t - 1); versioni iterative POWER2 e POWER3 dalla rappresentazione binaria di n; esempio con la matrice di Fibonacci; il modello a costo unitario vale solo se l'operatore non fa crescere gli operandi.Esponenziazione veloce per quadrature successive →.
Nelle simulazioni (2023-24 e 2025-26) la prima parte ha dieci domande; una sola riguarda questo argomento. Le altre sono su problemi computazionali, ricorrenze e conteggi, DFT, programmazione dinamica e greedy, e si trovano nelle pagine degli altri argomenti. Dopo la domanda originale ci sono domande di allenamento nello stesso stile sui temi di questa parte (non sono testi d'esame), con risposta e procedimento controllati con un programma che conta le operazioni.
Domanda della simulazione d'esame
Domanda. Si determini il numero di operazioni tra scalari effettuato dall'algoritmo di prodotto righe per colonne ricorsivo basato sulla definizione per moltiplicare due matrici quadrate , quando .
Risposta: .
Procedimento. L'algoritmo basato sulla definizione esegue:
- prodotti , per ;
- somme: ogni prodotto va sommato in , tranne i prodotti (uno per ogni coppia , quindi ).
Il totale è , e per : . L'algoritmo ricorsivo a blocchi (ricorrenza , ) ha la stessa soluzione esatta, perché fa le stesse operazioni in ordine diverso (vedi Prodotto di matrici - algoritmo iterativo e ricorsivo a blocchimodello di costo sulle matrici n x n (operazioni tra scalari, taglia n oppure N = n^2); somma in n^2 operazioni (ottima); prodotto righe per colonne iterativo con costo esatto 2n^3 - n^2; proprietà frattale del prodotto a blocchi dimostrata sugli indici; algoritmo ricorsivo RMUL con T(n) = 8T(n/2) + n^2, Theta(n^3) e soluzione esatta 2n^3 - n^2 per induzione e per srotolamento: fa le stesse operazioni dell'iterativo.Prodotto di matrici - algoritmo iterativo e ricorsivo a blocchi →). Controllo con la ricorrenza: , , ✓.
Domande di allenamento nello stesso stile
1. Numero di operazioni tra scalari del prodotto ricorsivo basato sulla definizione per . Risposta: . Procedimento: ; con la ricorrenza .
2. Quante chiamate ricorsive su matrici e quante somme/sottrazioni di matrici (divide più conquer) esegue l'algoritmo di Strassen per ? Risposta: chiamate e somme/sottrazioni ( nel divide, nel conquer). Il lavoro dei nodi interni è .
3. Numero di operazioni tra scalari dell'algoritmo di Strassen puro (caso base ) per . Risposta: . Procedimento: ; ; . Con la formula chiusa ✓.
4. Scegli un'alternativa. Qual è il primo (potenza di ) per cui Strassen puro esegue meno operazioni dell'algoritmo iterativo?
Risposta: . Procedimento: la disuguaglianza vale da ; per Strassen fa operazioni contro dell'iterativo (perde), per fa contro .
5. Con la versione ibrida dell'algoritmo di Strassen (caso base: iterativo per ) e , quante operazioni si eseguono per ? Risposta: . Procedimento: , dove è il costo dell'iterativo. (Meno dell'iterativo puro, .)
6. Qual è il valore intero potenza di che minimizza la costante del termine dominante dell'algoritmo ibrido, e quanto vale (due cifre decimali)? Risposta: , . Procedimento: decresce fino a e poi cresce; tra le potenze di si confrontano e .
7. Quante somme servono (modello a costo unitario per le operazioni tra scalari, assegnamenti gratuiti) per sommare due matrici supercircolanti di ordine con l'algoritmo specializzato? Risposta: . Procedimento: , , quindi (una per elemento della prima riga).
8. Numero di operazioni dell'algoritmo di prodotto di matrici supercircolanti con le due chiamate , per (con , ). Risposta: . Procedimento: , , ; formula ✓.
9. Numero di applicazioni di eseguite dall'algoritmo ricorsivo di esponenziazione per quadrature successive POWER con . Risposta: . Procedimento: : gli esponenti dispari sono e (costano ), gli esponenti pari costano : . Con la formula ().
10. Complessità, in funzione di , di POWER nel modello a costo unitario per ogni applicazione di . Risposta: , dalla ricorrenza , soglia , caso 2 del Master Theorem. STUPID_POWER, basato sulla definizione, ne esegue , .
Versione ripasso
Domanda della simulazione: operazioni tra scalari del prodotto ricorsivo basato sulla definizione per : 960. prodotti e somme (ogni prodotto si somma in tranne gli ): . Stesso valore del ricorsivo: , , , (Prodotto di matrici - algoritmo iterativo e ricorsivo a blocchimodello di costo sulle matrici n x n (operazioni tra scalari, taglia n oppure N = n^2); somma in n^2 operazioni (ottima); prodotto righe per colonne iterativo con costo esatto 2n^3 - n^2; proprietà frattale del prodotto a blocchi dimostrata sugli indici; algoritmo ricorsivo RMUL con T(n) = 8T(n/2) + n^2, Theta(n^3) e soluzione esatta 2n^3 - n^2 per induzione e per srotolamento: fa le stesse operazioni dell'iterativo.Prodotto di matrici - algoritmo iterativo e ricorsivo a blocchi →).
Allenamento (risposte controllate con un programma):
- ricorsivo/iterativo, : ;
- Strassen: chiamate e somme/sottrazioni ( divide, conquer), lavoro ; : , (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 →);
- Strassen puro batte l'iterativo da , per le potenze di da (: );
- ibrido , : ;
- costante : minimo per , (; soglia continua );
- SC di ordine , somma: operazioni; prodotto con (): dà (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 →);
POWER: applicazioni; complessità , contro diSTUPID_POWER(Esponenziazione veloce per quadrature successivepotenza x^n con un operatore associativo con elemento neutro, costo = numero di applicazioni dell'operatore; STUPID_POWER costa n-1, la sottostruttura x^n = (x^floor(n/2))^2 (per n dispari per x) dà POWER con T(n) = floor(log2 n) + (numero di bit a 1 di n) - 1, Theta(log n) (caso peggiore 2 floor(log2 n), n = 2^t - 1); versioni iterative POWER2 e POWER3 dalla rappresentazione binaria di n; esempio con la matrice di Fibonacci; il modello a costo unitario vale solo se l'operatore non fa crescere gli operandi.Esponenziazione veloce per quadrature successive →).
Errori tipici: contare somme invece di ; credere che il ricorsivo a blocchi faccia meno operazioni dell'iterativo; confondere la soglia con la prima potenza di (); contare operazioni nel solo divide; dimenticare che la scelta di è tra le potenze di .