Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Complessità in tempo asintotica

Precedente
SUPERIORE
Successiva

Osservazioni

bulletil caso ottimo di un algoritmo è quasi sempre costante (e comunque non sarebbe significativo…) mentre quello pessimo/medio dipende dalla dimensione dei dati
bulletè difficile calcolare con precisione le costanti moltiplicative
bulletper n piccolo è difficile decidere tra due algoritmi mentre per n abbastanza grande…

Si preferisce dare una misura della complessità in tempo di un algoritmo dando

bulletla misura approssimata del calcolo del tempo di esecuzione T(n)
bulletstudiando il suo comportamento per n sufficientemente grande in modo che la discussione sia "significativa"...

Si introduce la complessità asintotica e la notazione O(f(n))

una funzione g(n) è O(f(n)), cioè g(n) è dell'ordine o grande di f(n), se esistono una costante moltiplicativa c ed un numero naturale n0 tali che

g(n) ≤ c*f(n), per una certa c e per ogni n ≥ n0

Esempio

g(n)=2n2+4n+2 ≤ c*f(n)=cn2, con c=2.1 e n≥41 (3528, 3530.1)

allora

g(n)=2n2+4n+2 ε O(n2)

In pratica le costanti moltiplicative diventano trascurabili e così le combinazioni lineari di funzioni.

Tutte le funzioni lineari sono dell'ordine o-grande di n, tutte le funzioni quadratiche sono dell'ordine o-grande di n2, ...

La complessità in tempo viene "riassunta" in una funzione più "significativa", complessità in tempo asintotica.

Esempi

T1=2n+400log2n ε O(n)
T2=2n3+400n ε O(n3)
T3=20000+log10n ε O(log n)
T4=3n+400n4+100000000 ε O(2n)

Nella pratica della programmazione compaiono i seguenti casi interessanti (in ordine crescente di complessità)

T(n)
complessità
in tempo
O()
complessità
asintotica
algoritmoN.B.
cCostanteO(1) **
c*logan+...LogaritmicaO(logn)Ricerca binaria*
c*n+...LineareO(n)Ricerca sequenziale 
c*nlogan+..."enne-log-enne"O(nlogn)Ordinamenti evoluti*
..O(n1.2)Shell sort 
c*n2+...QuadraticaO(n2)Ordinamenti ingenui 
c*n3+...CubicaO(n3)Prodotto di matrici***
c*np+...PolinomialeO(np)  
c*an+...EsponenzialeO(2n)Torre di Hanoi*

Note

bullet..., qualsiasi combinazione lineare delle funzioni delle righe precedenti
bullet*, con a > 1
bullet**, qualsiasi tempo, anche grande, che non dipende da n
bullet***, esistono algoritmi migliori per lo stesso problema

Complessità in tempo asintotica - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva