Esercizio - matrici RCA, somma e prodotto matrice-vettore (compito del 18 giugno 2026, es. 1)
In questa pagina 5
Compito d'esame di Algoritmi per l'Ingegneria, Ing. Informatica UniPD, 18 giugno 2026, seconda parte, esercizio 1 (17 punti). Teoria usata: 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 → (stessa tecnica delle supercircolanti), 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 →, Dimostrazioni, induzione e invariantiTecniche di dimostrazione (esempio, controesempio, assurdo), induzione con casi base multipli, invarianti di ciclo (inizializzazione, conservazione, uso alla fine), schema generale per provare la correttezza; esempi svolti su arrayMax, sequenza di bit e numeri di Fibonacci.Dimostrazioni, induzione e invarianti → 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
Sia una potenza di due. Una matrice si dice Ricorsivamente Centralmente Antisimmetrica di ordine (-RCA, in breve) se , oppure, per ,
con matrici -RCA.
- 1.(a) [4 punti] Si dimostri che, se e sono -RCA, allora e sono -RCA.
- 1.(b) [6 punti] Date due matrici -RCA e , si descrivano (senza necessariamente fornire lo pseudocodice) e si analizzino algoritmi ricorsivi
RCA_SUMeRCA_SUBche restituiscano, rispettivamente, e . Si esprima la complessità di tali algoritmi in funzione del numero di operazioni aritmetiche tra scalari reali eseguite. (Attenzione: dato lo scalare , si assuma che il calcolo dello scalare abbia costo nullo.) - 1.(c) [7 punti] Si scriva e si analizzi lo pseudocodice di un algoritmo ricorsivo
RCA_MV_MULche, data una matrice -RCA e un vettore , calcoli il prodotto matrice-vettore . (Suggerimento: un algoritmo efficiente deve utilizzare opportune, semplici combinazioni lineari dei quadranti di e dei due sottovettori tali che .)
Attenzione: per ottenere punteggio pieno, ciascuno dei tre algoritmi deve eseguire operazioni tra scalari reali.
Come si legge la struttura
Una -RCA ha elementi ma solo valori indipendenti: i quadranti in basso sono determinati da quelli in alto ( e ), e ricorsivamente e hanno valori indipendenti ciascuna. Per :
con e , in basso a sinistra e in basso a destra. La prima riga determina tutta la matrice. L'idea è la stessa delle supercircolanti: lavorare solo sui due quadranti in alto e ottenere gli altri con un cambio di segno, che qui costa .
Punto (a): chiusura per somma e differenza
Induzione su con (l'induzione vera è su ; vedi Dimostrazioni, induzione e invariantiTecniche di dimostrazione (esempio, controesempio, assurdo), induzione con casi base multipli, invarianti di ciclo (inizializzazione, conservazione, uso alla fine), schema generale per provare la correttezza; esempi svolti su arrayMax, sequenza di bit e numeri di Fibonacci.Dimostrazioni, induzione e invarianti →).
- Base (): ogni matrice è -RCA per definizione, e somma e differenza di due scalari sono scalari.
- Ipotesi: somma e differenza di due matrici -RCA sono -RCA.
- Passo: siano e -RCA, con ,
Si somma o sottrae quadrante per quadrante (la somma di matrici ha la proprietà frattale: si può fare per blocchi). Con il segno preso uguale in tutti i quadranti:
Il secondo passaggio raccoglie il segno meno: e . Il quadrante in alto a sinistra è l'opposto di quello in basso a destra, e quello in alto a destra è l'opposto di quello in basso a sinistra, come richiede la definizione. Inoltre e sono somme o differenze di matrici -RCA, quindi per ipotesi sono -RCA. Allora ha la forma con -RCA: è -RCA.
Osservazione. La stessa cosa non vale per il prodotto: per , e danno , che non è RCA (la diagonale principale non è l'opposto dell'antidiagonale). Per questo l'esercizio chiede solo somma, differenza e prodotto matrice-vettore.
Punto (b): RCA_SUM e RCA_SUB
Dal punto (a): i due quadranti in alto di sono e , e gli altri due sono i loro opposti.
Base : una sola operazione (una somma o una sottrazione tra scalari).
Caso : due chiamate ricorsive su matrici -RCA per i quadranti in alto,
RCA_SUM: e ;RCA_SUB: e .
I quadranti in basso si ottengono scambiando i quadranti in alto e cambiando il segno di ogni elemento: costo nullo per l'ipotesi del testo. Il lavoro dei nodi interni è quindi .
Ricorrenza (la stessa per le due procedure):
Srotolando: (con ). La formula generale (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 →) dà lo stesso risultato: , , restano solo le foglie da costo . Quindi
È il minimo possibile: le matrici hanno valori indipendenti e ognuno del risultato richiede la propria somma. (Se invece si usassero le matrici dense, sarebbero somme.)
Punto (c): RCA_MV_MUL
Caso base : e , una moltiplicazione.
Passo. Per si scrivono
La definizione porterebbe a prodotti matrice-vettore su taglia () e quindi , cioè : non basta. Il suggerimento propone le combinazioni lineari dei quadranti e dei sottovettori:
dove e sono -RCA per il punto (a). Due soli prodotti ricorsivi:
Si sommano e si sottraggono (i termini misti cambiano segno, gli altri no):
Quindi
Questa è la proprietà di sottostruttura: un prodotto matrice-vettore di taglia si riduce a due di taglia (entrambe su matrici RCA e vettori di ), più combinazioni lineari.
RCA_MV_MUL(T, x)
n <- T.rows
if n = 1 then return (t11 * x1)
* T = [A B; -B -A], x = [u; v] *
X <- RCA_SUM(A, B) { n/2 operazioni }
W <- RCA_SUB(A, B) { n/2 operazioni }
for i <- 1 to n/2 do
r[i] <- u[i] + v[i] { n/2 operazioni }
s[i] <- u[i] - v[i] { n/2 operazioni }
y <- RCA_MV_MUL(X, r)
z <- RCA_MV_MUL(W, s)
for i <- 1 to n/2 do
m[i] <- (y[i] + z[i]) / 2 { 2 operazioni }
m[i + n/2] <- (z[i] - y[i]) / 2 { 2 operazioni }
return mCorrettezza: per induzione su . Per è immediata. Per , e sono -RCA (punto (a)) e il costo del cambio di segno permette di tenere implicite le metà in basso; ; per ipotesi induttiva le chiamate restituiscono e ; l'identità sopra mostra che .
Analisi. Lavoro dei nodi interni, in numero di operazioni tra scalari reali:
| passo | operazioni |
|---|---|
(RCA_SUM su ordine ) |
|
(RCA_SUB) |
|
| , componenti, somma e divisione | |
| , componenti, differenza e divisione | |
| totale |
La ricorrenza è
Soluzione esatta con la formula generale: , , , , , livelli interni. Al livello ci sono nodi su taglia , ciascuno con lavoro : ogni livello costa . Le foglie sono da costo :
Esempio (). e : . Con l'algoritmo: , , , ; , ; , ; , ; . Le operazioni sono : (), (), ( moltiplicazioni), ().
Verifica con un programma. Un'implementazione di RCA_SUM e RCA_MV_MUL che conta le operazioni e confronta il risultato con calcolato dalla matrice piena, per , dà conteggi uguali a e a . La soluzione del corso riporta , lo stesso valore.
Versione ripasso
Struttura: con -RCA: solo valori indipendenti (prima riga), cambio di segno gratis. Tecnica come le supercircolanti (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 →). Il prodotto di due RCA non è RCA (: ).
- (a) Chiusura: induzione su ; base banale; passo , con , -RCA per ipotesi.
- (b)
RCA_SUM/RCA_SUB: due chiamate sui quadranti in alto (, ), quelli in basso sono gli opposti (gratis): , , quindi . - (c)
RCA_MV_MUL: . Con , (RCA per (a)), , si ha , , quindi , e Base: . Due chiamate ricorsive invece di quattro. - Pseudocodice
RCA_MV_MUL: se ritorna ; poiRCA_SUM,RCA_SUB; per : , ;RCA_MV_MUL,RCA_MV_MUL; per : , . Correttezza per induzione: RCA per (a), , . - Conteggio per livello: ogni livello ha lavoro (il livello ha nodi da ), i livelli interni sono e le foglie (una moltiplicazione ciascuna): .
- Costo di (c): valgono ciascuno (), le due metà del risultato operazioni ciascuna (somma e divisione): ciascuna, totale . , , quindi ; Master Theorem caso 2 (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 →).
- Esempio : , : , , , , , , , operazioni.
- Errori tipici: fare quattro chiamate (, non ); dimenticare che e devono essere RCA (serve il punto (a)) per poter ricorrere; contare il cambio di segno come operazione; dimenticare le due divisioni per nel conteggio ( e non ).