tempo e spazio di calcolo - di.unito.itdamiani/didattica/aa0405/algelab/mod1/docs/08... · f....
TRANSCRIPT
![Page 1: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/1.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Tempo e spazio di calcolo
Modelli di calcolo e metodologie di analisi
![Page 2: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/2.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
In quale modo stimiamo il tempo di calcolo?
• Approccio empirico (a posteriori)
• Approccio teorico (a priori)
Possiamo considerare due approcci:
SECONDO VOI QUALE STUDIEREMO IN QUESTO CORSO ?
SECONDO VOI QUALE E’ IL PIU’ UTILE IN PRATICA ?
![Page 3: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/3.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Sviluppiamo una metodologia per l’approccio teorico
Per sviluppare la metodologia per stimare il tempo e lo spazio di calcolo dobbiamo precisare:
1. Linguaggio per descrivere gli algoritmi2. Modello computazionale d’esecuzione3. Metrica per misurare il tempo di calcolo4. Modo per caratterizzare il tempo di calcolo
per gli algoritmi ricorsivi
![Page 4: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/4.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Pseudo-codice Java-like:
assegnazione: ←i ← j ← k equivale alla seq.: j ← k; i ← j
espressioni: simboli matematici standard per espressioninumeriche e booleane
commento:
dichiarazione di metodo: nome (param 1, param 2, ...)
chiamata di un metodo: nome (param 1, param 2, ...)
ritorno da un metodo: return valore
1. Linguaggio per descrivere gli algoritmi
![Page 5: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/5.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
• dati composti: • i-esimo elemento array A: A[i]• A[i . . j] ≡ <A[i], A[i+1], . . . , A[j]>, se i ≤ j
sequenza vuota, se i > j• i dati composti sono organizzati in oggetti, che
sono strutturati in attributi o campi: ad es. length[A] • una variabile che rappresenta un oggetto è un riferimento
• un riferimento che non si riferisce a nessun oggetto: nil
• parametri alle procedure passati per valore (per gli oggetti una
copia del riferimento)
Pseudo-codice Java-like (continua):
![Page 6: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/6.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
• struttura di blocco: spaziatura
• costrutti iterativi e condizionali :
if condizione then azioni (else azioni)
while condizione doazioni
do azioni while condizione
for variabile ← val-iniz. to val-fin. (incremento) doazioni
for variabile ← val-iniz. downto val-fin. (decremento) doazioni
Pseudo-codice Java-like (continua):
![Page 7: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/7.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
2. Il modello computazionale d’esecuzione
1. assegnazione di un valore ad una variabile2. chiamata di un metodo3. eseguire un’operazione aritmetica4. confronto di due numeri5. indicizzazione di un elemento in un array6. riferimento a un oggetto7. rientro da un metodo
Consideriamo come operazioni primitive le seguenti operazioni :
![Page 8: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/8.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
• Questo approccio dà origine al modello computazionale chiamato Random Access Machine (RAM):
• CPU connessa a un banco di celle di memoria• ogni cella memorizza una parola (un numero, un carattere, . . .
In generale: il valore di un tipo di base o un riferimento ad un oggetto)
• la CPU accede ad una cella di memoria arbitraria con unaoperazione primitiva (ogni operando e’ una cella di memoria)
Assunzione implicita: il numero di operazioni primitive è proporzionale al tempo di esecuzione dell’algoritmo
![Page 9: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/9.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
La quantità di tempo (e di spazio) consumato dall’esecuzione di un programma RAM su un dato input può essere determinato essenzialmente usando due criteri:
Criterio di costo uniforme:l’esecuzione di un’istruzione primitiva richiede un tempo indipendente dalla “grandezza” degli operandi (ricordate: un operando e’ o un valori di un tipo base o un riferimentoad un oggetto)
Criterio di costo logaritmico:il tempo di calcolo richiesto da un’istruzione primitiva dipende dal numero di bit necessari a rappresentare gli operandi
![Page 10: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/10.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Misureremo il tempo di calcolo contando le operazioni primitive
Massimo (A, n)current-max ← A[0]for i ← 1 to n-1 do
if current-max < A[i]then current-max ← A[i]
return current-max
21 + n
1
4*(n-1)…6 *(n-1)
Numero di operazioni primitive: t (n) = minimo 2 + 1 + n + 4*(n-1) + 1 = 5*nmassimo 2 + 1 + n + 6*(n-1) + 1 = 7*n - 2
3. Metrica per misurare il tempo di calcolo
Ad esempio:
![Page 11: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/11.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
istanze in input
tempo di calcolo
5 ms
3 ms
1 ms
A B C D E F G
tempo nel caso peggiore
tempo nel caso migliore
In generale, istanze diverse avranno tempi di calcolo diversi, ad esempio:
![Page 12: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/12.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Analisi del caso medioIl tempo di calcolo medio dell’algoritmo definito come media dei tempi per tutti i possibili input
Per poterlo calcolare si deve conoscere la distribuzione di probabilità sull’insieme dei possibili inputIn generale si tratta di un compito non banale. In mancanza di informazioni si puo’ assumere una distribuzione uniforme, ma si tratta di un’assunzione arbitraria!
![Page 13: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/13.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Analisi del caso peggiore• non richiede teoria probabilità• caso peggiore quasi sempre facile da identificare• se un algoritmo si “comporta bene” nel caso peggiore, si
“comporta bene” su ogni input (fornisce una garanzia!)
Analisi del caso ottimo• non richiede teoria probabilità• caso ottimo quasi sempre facile da identificare• se un algoritmo si comporta male nel caso ottimo, si
comporta male su ogni input
![Page 14: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/14.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Equazione di ricorrenza: una funzione che esprime il numero di operazioni sull’input di dimensione n in funzione delnumero di operazioni su input di dimensione inferiore.
Massimo-ricorsivo (A, n)if n = 1
then return A[0]return max (Massimo-ricorsivo (A, n-1), A[n-1])
T(n) = 3 se n = 1T(n-1) + k altrimenti
T(n) = k*(n-1) + 3
4. Modo per caratterizzare il tempo di calcolo degli algoritmi ricorsivi
Ad esempio: n > 1
![Page 15: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/15.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Moltiplicazione per “somme successive”
moltiplicazione (x1, x2)y ← x1prod ← 0while y > 0 do
prod ← prod + x2 y ← y - 1
return prod
45 1944 1943 19
4 19
1 19
855
. .. .. .
3 192 19
y x2
ESEMPIO: tempo di calcolo della moltiplicazione per somme successive
![Page 16: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/16.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Moltiplicazione “alla russa”
19
76
---
152---
608
855
45 1922 3811 765 1522 3041 608
y1 y2
prod ← 0while y1 > 0 do
if y1 is oddthen prod ← prod + y2
y1 ← y1 div 2y2 ← y2 + y2
return prod
molt-russa (x1, x2)y1 ← x1y2 ← x2
ESEMPIO: tempo di calcolo della moltiplicazione alla russa
![Page 17: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/17.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
prod ← 0while y1 > 0 do
if y1 is odd then prod ← prod + y2
y1 ← y1 div 2y2 ← y2 + y2
return prod
molt-russa (x1, x2)y1 ← x1y2 ← x2
moltiplicazione (x1, x2)y ← x1prod ← 0while y > 0 do
prod ← prod + x2 y ← y - 1
return prod
moltiplicazione molt-russa2 * x1 assegnazioni 3 * lg x1 assegnazioni
nel while x1 somme lg x1 divisionix1 decrementi 2 * lg x1 sommex1+1 confronti 2 * lg x1 + 1 confronti
5 * x1+1 + 3 operazioni 8 lg x1+1 + 4 operazioni
Moltiplicazione per somme successive vs moltiplicazione alla russa
![Page 18: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/18.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
4
34
39
44
49
54
29
24
19
14
9
31,5830,36
2927,46
25,6823,58
2117,68
13
5
0
10
20
30
40
50
60
0 1 2 3 4 5 6 7 8 9 10 11
moltiplicatore
num
ero
di o
pera
zion
i
f(m) = 5m + 4 g(m) = 8 lg m + 5
![Page 19: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/19.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Introduciamo un’ulteriore astrazione : tasso di crescita o ordine di grandezza
del tempo di calcolo
• ogni passo nello pseudo-codice (e ogni statement in un linguaggio ad alto livello) corrisponde a un piccolo numero di operazioni primitive che non dipendono dalla dimensione dell’input
• basta considerare il termine principale perchè i termini di ordine inferiore non sono significativi per n grande.
L’ordine di grandezza del tempo di calcolo fornisce una semplice caratterizzazione dell’efficienza e consente di confrontare algoritmi alternativi.
LA NOTAZIONE ASINTOTICA
![Page 20: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/20.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Notazione asintotica
Consideriamo funzioni dai naturali ai numeri reali non negativi
Efficienza asintotica degli algoritmi: come cresce il tempo diesecuzione con il crescere al limite della dimensione delle istanze in input
![Page 21: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/21.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Notazione O: O (g(n)) e’ l’insieme di tutte le funzioni f(n) percui esistono due costanti positive c ed n0 tali che
f(n) ≤ c • g(n) per tutti gli n ≥ n0
f(n) ∈ O (g(n))
n0
f(n)
c g(n)
n
tempo di run
![Page 22: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/22.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Notazione Ω: Ω(g(n)) e’ l’insieme di tutte le funzioni f(n) percui esistono due costanti positive c ed n0 tali che
f(n) ≥ c • g(n) per tutti gli n ≥ n0
f(n) ∈ Ω (g(n))
n0 n
f(n)
c g(n)tempo di run
![Page 23: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/23.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
f(n) ∈ Θ (g(n))
Notazione Θ: Θ(g(n)) e’ l’insieme di tutte le funzioni f(n) per cui esistono tre costanti positive c1, c2 ed n0 tali che
c1• g(n) ≤ f(n) ≤ c2 • g(n) per tutti gli n ≥ n0
c2 g(n)
n0
f(n)
n
c1 g(n)tempo di run
![Page 24: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/24.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Proprietà della notazione asintotica
Transitiva:f(n) = Θ (g(n)) e g(n) = Θ (h(n)) f(n) = Θ (h(n))f(n) = O (g(n)) e g(n) = O (h(n)) f(n) = O (h(n)) f(n) = Ω (g(n)) e g(n) = Ω (h(n)) f(n) = Ω (h(n))
Riflessiva: f(n) = Θ (f(n))f(n) = O (f(n))f(n) = Ω (f(n))
Simmetrica: f(n) = Θ (g(n)) g(n) = Θ (f(n))
Simmetrica trasposta: f(n) = O (g(n)) g(n) = Ω (f(n))
![Page 25: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/25.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
• d(n) = O(f(n))
a . d(n) = O(f(n)), per ogni costante a > 0
• d(n) = O(f(n)) & e(n) = O(g(n))
d(n) + e(n) = O(f(n) + g(n))
• d(n) = O(f(n)) & e(n) = O(g(n))
d(n) . e(n) = O(f(n) . g(n))
• f(n) funzione polinomiale di grado d:
f(n) = a0 + a1n + . . . + adnd f(n) = O(nd)
![Page 26: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/26.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
O(log n) logaritmica
O(n) lineare
O(n2) quadratica
O(nk) (k ≥ 1) polinomiale
O(an) (a > 1) esponenziale
Alcune classi di complessità
trattabili
non trattabili
![Page 27: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/27.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Alcune funzioni ordinate per velocità di crescita
n log n n n n log n n2 n2
2 1 1,41 2 2 4 8
4 2 2 4 8 16 64
8 3 2,83 8 24 64 512
16 4 4 16 64 256 4.096
32 5 5,66 32 160 1.024 32.768
64 6 8 64 384 4.096 262.144
128 7 11,31 128 896 16.384 2.097.152
256 8 16 256 2.048 65.536 16.777.216
512 9 22,63 512 4.608 262.144 134.217.728
1.024 10 32 1.024 10.240 1.048.576 1.073.741.824
2n
4
16
256
65.536
4.294.967.296
1,84 x 1019
3,40 x 1038
1,15 x 1077
1,34 x 10154
1,79 x 10308
n3
![Page 28: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/28.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
1
2
3
4
5
6
7
8
9
10
2
4,75
8
4
9
8
4
8
1,58
2,582,81
3,323,58
2,32
3,17
2
3
3,46
2,652,45
3,162,83
1,411,73
22,24
33,32 3,46
0
1
2
3
4
5
6
7
8
9
10
2 3 4 5 6 7 8 9 10 11 12
lognradnnn lognn^2n^32^n
![Page 29: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/29.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
0
10
20
30
40
50
60
2 3 4 5 6 7 8 9 10 11 12
lognradnnn lognn^2n^32^n
![Page 30: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/30.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
0
500
1000
1500
2000
2500
3000
3500
4000
4500
2 3 4 5 6 7 8 9 10 11 12
lognradnnn lognn^2n^32^n
![Page 31: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/31.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Problema: ordinamento di numeri.Input: una sequenza di n numeri <a1, a2,…,an>.Output: una permutazione <a1’, a2’,…,an’> della sequenza di
input tale che a1’≤ a2’ ≤ … ≤ an’.
ESEMPIO: tempo di calcolo dell’algoritmo di ordinamento per inserzione
![Page 32: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/32.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
3 5 1 8 2
key = 1
1 2 3 4 5
3 5 1 8 2
key = 5
1 2 3 4 5
1 3 5 8 2
key = 8
1 2 3 4 5
1 3 5 8 2
key = 2
1 2 3 4 5
3 5 5 8 2
1 3 5 8 2
1 3 5 8 8
1 2 3 5 8
1 3 5 5 8
3 3 5 8 2
1 3 3 5 8
![Page 33: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/33.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
num. volte1nn – 1
n – 1Σ tj ( j=2..n)Σ(tj – 1) ( j=2..n)Σ(tj – 1) ( j=2..n)n – 1n – 1
Insertion-sort (A) j ← 2
1 for j ← 2 to length[A] do2 key ← A[j]3 inserisci A[j] nella sequenza A[1. .j-1]
spostando a destra gli elementi > di A[j]
4 i ← j – 15 while i > 0 and A[i] > key do6 A[i+1] ← A[i]7 i ← i – 18 A[i+1] ← key
j ← j+1T(n) = 1 + a*n + b*(n-1) + c*Σ tj + d*Σ(tj – 1) =
= (a + b)*n + (1 – b) + c*Σ tj + d*Σ(tj – 1)
NON E’ UN INVARIANTE!
![Page 34: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/34.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Caso migliore: A è ordinato
T(n) è una funzione lineare di n.
T(n) è una funzione quadratica di n.
Caso peggiore: A è ordinato in ordine inverso
Caso medio (considerando ogni permutazione è ugualmente probabile)
T(n) è una funzione quadratica di n.
T(n) = 1 + a*n + b*(n – 1) + c*Σ tj + d*Σ(tj – 1) == (a + b) *n + (1 – b) + (c+d)* Σ tj – n + 1 == (a + b –1)*n + (2 – b) + (c+d)* Σ tj == e*n + f + g* Σ tj
![Page 35: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/35.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
ESEMPIO: il problema della valutazione di un polinomio
Input: una sequenza di n+1 numeri reali A = <a0, a1,…,an> e il valore della variabile xOutput: il valore del polinomio di grado n: P(x) = a0 + a1x+ … + anxn
Un algoritmo che risolve il problema:Poly-eval (A, x, n)1 y ← 12 result ← A[0]3 for i ← 1 to n do4 y ← y • x5 result ← result +A[i] • y y = xi6 return result
L’algoritmo esegue 2*n moltiplicazioni n somme e 2*n assegnazioni.Ma si può fare meglio
![Page 36: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/36.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
La regola di Horner:P(x) = a0 + x (a1+ … + x (an-1+ x an))…)
Un algoritmo basato sulla regola di Horner:Horner (A, x, n)1 result ← A[n]2 for i ← n - 1 downto 0 do3 result ← result • x + A[i]4 return result
L’algoritmo esegue n somme, n moltiplicazioni e n assegnazioni.
![Page 37: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/37.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Horner (A, x, n)1 result ← A[n]2 for i ← n - 1 downto 0 do3 result ← result • x + A[i]4 return result
Poly-eval (A, x, n)1 y ← 12 result ← A[0]3 for i ← 1 to n do4 y ← y • x5 result ← result +A[i] • y6 return result
Poly-eval: 9*n + 6Horner: 7*n + 5
Poly-eval Horner5 4
n + 1 n + 18*n 6*n
fuori dal forconfrontinel for
![Page 38: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/38.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
15
915825
735645
555465
375285
195
105
1005
712642
572502
432362
292222
15212
82
782
0
200
400
600
800
1000
1200
1 11 21 31 41 51 61 71 81 91 101 111
T(n) = 9 n + 6
T(n) = 7 n + 5
![Page 39: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/39.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
L’algoritmo Horner è sicuramente migliore dell’algoritmo Poly-eval
L’analisi asintotica non distingue però tra i due algoritmi:per entrambi si ottiene Θ(n)
![Page 40: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/40.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
RIEPILOGO
• Una metodologia per l’approccio teorico alla stima del tempo di calcolo
• Analisi dei casi medio, peggiore, ottimo• Efficienza asintotica degli algoritmi• Risposta ad alcune domande lasciate in
sospeso durante le lezioni precedenti. • ESERCIZIO: Rispondete alle seguenti
domande. Quali domande restano ancora in sospeso? Adesso abbiamo gli strumenti per rispondere a qualcuna di esse? Se si, quali sono le risposte?
![Page 41: Tempo e spazio di calcolo - di.unito.itdamiani/DIDATTICA/aa0405/AlgELab/MOD1/docs/08... · F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) La quantità di tempo](https://reader031.vdocuments.net/reader031/viewer/2022022801/5c6ee74c09d3f29e208bc261/html5/thumbnails/41.jpg)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
UN ALTRO ESERCIZIO
• La correttezza degli algoritmi considerati nei lucidi precedenti (o di loro minime varianti) e’ stata dimostrata (nelle lezioni precedenti) con il metodo delle asserzioni. ANNOTATE (SCRIVENDO SULLA STAMPA DEI LUCIDI) IL CODICE CON LE ASSERZIONI CHE NE DIMOSTRANO LA CORRETTEZZA. In questo modo vi sara’ piu’ facile seguire il ragionamento sulla loro complessita’!!!