Salta al contenuto
Note per Studenti Esercizio - prodotto di matrici complesse, ricorrenza e induzione parametrica (compito del 8 luglio 2024, es. 1)

Esercizio - prodotto di matrici complesse, ricorrenza e induzione parametrica (compito del 8 luglio 2024, es. 1)

Esame
In questa pagina 4

Compito d'esame di Algoritmi per l'Ingegneria, Ing. Informatica UniPD, 8 luglio 2024, seconda parte, esercizio 1 (16 punti). Teoria usata: 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 →, Induzione parametrica - limitazioni esatte delle ricorrenzeL'induzione parametrica prova una limitazione T(n) <= cn+d (o >=) con costanti c e d incognite: si simula la verifica per induzione, si raccolgono i vincoli su c e d dalla base e dal passo HP => TH, e se l'intersezione non è vuota si sceglie la coppia migliore. Per MAX dà esattamente T(n) = n-1; può fallire anche con guess veri (si aggiunge un parametro o un termine di ordine inferiore).Induzione parametrica - limitazioni esatte delle ricorrenze →, 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 Numeri complessiI numeri complessi estendono i reali introducendo l'unità immaginaria $i$ ($i^2 = -1$) e possono essere rappresentati in forma algebrica, trigonometrica o polare. Tramite la formula di Eulero e le proprietà del modulo e dell'argomento, è possibile calcolare agilmente prodotti, potenze e radici ennesime.Numeri complessi →.

Testo

Sia n≥1n \ge 1 una potenza di due. Con riferimento all'algoritmo ricorsivo elementare per moltiplicare due matrici n×nn \times n ad elementi complessi rappresentati in forma cartesiana (z=a+ibz = a + ib), si vuole determinare il numero esatto T(n)T(n) di operazioni tra numeri reali effettuato dall'algoritmo. Si ricorda che un'addizione complessa richiede 22 addizioni reali, mentre una moltiplicazione complessa richiede 44 moltiplicazioni e 22 addizioni reali.

  • 1.(a) [5 punti] Si scriva l'equazione di ricorrenza per T(n)T(n) (non è necessario fornire lo pseudocodice).
  • 1.(b) [8 punti] Si risolva l'equazione di ricorrenza scritta al punto precedente mediante induzione parametrica, ipotizzando che la soluzione sia un polinomio di terzo grado, T(n)=an3+bn2+cn+dT(n) = an^3 + bn^2 + cn + d.
  • 1.(c) [3 punti] Si determini il numero TMUL(n)T_{MUL}(n) delle sole moltiplicazioni reali. Si scelga il metodo che viene più comodo, ma si giustifichi bene la risposta.

Punto (a): la ricorrenza

L'algoritmo ricorsivo elementare è RMUL (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 →): per n=1n = 1 un prodotto tra scalari complessi; per n>1n > 1 otto chiamate su matrici n2×n2\frac n2 \times \frac n2 e quattro somme di matrici complesse n2×n2\frac n2 \times \frac n2 (i quadranti Cij=Ai1B1j+Ai2B2jC_{ij} = A_{i1}B_{1j} + A_{i2}B_{2j}).

Conteggio in operazioni reali:

  • Caso base n=1n = 1: una moltiplicazione complessa, cioè 44 moltiplicazioni reali più 22 addizioni reali: T(1)=6T(1) = 6. Per esempio (a+ib)(c+id)=(ac−bd)+i(ad+bc)(a + ib)(c + id) = (ac - bd) + i(ad + bc): i prodotti acac, bdbd, adad, bcbc (44) e la differenza ac−bdac - bd e la somma ad+bcad + bc (22).
  • Conquer (n>1n > 1): 44 somme di matrici complesse n2×n2\frac n2 \times \frac n2. Ogni somma ha (n2)2=n24\left(\frac n2\right)^2 = \frac{n^2}{4} addizioni complesse, ognuna da 22 addizioni reali: 4⋅n24⋅2=2n24 \cdot \frac{n^2}{4} \cdot 2 = 2n^2 operazioni reali. Il divide non costa (metacomando).

T(n)={6n=1,8 T ⁣(n2)+2n2n>1.T(n) = \begin{cases} 6 & n = 1, \\ 8\,T\!\left(\frac n2\right) + 2n^2 & n > 1. \end{cases}

Punto (b): induzione parametrica con polinomio di terzo grado

Si pone la guess T(n)=an3+bn2+cn+dT(n) = an^3 + bn^2 + cn + d con a,b,c,da, b, c, d da determinare: l'induzione parametrica impone che il passo induttivo, con questa forma, funzioni come identità in nn, e raccoglie i vincoli (Induzione parametrica - limitazioni esatte delle ricorrenzeL'induzione parametrica prova una limitazione T(n) <= cn+d (o >=) con costanti c e d incognite: si simula la verifica per induzione, si raccolgono i vincoli su c e d dalla base e dal passo HP => TH, e se l'intersezione non è vuota si sceglie la coppia migliore. Per MAX dà esattamente T(n) = n-1; può fallire anche con guess veri (si aggiunge un parametro o un termine di ordine inferiore).Induzione parametrica - limitazioni esatte delle ricorrenze →).

Caso base. T(1)=a+b+c+dT(1) = a + b + c + d deve valere 66:

a+b+c+d=6.(1)a + b + c + d = 6. \tag{1}

Passo. Per n>1n > 1 si suppone T(n2)=a(n2)3+b(n2)2+c n2+dT(\frac n2) = a\left(\frac n2\right)^3 + b\left(\frac n2\right)^2 + c\,\frac n2 + d e si calcola, sostituendo nella ricorrenza:

T(n)=8 T ⁣(n2)+2n2=8a n38+8b n24+8c n2+8d+2n2=an3+(2b+2)n2+4cn+8d.\begin{aligned} T(n) &= 8\,T\!\left(\tfrac n2\right) + 2n^2 \\ &= 8a\,\frac{n^3}{8} + 8b\,\frac{n^2}{4} + 8c\,\frac n2 + 8d + 2n^2 \\ &= an^3 + (2b + 2)n^2 + 4cn + 8d. \end{aligned}

Perché la guess sia valida deve valere T(n)=an3+bn2+cn+dT(n) = an^3 + bn^2 + cn + d per ogni n>1n > 1, cioè

an3+(2b+2)n2+4cn+8d=an3+bn2+cn+dper infiniti valori di n.an^3 + (2b + 2)n^2 + 4cn + 8d = an^3 + bn^2 + cn + d \quad \text{per infiniti valori di } n.

Due polinomi uguali in infiniti punti sono identici: i coefficienti dei monomi dello stesso grado coincidono.

  • n3n^3: a=aa = a, nessun vincolo.
  • n2n^2: 2b+2=b2b + 2 = b, quindi b=−2b = -2.
  • n1n^1: 4c=c4c = c, quindi c=0c = 0.
  • n0n^0: 8d=d8d = d, quindi d=0d = 0.

Sostituendo in (1): a−2+0+0=6a - 2 + 0 + 0 = 6, quindi a=8a = 8. Risultato:

T(n)=8n3−2n2.\boxed{T(n) = 8n^3 - 2n^2.}

Verifica per induzione (ora con valori numerici, senza parametri). Base: T(1)=8−2=6T(1) = 8 - 2 = 6 ✓. Passo: se T(n2)=8n38−2n24=n3−n22T(\frac n2) = 8\frac{n^3}{8} - 2\frac{n^2}{4} = n^3 - \frac{n^2}{2} allora T(n)=8(n3−n22)+2n2=8n3−4n2+2n2=8n3−2n2T(n) = 8\left( n^3 - \frac{n^2}{2} \right) + 2n^2 = 8n^3 - 4n^2 + 2n^2 = 8n^3 - 2n^2 ✓.

Controllo indipendente. L'algoritmo ricorsivo fa le stesse operazioni di quello iterativo (2n3−n22n^3 - n^2 operazioni complesse; 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 →): n3n^3 moltiplicazioni complesse e n3−n2n^3 - n^2 addizioni complesse. In operazioni reali: n3n^3 moltiplicazioni complesse da 66 operazioni reali ciascuna (6n36n^3) e n3−n2n^3 - n^2 addizioni complesse da 22 ciascuna (2n3−2n22n^3 - 2n^2): 6n3+2n3−2n2=8n3−2n26n^3 + 2n^3 - 2n^2 = 8n^3 - 2n^2 ✓. Per n=2n = 2 il valore è 64−8=5664 - 8 = 56: otto prodotti complessi (4848) e quattro somme complesse (88).

Punto (c): moltiplicazioni reali

Metodo 1, conteggio diretto. Il prodotto ricorsivo esegue tutti i prodotti aik bkja_{ik}\,b_{kj} per 1≤i,j,k≤n1 \le i, j, k \le n, e nessun altro: n3n^3 moltiplicazioni complesse (le somme delle ricorsioni non contengono prodotti). Ognuna richiede 44 moltiplicazioni reali:

TMUL(n)=4n3.T_{MUL}(n) = 4n^3.

Metodo 2, ricorrenza. Le moltiplicazioni reali soddisfano TMUL(1)=4T_{MUL}(1) = 4 (una moltiplicazione complessa) e TMUL(n)=8 TMUL(n2)T_{MUL}(n) = 8\,T_{MUL}(\frac n2) (le somme del conquer non contengono moltiplicazioni, quindi il lavoro dei nodi interni è 00). Srotolando: TMUL(n)=8k⋅4=n3⋅4=4n3T_{MUL}(n) = 8^k \cdot 4 = n^3 \cdot 4 = 4n^3 (con n=2kn = 2^k, 8k=n38^k = n^3). I due metodi concordano.

Verifica con un programma. Un'implementazione dell'algoritmo ricorsivo su matrici a elementi complessi, con conteggio delle operazioni reali (un prodotto complesso vale 66, una somma complessa 22), per n=1,2,…,32n = 1, 2, \dots, 32, dà 8n3−2n28n^3 - 2n^2 operazioni e 4n34n^3 moltiplicazioni reali; i risultati coincidono con il prodotto calcolato da numpy.

Versione ripasso

  • (a) Ricorrenza (operazioni reali): base n=1n = 1, un prodotto complesso =4= 4 moltiplicazioni +2+ 2 addizioni reali, T(1)=6T(1) = 6. Conquer: 44 somme di matrici n2×n2\frac n2 \times \frac n2, ciascuna con n24\frac{n^2}{4} somme complesse da 22 operazioni reali: 4⋅n24⋅2=2n24 \cdot \frac{n^2}{4} \cdot 2 = 2n^2. T(n)={6n=18T(n2)+2n2n>1.T(n) = \begin{cases} 6 & n = 1 \\ 8T(\frac n2) + 2n^2 & n > 1. \end{cases}
  • (b) Induzione parametrica con T(n)=an3+bn2+cn+dT(n) = an^3 + bn^2 + cn + d (Induzione parametrica - limitazioni esatte delle ricorrenzeL'induzione parametrica prova una limitazione T(n) <= cn+d (o >=) con costanti c e d incognite: si simula la verifica per induzione, si raccolgono i vincoli su c e d dalla base e dal passo HP => TH, e se l'intersezione non è vuota si sceglie la coppia migliore. Per MAX dà esattamente T(n) = n-1; può fallire anche con guess veri (si aggiunge un parametro o un termine di ordine inferiore).Induzione parametrica - limitazioni esatte delle ricorrenze →):
    • base: a+b+c+d=6a + b + c + d = 6;
    • passo: 8T(n2)+2n2=an3+(2b+2)n2+4cn+8d8T(\frac n2) + 2n^2 = an^3 + (2b + 2)n^2 + 4cn + 8d, da imporre uguale a an3+bn2+cn+dan^3 + bn^2 + cn + d per infiniti nn, quindi i coefficienti coincidono: 2b+2=b⇒b=−22b + 2 = b \Rightarrow b = -2; 4c=c⇒c=04c = c \Rightarrow c = 0; 8d=d⇒d=08d = d \Rightarrow d = 0; poi a=8a = 8.
    • Risultato: T(n)=8n3−2n2T(n) = 8n^3 - 2n^2.
    • Verifica numerica per induzione: 8(n3−n22)+2n2=8n3−2n28(n^3 - \frac{n^2}{2}) + 2n^2 = 8n^3 - 2n^2.
  • Controllo: stesso numero di operazioni dell'iterativo: n3n^3 prodotti complessi da 66 e n3−n2n^3 - n^2 somme complesse da 22: 6n3+2n3−2n26n^3 + 2n^3 - 2n^2. Per n=2n = 2: 5656.
  • (c) Moltiplicazioni reali: n3n^3 prodotti complessi (uno per terna (i,j,k)(i,j,k)), ognuno con 44 moltiplicazioni reali: TMUL(n)=4n3T_{MUL}(n) = 4n^3. Alternativa: TMUL(1)=4T_{MUL}(1) = 4, TMUL(n)=8TMUL(n2)T_{MUL}(n) = 8T_{MUL}(\frac n2) (le somme non hanno prodotti), quindi 8k⋅4=4n38^k \cdot 4 = 4n^3.
  • Errori tipici: contare le somme complesse come una sola operazione (sono 22 reali); dimenticare le 22 addizioni reali del caso base (T(1)=6T(1) = 6 e non 44); non imporre l'uguaglianza dei coefficienti per infiniti nn (due polinomi uguali in infiniti punti sono identici); scrivere 8d=d8d = d come d=8d = 8 (da 8d=d8d = d segue d=0d = 0).

Teoria collegata