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
• L’analisi della complessità di un algoritmo è basata sul concetto di
passo elementare
• Bisogna stabilire un modello di calcolo di riferimento su cui è
eseguito l’algoritmo
• 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
• Complessità spaziale misurata come numero
massimo di celle di memoria occupate durante
l’esecuzione
• Passi elementari:
– istruzione ingresso/uscita (lettura o stampa)
– operazione aritmetico/logica
– accesso/modifica del contenuto della memoria
• 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
Algoritmo fibonacci5
• Il tempo di esecuzione è O(n)
– O(n) linee di codice eseguite
– O(n) passi elementari eseguiti
4
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica
5
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
6
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
7
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)
8
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 
fn 
 0
gn 
fn   Ogn 

limn 
fn 
gn 
9
(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
10
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)
11
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 

limn 
fn 
 
gn 
fn   Wgn 

limn 
fn 
gn 
12
(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
13
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)
14
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) 
15
 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 
16


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 
17

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 
18
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 
19
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio:
Se T(n) = ad nd + ad-1 nd-1 + … + a0 è un polinomio di grado d (con
ad>0), allora T(n) = Q(nd)
Infatti:
T(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  T(n)
 c2 nd
20
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 = (nd)
an = W(nd)
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
21
P(n) = Q(nd)
P(n) = O(nd)
P(n) = W(nd)
[logb(n)]c = o(nd)
[logb(n)]c = O(nd)
 0, c, d  0
n! = o(nn)
n! = (an)
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Delimitazioni
inferiori e superiori
22
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(f(n)) su istanze di
dimensione n e rispetto ad una certa risorsa di calcolo, se la
quantità r di risorsa sufficiente per eseguire A su una qualunque
istanza di dimensione n verifica la relazione r(n)=O(f(n))
Definizione
Un problema P ha una complessità O(f(n)) rispetto ad una
risorsa di calcolo se esiste un algoritmo che risolve P il cui
costo di esecuzione rispetto quella risorsa è O(f(n))
23
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(f(n)) su istanze di
dimensione n e rispetto ad una certa risorsa di calcolo, se la
massima quantità r di risorsa necessaria per eseguire A su
istanze di dimensione n verifica la relazione r(n)= W(f(n))
Definizione
Un problema P ha una complessità W(f(n)) rispetto ad una
risorsa di calcolo se ogni algoritmo che risolve P ha
costo di esecuzione W(f(n)) rispetto quella risorsa
24
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(f(n)) rispetto ad
una risorsa di calcolo, un algoritmo che risolve P è ottimo
se ha costo di esecuzione O(f(n)) rispetto quella risorsa
25
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Metodi di analisi
26
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 n delle istanze
• Istanze diverse, a parità di dimensione,
potrebbero però richiedere risorse diverse
• Distinguiamo quindi ulteriormente tra analisi
nel caso peggiore, migliore e medio
27
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
28
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
29
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
30
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio 1
Ricerca di un elemento x in una lista L non
ordinata
Tbest(n) = 1
Tworst(n) = n
Tavg(n) = (n+1)/2
31
x è in prima posizione
xL oppure è in ultima posizione
assumendo che x  L e che si trovi
con la stessa probabilità in una
qualsiasi posizione
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio 2 (1/2)
Ricerca di un elemento x in un array L ordinato
L[m] > x
Confronta x con l’elemento centrale di L e
prosegue nella metà sinistra o destra in base
all’esito del confronto
32
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio 2 (2/2)
Tbest(n) = 1
l’elemento centrale è uguale a x
Tworst(n) = log n
xL oppure viene trovato
all’ultimo confronto
Poiché la dimensione del sotto-array su cui
si procede si dimezza dopo ogni confronto,
dopo l’i-esimo confronto il sottoarray di
interesse ha dimensione n/2i
Risulta n/2i = 1 per i=log2n
Tavg(n) = log n -1+1/n assumendo che le istanze siano
equidistribuite
33
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analisi di algoritmi ricorsivi
34
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio
L’algoritmo di ricerca binaria può essere riscritto
ricorsivamente come:
Come analizzarlo?
35
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Equazioni di ricorrenza
Il tempo di esecuzione può essere descritto tramite
una equazione di ricorrenza:
T(n) =
c + T(n/2)
1
se n>1
se n=1
Vari metodi per risolvere equazioni di ricorrenza:
iterazione, sostituzione, teorema Master...
36
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Metodo dell’iterazione
Idea: “srotolare” la ricorsione, ottenendo una
sommatoria dipendente solo dalla dimensione
n del problema iniziale
Esempio: T(n) = c + T(n/2)
T(n/2) = c + T(n/4)
...
T(n) = c + T(n/2) = 2c + T(n/4) =
= ( ∑j=1...i c) + T(n/2i) = i c + T(n/2i)
Per i=log2n: T(n) = c log n + T(1) = O(log n)
37
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esercizi
Risolvere usando il metodo dell’iterazione le
seguenti equazioni di ricorrenza:
• T(n)= n + T(n-1), T(1)=1;
• T(n)= 9 T(n/3) + n
(soluzione sul libro di testo: Esempio 2.4)
38
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Teorema Master
Permette di analizzare algoritmi basati sulla tecnica del
divide et impera:
- dividi il problema (di dimensione n) in a sottoproblemi
di dimensione n/b
- risolvi i sottoproblemi ricorsivamente
- ricombina le soluzioni
Sia f(n) il tempo per dividere e ricombinare istanze di
dimensione n. La relazione di ricorrenza è data da:
T(n) =
39
a T(n/b) + f(n) se n>1
1
se n=1
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmo fibonacci6
a=1, b=2, f(n)=O(1)
40
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Teorema Master
n
logba
vs f(n)
quale va più velocemente a infinito?
Stesso ordine asintotico  T(n) = Q(f(n) log n)
Se una delle due è “polinomialmente” più veloce
 T(n) ha l’ordine asintotico della più veloce
41
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Teorema Master
La relazione di ricorrenza:
T(n) =
a T(n/b) + f(n) se n>1
1
se n=1
ha soluzione:
1. T(n) = Q(n logba ) se f(n)=O(n logba- e ) per e>0
2. T(n) = Q(n logba log n) se f(n) = Q(n logba )
3. T(n) = Q(f(n)) se f(n)=W(n logba+ e) per e>0 e
a f(n/b)≤ c f(n) per c<1 e n sufficientemente grande
42
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi
1) T(n) = n + 2T(n/2)
a=2, b=2, f(n)=n=Q(n log22 )
(caso 2 del teorema master)
T(n)=Q(n log n)
2) T(n) = c + 3T(n/9)
a=3, b=9, f(n)=c=(n log93 - e )
(caso 1 del teorema master)
T(n)=Q(√n)
3) T(n) = n + 3T(n/9)
a=3, b=9, f(n)=n=W(n log93 + e)
3(n/9)≤ c n per c=1/3
(caso 3 del teorema master)
43
T(n)=Q(n)
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi
4) T(n) = n log n + 2T(n/2)
a=2, b=2, f(n) =W(n log22 )
ma f(n)W(n log22+e), e > 0
non si può applicare
il teorema Master!
44
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Cambiamento di variabile
Esempio: T(n) = T(n) + O(1),
T(1) = 1
T(n) = T(n1/2) + O(1)
n=2x

x =log2 n
T(2x) = T(2x/2) + O(1)
R(x):=T(2x)
R(x) = R(x/2) + O(1)
R(x) = O(log x)
T(n) = O(log log n)
45
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Un’altra tecnica utile:
Analisi dell’albero della ricorsione
Idea:
– disegnare l’albero delle chiamate ricorsive
indicando la dimensione di ogni nodo
– studiare il tempo speso per tutte le chiamate di un
dato livello dell’albero
– studiare il numero di livelli dell’albero
Esempio: T(n) = T(n/3) + T(2n/3) + n,
T(1) = 1
46
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esercizio
Progettare una versione ricorsiva dell’algoritmo di ricerca
sequenziale, si fornisca l’equazione di ricorrenza che descrive la
sua complessità temporale e la si risolva con una delle tecniche
studiate.
47
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
RicercaSeq (A, x)
1.
Soluzione
return RicercaSeqRic(A,x,1)
RicercaSeqRic(A, x, i)
1.
if i > n then return non trovato
2.
if A[i] = x then return trovato
else return RicercaSeqRic(A,x,i+1)
Complessità temporale dell’algoritmo:
T(n) = c + T(n-1);
T(1) = O(1)
usando il metodo dell’iterazione
T(n) = c + T(n-1) = 2c + T(n -2)= 3c + T(n -3)= …
= c(n -1) + T(1) = c(n -1) + O(1)= O(n)
48
Copyright © 2004 - The McGraw - Hill Companies, srl