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
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
• 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
2
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Criterio di costo uniforme
• Complessità temporale misurata come numero di
passi elementari eseguiti
• Passi elementari sulla RAM:
– 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
• Complessità temporale e spaziale espresse in
notazione asintotica
3
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica
4
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica
• f(n) = tempo di esecuzione / occupazione di
memoria di un algoritmo su input di dimensione n
• La notazione asintotica è un’astrazione utile per
descrivere l’ordine di grandezza di f(n) ignorando i
dettagli non influenti, come costanti moltiplicative
e termini di ordine inferiore
5
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
6
n
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi:
Sia f(n) = 2n2 + 3n, allora
• f(n)=O(n3)
(c=1, n0=3)
• f(n)=O(n2)
(c=3, n0=3)
• f(n)  O(n)
7
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notare:
limn 
fn 
 0
gn 
fn   Ogn 

fn   Ogn   limn 
8
fn   Ogn 

limn 
fn 
gn 
fn 
 0
gn 
(se esiste)  
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
9
n
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi:
Sia f(n) = 2n2 – 3n, allora
• f(n)= W(n)
(c=1, n0=2)
• f(n)=W(n2)
(c=1, n0=3)
• f(n)  W(n3)
10
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notare:
limn 
fn 
 
gn 
fn   Wgn 
fn   Wgn 
11

fn   Wgn 


limn 
limn 
fn 
gn 
fn 
 
gn 
(se esiste)
 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
12
n
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi:
Sia f(n) = 2n2 – 3n, allora
• f(n)= Q(n2)
(c1=1, c2=2, n0=3)
• f(n) Q(n)
• f(n)  Q(n3)
13
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notare che:
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) 
14
 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 
15


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):
(g(n)) = {f(n) :  c > 0,  n0 tale che
 n  n0 0  c g(n)  f(n) }
Notare:
gn 
fn   gn 
16
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 
0  c1 
 c2  
gn 
fn   Ogn 

0
fn   Wgn 

0  c1 
asintotica mente
fn 
 c2  
gn 
asintotica mente
fn 
gn 

asintotica mente
fn   ogn 

limn 
fn 
0
gn 
fn   gn 

limn 
fn 

gn 
17
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio:
Se f(n) = ad nd + ad-1 nd-1 + … + a0 è un polinomio di grado d (con ad>0),
allora f(n) = Q(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:
c1 = ad - |ad-1| n0-1 - … - |a0 | n0-d
c2 = ad + |ad-1| + … + |a0|
 n  n0
c1 nd  f(n)
 c2 nd
18
Copyright © 2004 - The McGraw - Hill Companies, srl
Polinomi ……
Algoritmi e strutture dati
nd
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
P(n) = ad
+ ad-1
ad > 0
Esponenziali ……
nd-1
+ … + a0
f(n) = an
a >1
an
limn  d  
n
Logaritmi ……
f(n) = logb(n) b>1
limn 
Fattoriali ……
logb n c
nd
f(n) = n! = n*(n-1)*……*2*1
19
P(n) = Q(nd)
P(n) = O(nd)
P(n) = W(nd)
an = (nd)
an = W(nd)
logb(n) = o(nd)
logb(n) = O(nd)
 0, c, d  1
n! = o(nn)
n! = (an)
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 
fn   Ogn 
fn   Wgn 
e
e
e
gn   Qhn 
gn   Ohn 
gn   Whn 



fn   Qhn 
fn   O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 
20
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Metodi di analisi
21
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Caso peggiore, migliore e medio
• Misureremo le risorse di calcolo usate da un
algoritmo ( tempo di esecuzione /
occupazione di memoria ) in funzione della
dimensione delle istanze
• Istanze diverse, a parità di dimensione,
potrebbero però richiedere risorse diverse
• Distinguiamo quindi ulteriormente tra analisi
nel caso peggiore, migliore e medio
22
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
23
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
24
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
25
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Delimitazioni
inferiori e superiori
26
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Delimitazioni superiori (upper bound)
Definizione
Un algoritmo A ha costo di esecuzione O(g(n)) su istanze di
dimensione n e rispetto ad una certa risorsa di calcolo, se la
quantità f(n) di risorsa sufficiente per eseguire A nel caso
peggiore (e quindi sufficiente per una qualunque istanza di
dimensione n) verifica la relazione
f(n)=O(g(n))
Definizione
Un problema P ha una complessità O(g(n)) rispetto ad una
certa risorsa di calcolo se esiste un algoritmo che risolve P
il cui costo di esecuzione rispetto a quella risorsa è O(g(n))
27
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, 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
f(n)= W(g(n))
Definizione
Un problema P ha una complessità W(g(n)) rispetto ad una
certa risorsa di calcolo se ogni algoritmo che risolve P ha
costo di esecuzione W(g(n)) rispetto a quella risorsa
28
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à W(g(n)) rispetto ad
una certa risorsa di calcolo, un algoritmo che risolve P è
ottimo se ha costo di esecuzione O(g(n)) rispetto a quella
risorsa
29
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
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 in U
appartenga o meno al mazzo. Qual è il costo
di tale verifica (in termine di numero di
confronti) nel caso migliore, peggiore e
medio?
30
Copyright © 2004 - The McGraw - Hill Companies, srl