Upload
anonciada-capasso
View
243
Download
3
Embed Size (px)
Citation preview
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Algoritmi e Strutture Dati
Capitolo 2Modelli di calcolo e
metodologie di analisi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl
Riepilogo algoritmi Fibonacci
fibonacci6
fibonacci5
fibonacci4
fibonacci3
fibonacci2
Θ(log n)
Θ(n)
Θ(n)
Θ(n)
Θ(n)
Θ(log n)*
Θ(1)
Θ(1)
Θ(n)
Numero di linee di codice
Occupazione di memoria
fibonacci1 Θ(1)Θ(1)
Θ(n)
* Θ(log n) per le variabili di lavoro e Θ(log n) per le chiamate ricorsive
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl3
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
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl4
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
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl5
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)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl6
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;
– Fibonacci2 costa T(n)=Θ(n)=Θ(2k), ed è quindi superesponenziale nella
dimensione dell’input.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl7
Notazione asintotica
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl8
• 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
Notazione asintotica e operazioni dominanti
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl9
f(n) = O(g(n)) se due costanti c>0 e n0≥0 tali che f(n) ≤ c g(n) per ogni n ≥ n0
Notazione asintotica O
cg(n)
f(n)
n0 n
f(n) = ( g(n) )
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
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
Copyright © 2004 - The McGraw - Hill Companies, srl10
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl11
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)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl12
Legame con il concetto di limite
ngnf ngnf
limn O
ngnf
lim ngnf nO
esiste) (se ngnf
lim ngnf nO
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl13
f(n) = (g(n)) se due costanti c>0 e n0≥0 tali che f(n) ≥ c g(n) per ogni n ≥ n0
Notazione asintotica
n0 n
f(n) = ( g(n) )f(n)
c g(n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
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)
Copyright © 2004 - The McGraw - Hill Companies, srl14
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl15
Esempi
• Sia f(n) = 2n2 - 5n; vogliamo dimostrare che f(n)=(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) = (n) (c=1, n0=2)
• f(n) =(log n) (c=1, n0=2)
• Invece, f(n) (n3)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl16
Legame con il concetto di limite
ngnf ngnf
limn 0
0 ngnf
lim ngnf n
0 esiste) (se ngnf
lim ngnf n
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl17
f(n) = (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
Notazione asintotica
n0 n
f(n) = ( g(n) )f(n)
c1 g(n)
c2 g(n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl18
Relazioni tra O, Ω e Θ
ngOnf g(n) nf
ngΘnf g(n)O nf
ngnf g(n) nf
ngΘnf g(n) nf
ngOnf e ngnf g(n) nf
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl19
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:
0ngnf
lim ngonf n
ngO ngo
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl20
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:
ngnf
lim ngnf n
ng ng
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl21
Riassumendo …
menteasintotica cngnf
c0 ngΘnf 21
menteasintotica ngnf
c0 ngnf 1
menteasintotica cngnf
0 ngOnf 2
0 ngnf
lim ngonf n
ngnf
lim ngnf n
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl22
Analogie
O
>
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Graficamente
Copyright © 2004 - The McGraw - Hill Companies, srl23
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl24
Proprietà della notazione asintoticaTransitività
Riflessività
Simmetria
Simmetria trasposta
nhnf nhng e ngnf
nhOnf nhOng e ngOnf
nhnf nhng e ngnf
nhnf nhng e ngnf ooo
nhnf nhng e ngnf
nfnf
nfΟnf nfnf
nfng ngnf
nfng ngOnf
nfng ngonf
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
d
n
n na
lim
Copyright © 2004 - The McGraw - Hill Companies, srl25
Logaritmi
Esponenziali
Polinomi
Fattoriali
P(n) = ad nd + ad-1 nd-1 + … + a0
ad > 0
f(n) = an
a >1
P(n) = O(nd), P(n) = (nd) P(n) = (nd) P(n) = O(nk), k≥d, P(n) ≠ O(nk), k<dP(n) = (nk), k≤d, P(n) ≠ (nk), k>d
an = (nd) d>0an = (nd) d>0
f(n) = logbn b>1
1dc,
nnlog
lim d
cb
n ,0
(logbn)c = o(nd) c,d>0(logbn)c = O(nd) c,d>0
f(n) = n! = n*(n-1)*……*2*1 n! = o(nn) n! = (an)
Relazioni asintotiche notevoli
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl26
Metodi di analisi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl27
• 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
Caso peggiore, migliore e medio
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl28
• 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
Caso peggiore
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl29
• 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
Caso migliore
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl30
• Sia P(I) la probabilità di occorrenza del-l’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
Caso medio
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl31
• 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)
Complessità temporale e spaziale di un algoritmo
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati
Copyright © 2004 - The McGraw - Hill Companies, srl32
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.