Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Per qualificare algoritmi e strutture dati come ‘buoni’ bisogna individuare dei metodi per
analizzarli, un principale strumento di analisi è la caratterizzazione dei tempi di esecuzione e
dello spazio di memoria utilizzato dall’algoritmo o da una struttura dati.
Per procedere con l’analisi abbiamo bisogno di implementare l’algoritmo e poi effettuare
esperimenti, atti a misurare il comportamento e le risorse utilizzate dallo stesso.
- Caso migliore: corrisponde alle configurazioni di d che danno luogo ad un minimo della
funzione T(n);
- Caso peggiore: corrisponde alle configurazioni di d che danno luogo ad un massimo della
funzione T(n);
- Caso medio: che corrisponde al comportamento medi di T(n) al variare della configurazione
di d.
L’analisi che si compie è per un valore di n sufficientemente grande, infatti parleremo di analisi al
limite. Per fare ciò useremo le notazioni asintotiche, rappresentano classi di funzioni e non una
singola specifica funzione e sono:
1
Notazione O (O – grande)
Siano f(n) e g(n) due funzioni che mettano in corrispondenza numeri interi positivi con numeri reali
positivi. Si dice che f(n) ∈ O(g(n)) se esiste una costante reale c > 0 e una costante n0 ≥ 1 tale che:
la notazione O ci consente di affermare che una funzione f(n) è minore di / uguale a un’altra
funzione g(n) a meno di un fattore costante, in senso asintotico.
Siano f(n) e g(n) due funzioni che mettano in corrispondenza numeri interi positivi con numeri reali
positivi. Si dice che f(n) ∈ Ω(g(n)) se esiste una costante reale c > 0 e una costante n0 ≥ 1 tale che:
Siano f(n) e g(n) due funzioni che mettano in corrispondenza numeri interi positivi con numeri reali
positivi. Si dice che f(n) ∈ Θ(g(n)) se f(n) ∈ O(g(n)) e f(n) ∈ Ω(g(n)) ovvero esistono due costanti
reali c1 > 0 e c2 > 0 e una costante n0 ≥ 1 tale che:
Se abbiamo un algoritmo con cicli annidati tali operazioni del ciclo interno aumentano di un’unità
ogni volta, allora il numero totale di operazioni è quadratico in funzione del numero di esecuzioni
del ciclo esterno: (1 + 2 + 3 + … + (n – 1) + n = [n*(n+1)] / 2
2
3