Algoritmi e Strutture Dati

annuncio pubblicitario
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
• 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
Criterio di costo logaritmico
• Il costo di una operazione dipende dalla
dimensione degli operandi dell’istruzione
• Una operazione su un operando di valore x ha
costo log x
• È un criterio di costo che modella meglio il la
complessità di algoritmi “numerici”
• useremo il criterio di costo uniforme
(la natura dei problemi che studieremo lo consente)
5
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica
6
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
alcuni dettagli, come costanti moltiplicative e
termini di ordine inferiore
7
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 0f(n) ≤ c g(n) per ogni n ≥ n0
f(n) = ( g(n) )
cg(n)
f(n)
n0
8
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)
9
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica O
O( g(n) )={f(n) |  c>0 e n0≥0 tali che
0  f(n) ≤ c g(n) per ogni n ≥ n0}
• La scrittura:
2n2+4=O(n3)
• è un abuso di notazine per:
2n2+4  O(n3)
10
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 
11
(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) ≥ 0 per ogni n ≥ n0
f(n) = W(g(n))
f(n)
c 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)= W(n)
(c=1, n0=2)
• f(n)=W(n2)
(c=1, n0=3)
• f(n)  W(n3)
13
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica W
W(g(n))={f(n) |  c>0 e n0≥0 tali che
0  c g(n) ≤ f(n) per ogni n ≥ n0}
• La scrittura:
2n2+4= W(n)
• è un abuso di notazine per:
2n2+4  W(n)
14
Copyright © 2004 - The McGraw - Hill Companies, srl
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 
15
(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
16
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)
17
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Notazione asintotica Q
Q(g(n))={f(n) |  c1,c2>0 e n0≥0 tali che
c1 g(n) ≤ f(n)  c2 f(n) per ogni n≥n0}
• La scrittura:
2n2+4= Q(n2)
• è un abuso di notazine per:
2n2+4  Q(n2)
18
Copyright © 2004 - The McGraw - Hill Companies, srl
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) 
19
 fn   Ωgn  e fn   Ogn 
Copyright © 2004 - The McGraw - Hill Companies, srl
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 
20


Ogn 
limn 
fn 
 0
gn 
Copyright © 2004 - The McGraw - Hill Companies, srl
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 
21

Wgn 

limn 
fn 
 
gn 
Copyright © 2004 - The McGraw - Hill Companies, srl
Riassumendo ……
fn   Θgn 
fn   Ogn 
fn   Wgn 
fn 
0  c1 
 c2  
gn 

fn 
 c2  
gn 


0  c1 
fn 
gn 
asintotica mente
asintotica mente
fn   ogn 

limn 
fn 
0
gn 
fn   gn 

limn 
fn 

gn 
22
asintotica mente
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analogie
23
O
W
Q
o





>
Copyright © 2004 - The McGraw - Hill Companies, srl
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 
24
Copyright © 2004 - The McGraw - Hill Companies, srl
Ancora una convenzione
Un insieme in una formula rappresenta un’anonima
funzione dell’insieme.
Esempio 1:
f(n)=n3 + O(n2)
sta per: c’è una funzione h(n) O(n2) tale che
f(n)=n3 + h(n)
Esempio 2:
n2 + O(n) = O(n2)
sta per: per ogni funzione f(n)O(n),
c’è una funzione h(n) O(n2) tale che
n2 +f(n)= h(n)
Se
limnf(n)/g(n)= c >0
allora f(n)=Q(g(n))
Infatti:
c/2 < f(n)/g(n) < 2c
per n suff. grande
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
che tende a ad quando n :
Polinomi ……
nd
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
28
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
Metodi di analisi
29
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
30
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
• Rappresenta una garanzia sul tempo di
esecuzione di ogni istanza
31
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
• significa davvero qualcosa? (mah…)
32
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/assumere una
distribuzione di probabilità sulle istanze
33
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 un array/lista L non ordinata
algoritmo RicercaSequenziale(array L, elem x) -> booleano
1. n = lunghezza di L
2. i=1
3. for i=1 to n do
4.
if (L[i]=x) then return true \\trovato
5. return false \\non trovato
Tbest(n) = 1
Tworst(n) = n
Tavg(n) = (n+1)/2
34
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
35
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi su un array di 9 elementi
Cerca 2
Cerca 1
Cerca 9
Cerca 3
3<4 quindi a e b
si invertono
36
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
37
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Delimitazioni
inferiori e superiori
38
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))
39
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
40
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
41
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analisi di algoritmi ricorsivi
42
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 scritto come algoritmo
ricorsivo.
gli indici i e j indicano la porzione di L in cui cercare l’elemento x
algoritmo RicercaBinariaRic(array L, elem x, int i, int j) -> booleano
1. if (i>j) then return non trovato
2. m= (i+j)/2
3. if (L[m]=x) then return trovato
4. if (L[m]>x) then return RicercaBinariaRic(L, x, i, m-1)
5.
else return RicercaBinariaRic(L, x, m+1,j)
Come analizzarlo?
43
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...
44
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)
45
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)
46
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Metodo della sostituzione
Idea:
1. indovinare la (forma della) soluzione
2. usare induzione matematica per provare che
la soluzione è quella intuita
3. risolvi rispetto alle costanti
47
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Metodo della sostituzione
Esempio: T(n) = n + T(n/2), T(1)=1
Assumiamo che la soluzione sia T(n)≤ c n per
una costante c opportuna
Passo base: T(1)=1≤ c1 per ogni c1
Passo induttivo: T(n)= n + T(n/2) ≤ n+c (n/2) = (c/2+1)n
Quindi T(n) ≤ c n per c≥2
48
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) =
49
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)
50
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
51
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
52
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)
53
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) = (n log22)
ma f(n)W(n log22+e), e > 0
non si può applicare
il teorema Master!
54
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)
55
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 1: T(n) = T(n/3) + T(2n/3) + n,
T(1) = 1
Esempio 2: T(n) = 2 T(n-1) + 1,
T(1) = 1
56
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.
57
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)
58
Copyright © 2004 - The McGraw - Hill Companies, srl
Scarica