Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmi e Strutture Dati
Capitolo 2
Modelli di calcolo e
metodologie di analisi
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Riepilogo algoritmi Fibonacci*
Numero di linee di
codice
Occupazione di
memoria
fibonacci1
Θ(1)
Θ(1)
fibonacci2
Θ(n)
Θ(n)
fibonacci3
Θ(n)
Θ(n)
fibonacci4
Θ(n)
Θ(1)
fibonacci5
Θ(n)
Θ(1)
fibonacci6
Θ(log n)
Θ(log n)
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Modello di calcolo
• Per valutare la complessità di un algoritmo, bisogna
prima di tutto stabilire un modello di calcolo di
riferimento su cui esso viene eseguito
• Macchina a registri (RAM: random access machine)
– un programma finito
– un nastro di ingresso e uno di uscita
– una memoria strutturata come un array (di dimensione infinita)
• ogni cella può contenere un qualunque valore intero/reale
– un registro detto accumulatore (contiene operandi istruzione
corrente)
– un registro detto contatore delle istruzioni (contiene indirizzo
istruzione successiva)
• la RAM è un’astrazione dell’architettura di von Neumann
3
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Macchina a registri
4
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Criterio di costo uniforme
• Nel modello a costi uniformi, ogni
istruzione ha un costo unitario
• Complessità temporale misurata come
numero di istruzioni eseguite
– istruzione ingresso/uscita (lettura o stampa)
– operazione aritmetico/logica
– accesso/modifica del contenuto della memoria
• Complessità spaziale misurata come
numero massimo di celle di memoria della
RAM occupate durante l’esecuzione
5
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Dimensione dell’input
• Misureremo le risorse di calcolo usate da un algoritmo
(tempo di esecuzione / occupazione di memoria ) in
funzione della dimensione dell’istanza in input
• Esistono due modalità di caratterizzazione della
dimensione dell’input:
– Quantità di memoria effettiva utilizzata per codificare l’input
(ad esempio, numero di bit necessari per rappresentare un
valore in input)
– Parametro caratterizzante la dimensione dell’input (ad esempio,
numero di elementi di una sequenza da ordinare)
6
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Domanda di approfondimento
• Qual è la complessità temporale degli algoritmi Fibonacci6,
Fibonacci4 e Fibonacci2 in funzione della
rappresentazione dell’input?
• Abbiamo appena affermato che la complessità temporale viene
misurata in funzione della dimensione dell’input; nel caso dei tre
algoritmi in questione, l’input è un numero n, che può essere
rappresentato usando k=log n bit. Quindi:
– Fibonacci6 costa T(n)=Θ(log n)=Θ(k), ed è quindi polinomiale (più
precisamente, lineare) nella dimensione dell’input;
– Fibonacci4 costa T(n)=Θ(n)=Θ(2k), ed è quindi esponenziale nella
dimensione dell’input;
k
– Fibonacci2 costa T(n)=Θ(n)=Θ(2 ), ed è quindi superesponenziale
nella dimensione dell’input.
7
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica
8
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica e operazioni dominanti
• Complessità temporale e spaziale saranno espresse in
notazione asintotica rispetto alla dimensione dell’input
• La notazione asintotica è un’astrazione utile per descrivere
l’ordine di grandezza di una funzione ignorando i dettagli
non influenti, come costanti moltiplicative e termini di
ordine inferiore
• Ai fini dell’analisi asintotica, sarà sufficiente considerare
le cosiddette operazioni dominanti, ovvero quelle che nel
caso peggiore vengono eseguite più spesso
• Queste si trovano annidate nei cicli più interni dello
pseudocodice che descrive l’algoritmo
9
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica O
f(n) = O(g(n)) se  due costanti c>0 e n0≥0 tali
che f(n) ≤ c g(n) per ogni n ≥ n0
f(n) = ( g(n) )
cg(n)
f(n)
n0
10
n
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Un caso notevole: i polinomi
Sia f(n) = ad nd + ad-1 nd-1 + … + a0 un polinomio di grado
d (con ad>0); dimostriamo che f(n)=O(nd)
Infatti: f(n)/nd = ad + ad-1 n-1 + … + a0 n-d

 n0: n  n0
ad - |ad-1|n-1 - … - |a0| n-d > 0
Se scegliamo c = ad + |ad-1| + … + |a0| 
c nd = ad nd + |ad-1| nd+…+ |a0| nd  ad nd + |ad-1| nd-1+…+
|a0|  ad nd + ad-1 nd-1 + … + a0
  n  n0 f(n)  c nd
11
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi
• Sia f(n) = 2n2 + 3n; vogliamo dimostrare che f(n)=O(n2).
f(n)/n2 = (2n2 + 3n)/n2 = 2 + 3/n
ma 2 + 3/n > 0 per n ≥ 1 (quindi n0=1);
Scegliendo c = a2 + |a1| + |a0| = 2+3=5
avremo che 2n2 + 3n ≤ 5n2 per n ≥ n0=1.
• f(n) = O(n3)
(c=1, n0=3)
• f(n) = O(2n)
(c=4, n0=3)
• Invece, f(n)  O(n)
12
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Legame con il concetto di limite
fn 
0
gn 

fn   O gn 
fn   O gn 

limn
limn
fn   O gn 
13

limn
fn 
0
gn 
fn 
(se esiste)
gn 

Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica W
f(n) = W(g(n)) se  due costanti c>0 e n0≥0 tali
che f(n) ≥ c g(n) per ogni n ≥ n0
f(n) = W(g(n))
f(n)
c g(n)
n0
14
n
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Un caso notevole: i polinomi
Sia f(n) = ad nd + ad-1 nd-1 + … + a0 un polinomio di grado d (con
ad>0); dimostriamo che f(n)=Ω(nd)
Infatti: f(n)/nd = ad + ad-1 n-1 + … + a0 n-d

 n0: n  n0
ad - |ad-1|n-1 - … - |a0| n-d > 0
Se scegliamo c = ad - |ad-1| n0-1 - … - |a0 | n0-d 
c nd = ad nd -|ad-1| nd n0-1 -…- |a0| nd n0-d
e poiché per n  n0 si ha nd n0-k  nd-k
c nd  ad nd - |ad-1| nd-1-…- |a0|  ad nd + ad-1 nd-1 + … + a0
  n  n0 c nd  f(n)
15
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi
• Sia f(n) = 2n2 - 5n; vogliamo dimostrare che f(n)= W(n2).
f(n)/n2 = (2n2 - 5n)/n2 = 2 - 5/n
ma 2 - 5/n > 0 per n ≥ 3 (quindi n0=3);
Scegliendo c = a2 - |a1|/n0 - |a0|/n02 = 2-3/3=1
avremo che 2n2 - 3n ≥ 1n2 per n ≥ n0=3.
• f(n) = W(n)
(c=1, n0=2)
• f(n) = W(log n)
(c=1, n0=2)
• Invece, f(n)  W(n3)
16
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Legame con il concetto di limite
fn 

gn 

fn   Wgn 

limn
fn   Wgn 
17

fn   Wgn 
limn
limn
fn 

gn 
fn 
(se esiste)
gn 
0
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica Q
f(n) = Q(g(n)) se  tre costanti c1,c2>0 e n0≥0 tali
che c1 g(n) ≤ f(n) ≤ c2 g(n) per ogni n ≥ n0
f(n) = Q(g(n))
c2 g(n)
f(n)
c1 g(n)
n0
18
n
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Relazioni tra O, Ω e Θ
fn   Qg(n) 

fn   Ogn 
fn   Og(n) 

fn   Θgn 
fn   Qg(n) 

fn   Wgn 
fn   Wg(n) 

fn   Qgn 
fn   Qg(n) 
19
 fn   Ωgn  e fn   Ogn 
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione o
Data una funzione g(n): N  R, si denota con o(g(n)) l’insieme delle
funzioni f(n): N R:
o(g(n)) = {f(n) :  c > 0,  n0 tale che
 n  n0 0  f(n)  c g(n) }
Notare:
ogn 
fn   ogn 
20
Ogn

limn
fn 
0
gn 
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione ω
Data una funzione g(n): N  R, si denota con ω(g(n)) l’insieme delle
funzioni f(n): N R:
ω(g(n)) = {f(n) :  c > 0,  n0 tale che
 n  n0 0  c g(n)  f(n) }
Notare:
 gn 
fn    gn 
21
Wgn 

limn
fn 

gn 
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Riassumendo …
fn   Θgn 
fn   Ogn 
fn   Wgn 



fn 
 c2  
gn 
asintotica mente
0
fn 
 c2  
gn 
asintotica mente
fn 
0  c1 
gn 
fn   ogn 
fn   gn 
22
0  c1 



asintotica mente
limn 
fn 
0
gn 
limn 
fn 

gn 
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analogie
23
O
W
Q
o





>
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Graficamente
24
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà della notazione asintotica
Transitività
fn   Qgn 
e
gn   Qhn 

fn   Qhn 
fn   Ogn 
e
gn   Ohn 

fn   Ohn 
fn   Wgn 
e
gn   Whn 

fn   W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 
Riflessività
fn   Qfn 
fn   Οfn 
fn   Wfn 
Simmetria
fn   Qgn 

Simmetria trasposta
gn   Qfn 
fn   Ogn 

gn   Wfn 
fn   ogn 

gn   fn 
25
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Polinomi
P(n) = ad nd + ad-1 nd-1 + … + a0
ad > 0
Relazioni asintotiche notevoli
Esponenziali
an
f(n) = an
limn d  
a >1
n
P(n) = O(nd), P(n) = W(nd)  P(n) = Q(nd)
P(n) = O(nk),  k≥d, P(n) ≠ O(nk),  k<d
P(n) = W(nk),  k≤d, P(n) ≠ W(nk),  k>d
an = (nd)
an = W(nd)
Logaritmi
f(n) = logb(n) b>1
limn
logb n c
nd
 0, c, d  1
logb(n) = o(nd)
logb(n) = O(nd)
Fattoriali
f(n) = n! = n*(n-1)*……*2*1
26
n! = o(nn)
n! = (an)
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Metodi di analisi
27
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Caso peggiore, migliore e medio
• Come detto, misureremo le risorse di calcolo usate
da un algoritmo in funzione della dimensione delle
istanze
• Ma istanze diverse, a parità di dimensione,
potrebbero richiedere risorse diverse! Ad esempio,
se devo cercare un elemento x in un insieme di n
elementi in input, il numero di confronti che farò
dipenderà dalla posizione che x occupa nella
sequenza.
• Distinguiamo quindi ulteriormente tra analisi nel
caso peggiore, migliore e medio
28
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Caso peggiore
• Sia tempo(I) il tempo di esecuzione di un
algoritmo sull’istanza I
Tworst(n) = max istanze I di dimensione n {tempo(I)}
• Intuitivamente, Tworst(n) è il tempo di esecuzione
sulle istanze di ingresso che comportano più
lavoro per l’algoritmo
• Definizione analoga può essere data per lo
spazio
29
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Caso migliore
• Sia tempo(I) il tempo di esecuzione di un
algoritmo sull’istanza I
Tbest(n) = min istanze I di dimensione n {tempo(I)}
• Intuitivamente, Tbest(n) è il tempo di
esecuzione sulle istanze di ingresso che
comportano meno lavoro per l’algoritmo
30
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Caso medio
• Sia P(I) la probabilità di occorrenza dell’istanza I
Tavg(n) = ∑ istanze I di dimensione n {P(I) tempo(I) }
• Intuitivamente, Tavg(n) è il tempo di
esecuzione nel caso medio, ovvero sulle
istanze di ingresso “tipiche” per il problema
• Richiede di conoscere una distribuzione di
probabilità sulle istanze
31
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Complessità temporale e spaziale di un
algoritmo
• Denoteremo con T(n) il tempo di esecuzione
dell’algoritmo su una generica istanza di ingresso
di dimensione n. Varrà quindi:
T(n) ≤ Tworst(n)
T(n) ≥ Tbest(n)
• Analogamente, per l’occupazione di memoria:
S(n) ≤ Sworst(n)
S(n) ≥ Sbest(n)
32
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Delimitazioni
inferiori e superiori
33
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Delimitazioni superiori (upper bound)
Definizione (complessità di un algoritmo)
Un algoritmo A ha costo di esecuzione O(g(n)) su istanze di
dimensione n e rispetto ad una certa risorsa di calcolo (spazio
o tempo), se la quantità f(n) di risorsa sufficiente per eseguire
A su qualunque istanza di dimensione n (e quindi in particolare
anche nel caso peggiore) verifica la relazione
f(n)=O(g(n)).
Definizione
Un problema P ha una delimitazione superiore alla
complessità O(g(n)) rispetto ad una certa risorsa di calcolo
(spazio o tempo) se esiste un algoritmo che risolve P il cui
costo di esecuzione rispetto a quella risorsa è O(g(n)).
34
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Delimitazioni inferiori (lower bound)
Definizione
Un algoritmo A ha costo di esecuzione W(g(n)) su istanze di
dimensione n e rispetto ad una certa risorsa di calcolo (spazio o tempo),
se la quantità f(n) di risorsa necessaria per eseguire A nel caso peggiore
(e quindi non è detto che debba essere necessaria per ogni istanza di
dimensione n: istanze facili potrebbero richiedere meno risorse!)
verifica la relazione
fworst(n)= W(g(n)).
Definizione (complessità intrinseca di un problema)
Un problema P ha una delimitazione inferiore alla complessità
W(g(n)) rispetto ad una certa risorsa di calcolo (spazio o tempo) se
ogni algoritmo che risolve P ha costo di esecuzione W(g(n)) rispetto a
quella risorsa.
35
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Ottimalità di un algoritmo
Definizione
Dato un problema P con complessità intrinseca W(g(n))
rispetto ad una certa risorsa di calcolo (spazio o tempo), un
algoritmo che risolve P è ottimo se ha costo di esecuzione
O(g(n)) rispetto a quella risorsa.
36
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esercizio di approfondimento
Sia dato un mazzo di n carte scelte in un
universo U di 2n carte, e si supponga di
dover verificare se una certa carta xU
appartenga o meno al mazzo. Progettare un
algoritmo per risolvere tale problema, e
analizzarne il costo (in termine di numero di
confronti) nel caso migliore, peggiore e
medio.
37
Copyright © 2004 - The McGraw - Hill Companies, srl