Transcript Clicca qui.
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
• Per valutare la complessità di un algoritmo, bisogna
prima di tutto stabilire un modello di calcolo di
riferimento su cui esso viene eseguito; noi useremo il
classico modello RAM (random access machine)
• La RAM è un tipo particolare di macchina a registri in
grado di eseguire un programma finito di istruzioni di
input/output, operazioni aritmetiche, accesso e modifica
del contenuto della propria memoria ad accesso diretto,
la quale è strutturata come un array di dimensione infinita
in cui ogni cella può contenere un qualunque valore
intero/reale;
• 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
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
4
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)
5
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.
6
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica
7
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
8
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
9
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)
n 1=n0 f(n) c nd
10
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=1.
• f(n) = O(n3)
(c=1, n0=3)
• f(n) = O(2n)
(c=4, n0=3)
• Invece, f(n) O(n)
11
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Legame con il concetto di limite
li mn
fn
gn
fn Ogn
fn O gn
12
fn Ogn
li mn
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
13
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)
14
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)
15
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
li mn
li mn
fn Wgn
16
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
17
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
18
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
19
Ogn
li mn
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
20
Wgn
li mn
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
asintoticamente
0
fn
c2
gn
asintoticamente
fn
0 c1
gn
fn ogn
fn gn
21
0 c1
asintoticamente
li mn
fn
0
gn
li mn
fn
gn
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analogie
22
O
W
Q
o
>
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Graficamente
23
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
24
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) d>0
an = W(nd) d>0
Logaritmi
f(n) = logbn b>1
li mn
logbn c
n
d
0, c, d 1
(logbn)c = o(nd) c,d>0
(logbn)c = O(nd) c,d>0
Fattoriali
f(n) = n! = n*(n-1)*……*2*1
25
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
26
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
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
• Definizione analoga può essere data per lo
spazio
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
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)
31
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.
32
Copyright © 2004 - The McGraw - Hill Companies, srl