Sei sulla pagina 1di 34

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Algoritmi e Strutture Dati


Analisi Asintotica Maria Rita Di Berardini, Emanuela Merelli1
1 Dipartimento

di Matematica e Informatica Universit` di Camerino a

15 ottobre 2008

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Un graduale processo di astrazione

Passo 1: abbiamo ignorato il costo eettivo delle singole istruzioni introducendo delle costanti per rappresentare i loro (ad esempio le costanti c1 , ..., c8 nel caso dellinsertion sort) Passo 2: ci siamo resi conto che anche queste costanti forniscono dettagli non necessari il tempo di esecuzione dellinsertion sort nel caso peggiore ` e 2 + bn + c, dove a, b e c sono altre costanti che dipendono an dai costi ci Passo 3: un ulteriore passo di astrazione consiste nel considerare lordine di grandezza o tasso di crescita del tempo di esecuzione

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Un graduale processo di astrazione


Costo in microsecondi Costanti ci Costanti a, b e c an2+bn+c

Ordine di grandezza: quadratico

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Analisi Asintotica
Supponiamo di aver determinato che il tempo necessario a completare un algoritmo sia T (n) = 4n2 2n + 2 Per grandi valori di n, il termine 4n2 ` preponderante rispetto e agli altri, che potranno non essere considerati
per esempio, per n pari a 500, il termine 4n2 = 1.000.000 ` e pari a 1000 volte il termine 2n = 1000

Anche i coecienti diventano irrilevanti se compariamo T (n) con una funzione di ordine superiore, come n3 oppure 2n
Anche se T (n) = 1.000.000n2 , U(n) = n3 sar` maggiore di a T (n) per ogni n maggiore di 1.000.000 (T (1.000.000) = 1.000.0003 = U(1.000.000))
Di Berardini, Merelli Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Analisi Asintotica
Astraiamo da alcuni dettagli irrilevanti (ex: termini di ordine diverso, costanti moltiplicative) e ci interessiamo solo al tasso di crescita; analizziamo come il tempo di esecuzione cresce asintoticamente in funzione della dimensione dellinput Obiettivo
semplicare lanalisi del tempo di esecuzione di un algoritmo (proprio perch` presciamo da dettagli non rilevanti) e classicare le funzioni in base al loro comportamento asintotico

Asintoticamente non signica per tutti gli input


un algoritmo asintoticamente pi` eciente di un altro sar` migliore u a pet tutti gli input tranne, eventualmente, per quelli molto piccoli

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Analisi Asintotica

Per determinare la il comportamento asintotico degli algoritmi importiamo alcune notazioni dalla matematica: O (o grande): ci consente di fornire delle delimitazioni superiori alla complessit` di un algoritmo a (omega grande): fornisce delle delimitazione inferiori (theta grande): fornisce delle delimitazioni strette, sia superiori che inferiori

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Denition (la notazione O grande) Siano f , g : N R0 . Diciamo che f (n) = O(g (n)) se due costanti c, n0 > 0 tali che 0 f (n) cg (n) per ogni n n0

cg(n) f(n)

n0

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Se f (n) = O(g (n)) allora g (n) ` un limite asintotico superiore per e f (n): f (n), a meno di un fattore costante, cresce al pi` come g (n) u Ex: il limite superiore per la ricerca in un array non ordinato ` O(n) e O viene usata nellanalisi del costo computazionale nel caso pessimo O(g (n)) rappresenta in realt` linsieme di funzioni denito come: a O(g (n)) = {f (n)| delle costanti positive c ed n0 tali che 0 f (n) cg (n) per ogni n n0 }

Scrivere f (n) = O(g (n)) ` un abuso di notazione; avremmo e dovuto scrivere f (n) O(g (n))

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Provare che f (n) = 3n2 + 10n = O(n2 )

Dobbiamo dimostrare lesistenza di costanti positive c ed n0 tali che 0 f (n) cn2 per ogni n n0 Basta scegliere c = 13 e n0 = 1; infatti: 3n2 + 10n 3n2 + 10n2 = 13n2 per ogni n 1

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Vero o falso n2 = O(n) ?


Chiaramente ` falsa: n non pu` essere un limite superiore per n2 . e o Proviamo a dimostrarlo per assurdo. Se n2 = O(n), allora esistono delle costanti positive c ed n0 tali che 0 n2 cn per ogni n n0 ossia tali che (dividendo tutto per n) 0 n c per ogni n n0 il che ` impossibile visto che c ` una costante e e

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Classi di complessit` asintotica degli algoritmi a


T (n) = O(1): complessit` costante (cio` T (n) non dipende a e dalla dimensione n dei dati di ingresso) T (n) = O(log n): complessit` logaritmica. a T (n) = O(n): complessit` lineare. a T (n) = O(n log n): complessit` pseudolineare (cos` detta da a n log n = O(n1+ ) per ogni > 0 T (n) = O(n2 ): complessit` quadratica a T (n) = O(n3 ): complessit` cubica a T (n) = O(nk ), k > 0: complessit` polinomiale a T (n) = O(n ), > 1: complessit` esponenziale a

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Denition (la notazione grande) Siano f , g : N R0 . Diciamo che f (n) = (g (n)) se due costanti c, n0 > 0 tali che 0 cg (n) f (n) per ogni n n0

f(n)

cg(n) n

n0

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Se f (n) = (g (n)) allora g (n) ` un limite asintotico inferiore per e f (n): f (n), a meno di un fattore costante, cresce almeno come g (n) Esempio: il limite inferiore per la ricerca in un array non ordinato ` e (1) viene usata nellanalisi del costo computazionale nel caso ottimo (g (n)) rappresenta linsieme di funzioni denito come: (g (n)) = {f (n)| delle costanti positive c ed n0 tali che 0 cg (n) f (n) per ogni n n0 }

Di nuovo, scrivere f (n) = (g (n)) ` un abuso di notazione; e avremmo dovuto scrivere f (n) (g (n))

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Provare che f (n) = 3n2 + 10n = (n2 )

Dobbiamo dimostrare lesistenza di costanti positive c ed n0 tali che 0 cn2 f (n) per ogni n n0 Basta scegliere c = 3 e n0 = 1; infatti: 3n2 + 10n 3n2 per ogni n n0 = 1

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Vero o falso n2 = (n3 ) ?


Chiaramente ` falsa: n3 non pu` essere un limite inferiore per n2 . e o Proviamo a dimostrarlo per assurdo. Se n2 = (n3 ), allora esistono delle costanti positive c ed n0 tali che 0 cn3 n2 per ogni n n0 ossia tali che (dividendo tutto per n3 ) 0c
1 n

per ogni n n0

il che ` impossibile visto che c ` una costante e e

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Denition (la notazione grande) Siano f , g : N R0 . Diciamo che f (n) = O(g (n)) se due costanti c1 , c2 , n0 > 0 tali che 0 c1 g (n) f (n) c2 g (n) per ogni n n0

c2g(n) f(n) c1g(n)


n0

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Se f (n) = (g (n)) allora g (n) ` un limite asintotico stretto per e f (n): f (n), a meno di un fattore costante, cresce esattamente come g (n) (g (n)) rappresenta linsieme di funzioni denito come: (g (n)) = {f (n) | costanti positive c1 , c2 ed n0 tali che 0 c1 g (n) f (n) c2 g (n) per ogni n n0 }

Scrivere f (n) = (g (n)) ` un abuso di notazione e

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Provare che f (n) = 3n2 + 10n = (n2 )

Theorem Per ogni coppia di funzioni f (n) e g (n), si ha che f (n) = (g (n)) i f (n) = O(g (n)) e f (n) = (g (n))

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Provare che f (n) = 3n2 + 10n = (n2 )

Theorem Per ogni coppia di funzioni f (n) e g (n), si ha che f (n) = (g (n)) i f (n) = O(g (n)) e f (n) = (g (n)) Abbiamo dimostrato che f (n) = O(n2 ) e f (n) = (n2 ). Questo basta per concludere che f (n) = (n2 )

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

O grande grande grande

Alcune utili propriet` a


Transitivit` a 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)) f (n) = (g (n)) e g (n) = (h(n)) = f (n) = (h(n)) Riessivit` a f (n) = O(f (n)) f (n) = (f (n)) f (n) = (f (n)) Simmetria f (n) = (g (n)) i g (n) = (f (n)) Simmetria trasposta f (n) = O(g (n)) i g (n) = (f (n))
Di Berardini, Merelli Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Le notazioni o piccolo ed piccolo


Siano f , g : N R0 . Diciamo che f (n) = o(g (n)) se per ogni costante c > 0 esiste n0 > 0 tale che 0 f (n) < cg (n) per ogni n n0 Le denizioni di O ed o sono molto simili:
nella prima, la condizione 0 f (n) cg (n) vale per un qualche c > 0 nella seconda, 0 f (n) < cg (n) vale per ogni c > 0

f (n) = o(g (n)) implica f (n) = O(g (n)) Il concetto intuitivo in questa notazione ` che f (n) diventa e trascurabile rispetto a g (n) quando n tende allinnito, cio` e f limn g (n) = 0 (n)

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Le notazioni o piccolo ed piccolo


Siano f , g : N R0 . Diciamo che f (n) = (g (n)) se per ogni costante c > 0 esiste n0 > 0 tale che 0 cg (n) < f (n) per ogni n n0 Le denizioni di ed sono molto simili:
nella prima, la condizione 0 cg (n) f (n) vale per un qualche c > 0 nella seconda, 0 cg (n) < f (n) vale per ogni c > 0

f (n) = (g (n)) implica f (n) = (g (n)) In questo caso, f (n) diventa aribitrariamente grande rispetto a f g (n) quando n tende allinnito, cio` limn g (n) = e (n)

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Alcune utili propriet` a

Transitivit` a 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)) Simmetria trasposta f (n) = o(g (n)) i g (n) = (f (n))

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

f (n) = O(g (n)) implica af (n) = O(g (n)) per ogni a > 0

Se f (n) = O(g (n)), allora c, n0 > 0 tali che 0 f (n) cg (n) per ogni n n0 Moltiplicando tutto per a otteniamo: 0 af (n) a (cg (n)) = (ac) g (n) = c g (n) per ogni n n0 ossia af (n) = O(g (n))

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

log n = O(n)
Dimostriamo, per induzione su n, che log n n per ogni n 1

(questo corrispondere a scegliere c = 1 ed n0 = 1 nella def di O). Caso base, n = 1: log 1 = 0 1 Passo induttivo: sia n 1 ed assumiamo log n n. Allora: log(n + 1) log(n + n) log(2n) log 2 + log n 1 + log n 1+n per ogni n 1 poich` log(ab) = log(a) + log (b) e per ipotesi induttiva

= = =

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

logb n = O(n) per ogni b > 2

Per la regola del cambiamento di base (i.e. logb n = logb a loga n), abbiamo che logb n = logb 2 log n con logb 2 > logb 1 = 0 Poich` log n = O(n), abbiamo che (vedi dietro) logb n = O(n) e

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

logb nk = O(n) per ogni b > 1 e k01

Usiamo unaltra propriet` degli algoritmi: loga nk = k loga n. a Allora: logb nk = k logb n con k > 0 Di nuovo, poich` logb n = O(n), possiamo concludere che (vedi e k = O(n) dietro) logb n

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

Polinomi

Un polinomio in n di grado k ` una funzione p(n) della forma e


k

p(n) =
i=0

ai ni = a0 + a1 n + a2 n2 + ... + ak nk

dove le costanti reali a0 , a1 , ..., ak sono i coecienti del polinomio e ak = 0. Un polinomio ` asintoticamente positivo se ak > 0. e Se p(n) ` un polinomio di grado k asintoticamente positivo, allora e p(n) = (nk )

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

nk = O(an ) per ogni k 0 e a > 1

Per ogni k 0 e a > 1, nk =0 n an lim Allora nk = o(an ) E quindi anche nk = O(an )

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

Che relazione c` tra 2n e 3n ? e


Banalmente, poich` 2n 3n per ogni n 1, si ha 2n = O(3n ). Il e viceversa non ` vero, ossia 3n = O(2n ). e Infatti, se esistessero c, n0 > 0 tali che 0 3n c2n per ogni n n0 allora (dividendo tutto per 2n ) avremmo (3/2)n c per ogni n n0 con c costante impossibile

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

Se f1 (n) = O(g1 (n)) ed f2 (n) = O(g2 (n)) allora f1 (n) + f2 (n) = O(g1 (n) + g2 (n))

1 se f1 (n) = O(g1 (n)) allora c1 , n0 > 0 tali che 1 0 f1 (n) c1 g1 (n) per ogni n n0 2 se f2 (n) = O(g2 (n)) allora c2 , n0 > 0 tali che 2 0 f2 (n) c2 g2 (n) per ogni n n0 1 2 Sia c = max{c1 , c2 } ed n0 = max{n0 , n0 }. Per ogni n n0 , 0 f1 (n) + f2 (n) c1 g1 (n) + c2 g2 (n) c(g1 (n) + g2 (n))

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

Se f1 (n) = O(g1 (n)) ed f2 (n) = O(g2 (n)) allora f1 (n) f2 (n) = O(g1 (n) g2 (n))

1 se f1 (n) = O(g1 (n)) allora c1 , n0 > 0 tali che 1 0 f1 (n) c1 g1 (n) per ogni n n0 2 se f2 (n) = O(g2 (n)) allora c2 , n0 > 0 tali che 2 0 f2 (n) c2 g2 (n) per ogni n n0 1 2 Sia c = c1 c2 ed n0 = max{n0 , n0 }. Per ogni n n0 , 0 f1 (n) f2 (n) (c1 g1 (n)) (c2 g2 (n)) = c(g1 (n) g2 (n))

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

Se f (n) = O(g (n)) allora f (n)k = O(g (n)k ) per ogni k 1

se f (n) = O(g (n)) allora c, n0 > 0 tali che 0 f (n) cg (n) per ogni n n0 Elevando tutto alla k e ponendo c = c k > 0 otteniamo 0 f (n) (cg (n))k = (c k )g (n)k = c g (n)k per ogni n n0

Di Berardini, Merelli

Algoritmi e Strutture Dati

Analisi Asintotica le notazioni O, e Le notazioni o ed Esercizi

Logaritmo vs Lineare Polinomi vs Esponenziali Esponenziali con base diversa Manipolare O

f (n) = O(g (n)) implica 2f (n) = O(2g (n)), vero o falso?

Falso troviamo un controesempio Sappiamo che 2n = O(n) Ma, 22n = (22 )n = 4n = O(2n )

Di Berardini, Merelli

Algoritmi e Strutture Dati