Appunti per il modulo di algoritmi e strutture dati - Sezione di ...
Appunti per il modulo di algoritmi e strutture dati - Sezione di ...
Appunti per il modulo di algoritmi e strutture dati - Sezione di ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
}<br />
return i;<br />
Il blocco interno è eseguito m volte, se m è <strong>il</strong> numero <strong>di</strong> volte che 2 <strong>di</strong>vide n. Quin<strong>di</strong> nel peggiore dei<br />
casi, e cioè quando n = 2 m , è eseguito log 2 n volte. Abbiamo quin<strong>di</strong> che <strong>il</strong> tempo T (n) è O(log n).<br />
2.4 Moltiplicazione <strong>di</strong> matrici<br />
Consideriamo <strong>per</strong> semplicità matrici quadrate. Date due matrici quadrate n × n, <strong>il</strong> prodotto righe <strong>per</strong><br />
colonne è una matrice n × n tale che l’elemento cij, i, j = 1, .., n è definito nel modo seguente:<br />
cij =<br />
n<br />
k=1<br />
aik × bkj<br />
La complessità del tempo in questo caso si calcola in funzione <strong>di</strong> n, cioè del numero <strong>di</strong> righe e <strong>di</strong> colonne.<br />
Poiché si devono calcolare almeno n 2 prodotti fra elementi <strong>di</strong>stinti, <strong>il</strong> numero <strong>di</strong> o<strong>per</strong>azioni da elementari<br />
da effettuare ha un limite inferiore proporzionale a n 2 (<strong>per</strong> una trattazione dei limiti inferiori si veda la<br />
sezione 10). La moltiplicazione classica tra matrici, che calcola <strong>di</strong>rettamente la formula definita sopra,<br />
può essere descritta dal seguente algoritmo, dove A e B sono due matrici n × n <strong>di</strong> cui si deve calcolare <strong>il</strong><br />
prodotto e C è la matrice risultato:<br />
void matrixMult ( int A [n] [n], int B [n] [n], int C [n][n]) {<br />
for ( int i =0; i