Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
3 marzo 2017
Scopo della definizione attribuire le funzioni tempo T (n) agli insiemi O(g(n)), (g(n)) e (g(n)) onde
caratterizzarne la velocit di crescita mediante funzioni g(n) in genere pi semplici da descrivere.
Tra i tre diversi modi di definire gli ordini di grandezza sussiste la seguente relazione:
Proposizione 1.
(f (n)) = O(f (n)) \ (f (n)).
Dimostrazione. Linclusione da sinistra a destra immediata; per provare quella da destra a sinistra si
osservi che se g(n) 2 O(f (n)) \ (f (n)) allora esistono c1 , c2 > 0 tali che g(n) c2 f (n) da un certo n0 in
poi e c1 f (n) g(n) da un certo n1 in poi; dunque c1 f (n) g(n) c2 f (n) da max{n0 , n1 } in poi.
La notazione f (n) 2 O(g(n)) spesso sostituita da f (n) = O(g(n)), ed analogamente per e . Queste
notazioni si leggono come equazioni unidirezionali, ossia non sono simmetriche, perch tra sinistra e destra vi
perdita dinformazione. Tuttavia la notazione equazionale consente di esprimere pi brevemente propriet
algebriche delle funzioni e dei relativi ordini di grandezza.
1.1 Propriet
Elenchiamo qui di seguito alcune propriet utili degli ordini di grandezza:
Proposizione 2.
1. Riflessivit: cf (n) = O(f (n)), dove c > 0 costante, anche per ,
2. Transitivit: g(n) = O(f (n)) ^ f (n) = O(h(n)) ) g(n) = O(h(n)), anche per ,
3. Simmetria: g(n) = (f (n)) , f (n) = (g(n))
4. Trasposizione: g(n) = O(f (n)) , f (n) = (g(n))
5. Somma: f (n) + g(n) = O(max{f (n), g(n)}), anche per ,
6. Prodotto: g(n) = O(f (n)) ^ h(n) = O(q(n)) ) g(n)h(n) = O(f (n)q(n)), anche per , .
1
Dimostrazione. Le dimostrazioni sono tutte dirette e simili tra loro. Per esempio dimostriamo:
stabilendo la sola implicazione da sinistra a destra, essendo quella da destra a sinistra del tutto analoga.
Dallipotesi g(n) = (f (n)) segue che per certe costanti c1 , c2 > 0 si ha quasi ovunque (abbreviato q.o.):
Ora
1 1
c1 f (n) g(n) ) f (n) g(n), g(n) c2 f (n) ) g(n) f (n) q.o.
c1 c2
dove si osservi che, essendo c1 , c2 positive, 1/c1 e 1/c2 sono tali. Ne segue che f (n) = (g(n)).
Esempio 1. Le propriet nella Proposizione 2 sono sucienti per stabilire facilmente lappartenenza di
polinomi ad opportuni ordini di grandezza. Si vuole provare che:
Dal momento che le (1) e (5) valgono anche per e se ne conclude che f (n) = (n2 ) e f (n) = (n2 ).
2. f g , f (n) = (g(n)).
Per le prorpiet (1)-(3) degli ordini di grandezza, f g una relazione dequivalenza. Per le prorpiet
(1)-(2), f 4 g un pre-ordine. Non in generale antisimmetrico, ma se identifichiamo le funzioni a meno
della relazione , allora 4 un ordine parziale (detto in modo pi rigoroso, lestensione di 4 alle classi di
equivalenza di un ordine parziale).
Si noti che f 4 g equivale allinclusione insiemistica dei rispettivi ordini di grandezza:
f (n)
f (n) 2 o(g(n)) , lim =0
n!1 g(n)
f g , f (n) 2 o(g(n)).
Come per gli altri ordini di grandezza, usiamo la notazione f (n) = o(g(n)); quando f (n) = o(g(n)) ovvero
f g, si dice che f un infinitesimo di g. Evidentemente solo transitiva, e non riflessiva.
2
Proposizione 3.
f (n) = o(g(n)) ) f (n) = O(g(n)) ^ g(n) 6= O(f (n)).
f (n)
Dimostrazione. Se limn!1 g(n) = 0 allora per ogni " > 0 esiste n0 tale che per ogni n > n0 :
f (n)
0 <" ossia 0 f (n) < "g(n).
g(n)
1 f (n)
g(n) cf (n) ) 0 < q.o.
c g(n)
f (n)
Preso allora " = 1/c, lultima diseguaglianza contraddice lipotesi che limn!1 g(n) = 0.
In generale limplicazione inversa non vale, non essendo suciente lipotesi f (n) = O(g(n)) ^ g(n) 6=
O(f (n)) a garantire che il limite limn!1 fg(n)
(n)
esista. Tuttavia sotto questa ipotesi si possono dimostrare i
seguenti asserti:
f (n)
Proposizione 4. Se limn!1 g(n) = a, dove a 1, allora:
Esempio 2. Lo studio del limite del rapporto f (n)/g(n) quando n ! 1 utile per mostrare sia lapparte-
nenza che la non la non appartenenza di una funzione ad un ordine O-grande. Siano
Da questo discende che f (n) = n log2 n + 3n 2 o(n2 ) O(n2 ). Poich daltra parte
n log2 n + 3n n
lim = lim (log2 n + 3) = 1 ovvero lim =0
n!1 n n!1 n!1 n log2 n + 3n
3
1.3 Fattoriale
Proposizione 5. Quasi ovunque 2n n! nn .
2n = 24 = 16 < 4! = n!
2n = 2n 1
2 < (n 1)! n = n!.
1! = 1 = 11
n! = (n 1)! n (n 1)n 1
n < nn 1
n = nn .
La seguente proposizione utile nella limitazione inferiore alla complessit degli algoritmi per lordina-
mento di una sequenza basati su confronti.
Proposizione 6. log2 n! 2 (n log n).
Dimostrazione. Dalla Proposizione 5 sappiamo che n! nn quasi ovunque (in realt da 1 in poi). Poich
log2 monotona ne segue immediatamente
Daltronde
log2 1 + . . . + log2 dn/2e + . . . + log2 n log2 dn/2e + . . . + log2 n
log2 dn/2e + . . . + log2 dn/2e
| {z }
dn/2e
= dn/2e(log2 dn/2e)
n/2 log2 n/2
Da questo e dalla (1) otteniamo che
n n n 1 1
log2 n! log2 = (log2 n 1) = n log2 n n 2 (n log n).
2 2 2 2 2
Dalla Proposizione 1 si conclude che
4
2 Complessit temporale degli algoritmi
Nello studio della complessit temporale di un algoritmo A possiamo procedere in due modi. Il primo
consiste nel costruire la funzione tempo TA (n) utilizzando una tabella dei costi e delle volte, per poi cercare
una funzione f (n) pi semplice tale che TA (n) = O(f (n)) o meglio TA (n) = (f (n)). Il secondo, illustrato
qui, lascia implicita TA e ne deduce lordine di grandezza limitando porzioni dello pseudo-codice.
Se nellalgoritmo abbiamo istruzioni della forma:
allora la sequenza avr costo O(f (n)) + O(g(n)) = O(max{f (n), g(n)}).
Se nellalgoritmo abbiamo una selezione:
allora il test verr eseguito comunque prima delle alternative, mentre nel caso peggiore il costo delle
alternative sar limitato da O(max{g(n), h(n)}); in conclusione la selezione avr costo:
for i 1 to m do
istruzione di costo O(f (n))
end for
5
Consideriamo ora una versione del Select-Sort che usa Ind-Min per la selezione del minimo nella
porzione da ordinare:
Select-Sort(A) . length(A) = n
1:for i 1 to length(A) 1 do
2: k Ind-Min(A[i..length(A)])
3: scambia A[i] con A[k]
4:end for
5:return A
Le linee 3 e 5 hanno costo costante e quindi O(1). La linea 2 ha costo:
perch i length(A) 1 < n. Quindi il corpo del for, linee 2-3, ha costo O(n) + O(1) = O(n). Infine le
iterazioni del for delle linee 1-4 sono n 1, ragion per cui abbiamo:
Poich della Poposizione (2) abbiamo utilizzato propriet valide anche per , possiamo concludere che