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)*
* Θ(log n) per le variabili di lavoro e Θ(log n) per le chiamate ricorsive
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Modello di calcolo
• Contare il numero di linee dello pseudocodice di un
algoritmo non è sufficiente a comprenderne la complessità
temporale: quali operazioni reali si celano dietro lo
pseudocodice???
• Per valutare la complessità di un algoritmo, bisogna quindi
prima di tutto stabilire un modello di calcolo di riferimento
su cui esso viene eseguito
• Un modello di calcolo è una macchina astratta che
definisce l’insieme delle operazioni ammissibili ed
eseguibili durante una computazione, e ne specifica i
relativi costi (in termini di tempo e spazio utilizzato)
• Alcuni modelli di calcolo famosi: Macchina di Turing,
Automi a Stati Finiti, Funzioni Ricorsive, Macchina a
Registri, etc… (sono tutti modelli di calcolo equivalenti,
cioè in grado di calcolare le stesse funzioni)
3
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Il nostro modello di calcolo: la RAM
• La RAM (Random Access Machine) è un tipo particolare di
macchina a registri (locazioni di memoria ad accesso diretto)
• La RAM è definita da:
– un nastro di ingresso e uno di uscita, ove saranno scritti l’input e
l’output, rispettivamente
– una memoria ad accesso diretto strutturata come un array (di
dimensione infinita) in cui ogni cella può contenere un valore
intero arbitrariamente grande
– un programma finito di istruzioni di input/output, operazioni
aritmetiche, e di accesso e modifica del contenuto della propria
memoria
– un registro detto accumulatore (contiene gli operandi
dell’istruzione corrente)
– un registro detto contatore delle istruzioni (contiene l’indirizzo
dell’istruzione successiva)
• La RAM è un’astrazione dell’architettura di von Neumann
4
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
La RAM
5
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Criterio di costo uniforme
• Nel modello RAM a costi uniformi, ogni istruzione
elementare eseguita dalla RAM ha un costo unitario
• Complessità temporale tempo(I) misurata come
numero di istruzioni elementari eseguite
sull’istanza di input I
– istruzione ingresso/uscita (lettura o stampa)
– operazione aritmetico/logica
– accesso/modifica del contenuto della memoria
• Complessità spaziale spazio(I) misurata come
numero massimo di celle di memoria della RAM
occupate durante l’esecuzione sull’istanza di input I
6
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 I 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, come nel problema di Fibonacci)
– Parametrizzazione della dimensione dell’input (ad esempio,
numero di elementi di una sequenza da ordinare)
• In tutti i problemi che incontreremo in futuro, la
dimensione dell’input sarà parametrizzata attraverso il
numero n di elementi dell’istanza
7
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.
8
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica
9
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
10
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
11
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)
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 = f(n)
f(n) c nd n 0, e quindi posso scegliere n0=0
12
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).
Scegliendo c = a2 + |a1| + |a0| = 2+3+0=5
avremo che 2n2 + 3n ≤ 5n2 per ogni n ≥ n0=0.
• f(n) = O(n3)
(c=1, n0=3, oppure c=2, n0=2)
• f(n) = O(2n)
(c=1, n0=7, oppure c=2, n0=6)
• Invece, f(n) O(n)
13
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Legame con il concetto di limite
limn
fn
gn
fn Ogn
fn O gn
14
fn Ogn
limn
limn
fn
gn
fn
(se esiste)
gn
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
15
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 = f(n)
n n0 c nd f(n)
16
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-5/3=1/3
avremo che 2n2 - 5n ≥ (1/3) n2 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)
17
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Legame con il concetto di limite
fn
0
gn
fn Wgn
fn Wgn
limn
limn
fn Wgn
18
limn
fn
0
gn
fn
(se esiste) 0
gn
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
19
n
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Relazioni tra O, Ω e Θ
fn Qg(n)
fn Ogn
fn Og(n)
fn Θgn
fn Qg(n)
fn Wgn
fn Wg(n)
fn Θgn
fn Qg(n) fn Wgn e fn Ogn
20
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:
ogn
fn ogn
21
Ogn
limn
fn
0
gn
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:
gn
fn gn
22
Wgn
limn
fn
gn
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Riassumendo …
fn Θgn
fn Ogn
fn Wgn
fn
c2
gn
asintotica mente
0
fn
c2
gn
asintotica mente
fn
0 c1
gn
fn ogn
fn gn
23
0 c1
asintotica mente
limn
fn
0
gn
limn
fn
gn
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analogie
24
O
W
Q
o
>
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Graficamente
25
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà della notazione asintotica
Transitività
fn Qgn
e
gn Qhn
fn Qhn
fn Ogn
e
gn Ohn
fn Ohn
fn Wgn
e
gn Whn
fn Whn
fn ogn
e
gn ohn
fn ohn
fn gn
e
gn hn
fn hn
Riflessività
fn Qfn
fn Οfn
fn Wfn
Simmetria
fn Qgn
Simmetria trasposta
gn Qfn
fn Ogn
gn Wfn
fn ogn
gn fn
26
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
P(n)
P(n)
P(n)
P(n)
= O(nd), P(n) = W(nd) P(n) = Q(nd)
= O(nk) k≥d, P(n) ≠ O(nk) k<d
= W(nk) k≤d, P(n) ≠ W(nk) k>d
= o(nk) k>d, P(n) = (nk) k<d
Esponenziali
an
f(n) = an
limn d
a >1
n
an = (nd) d>0
an = W(nd) d>0
Logaritmi
f(n) = logbn b>1
limn
logbn
c
nd
0, c, d 1
Fattoriali
f(n) = n! = n·(n-1)·(n-2)·……·2·1
27
(logbn)c = o(nd) c,d ≥ 1
(logbn)c = O(nd) c,d ≥ 1
n! = o(nn) n! = O(nn)
n! = (an) n! = W(an) a>0
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Metodi di analisi
28
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
29
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
30
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
• Definizione analoga può essere data per lo
spazio
31
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
• Definizione analoga può essere data per lo
spazio
32
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)
33
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 distinte, e si
supponga di dover verificare se una certa
carta xU 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.
34
Copyright © 2004 - The McGraw - Hill Companies, srl