Quicksort Quicksort Limite inferiore della complessità Esempio

Quicksort
Quicksort
ƒ Si sceglie un elemento pivot e si suddivide
il vettore in due: uno con el. minori, l'altro
con el. maggiori o uguali del pivot
ƒ Si procede iterativamente fino a vettori di
1 solo elemento
ƒ La suddivisione ha complessità O(n)
ƒ La complessità della parte ricorsiva
dipende dalla scelta del pivot
Fondamenti di Informatica
1
Esempio
Fondamenti di Informatica
ƒ è ricondotto alla ricerca di una specifica
permutazione di n oggetti
ƒ esistono n! permutazioni diverse
ƒ tutte le permutazioni sono candidate
ƒ ogni passo dell'algoritmo serve per eliminare dei
candidati
2
3
ƒ L'albero deve avere n! foglie
ƒ In generale un albero binario con
profondità i ha al più 2i foglie
ƒ Quindi per avere n! foglie, l'albero deve
avere profondità p = log(n!)
ƒ Albero di risoluzione
ƒ 3! = 6 permutazioni (6 foglie)
ƒ albero con profondità 3
ƒ La profondità dell'albero determina il
numero massimo di confronti nel caso
peggiore
Fondamenti di Informatica
Limite inferiore della complessità
ƒ Ordinare {a1, a2, a3}
ƒ la radice rappresenta tutte le permutazioni
ƒ ogni confronto suddivide le permutazioni
p = log(n!) ~ log(n/e)n =n log(n) - n log(e) = O(n log(n))
ƒ Il limite inferiore alla complessità è O(n log(n))
4
Binsort
Fondamenti di Informatica
5
Fondamenti di Informatica
Binsort
7
Fondamenti di Informatica
6
Binsort
ƒ Si suppone che gli n elementi del
vettore abbiano chiavi [1..n]
ƒ Si scandisce un vettore e si spostano gli
elementi in un altro
ƒ Ha complessità O(n)
ƒ Fin'ora gli algoritmi erano basati su
operazioni di confronto
ƒ Il binsort utilizza operazioni di
indirizzamento con indici
ƒ Sfrutta la conoscenza dell'intervallo di
variabilità delle chiavi
Fondamenti di Informatica
ƒ Si considerano algoritmi la cui operazione
fondamentale è il confronto tra elementi
ƒ Problema:
ƒ Scegliendo come pivot l'elemento min o
max, la complessità diventa O(n2)
ƒ Scegliendo come pivot l'elemento
centrale, la complessità è O(n log2 n)
ƒ Il caso peggiore succede raramente
ƒ E' più probabile il caso migliore
ƒ E' usato per la semplicità e l'efficienza
Esempio
ƒ La ricerca è rappresentabile
graficamente con un albero binario:
Fondamenti di Informatica
Limite inferiore della complessità
8
ƒ Caso di più chiavi uguali:
ƒ utilizzo di una lista
ƒ al termine le liste vengono concatenate
ƒ Complessità:
ƒ inserimento O(n)
ƒ concatenazione O(n)
ƒ totale O(n)
Fondamenti di Informatica
9
Considerazioni
sulla scelta di un algoritmo
Binsort
ƒ E' il più efficiente se:
Considerazioni
sulla scelta di un algoritmo
ƒ Le caratteristiche di un algoritmo sono:
ƒ si utilizzano chiavi numeriche
ƒ l'intervallo di variabilità delle chiavi è noto
ƒ è possibile effettuare indirizzamenti con
indici
ƒ semplice, per facilitarne la comprensione,
programmazione, e correzione
ƒ efficiente, cioè richiede una quantità
limitata di risorse per l'esecuzione
ƒ Le due caratteristiche si riferiscono a:
ƒ costo umano
ƒ costo di esecuzione
Fondamenti di Informatica
10
Considerazioni
ƒ Implementazione efficiente dell'algoritmo
ƒ sono state considerate solo le complessità
ƒ sono state eliminate le costanti moltiplicative
ƒ Per scegliere l'implementazione migliore è
necessario considerare tutto
ƒ ad esempio, gli algoritmi ricorsivi sono
generalmente molto pesanti
Fondamenti di Informatica
13
Fondamenti di Informatica
11
ƒ Non esistono regole per la scelta ottima
ƒ Generalmente però:
ƒ si sceglie la prima regola quando si deve
eseguire poche volte su insiemi ridotti di dati
ƒ si sceglie la seconda se il programma viene
eseguito un grande numero di volte su
insiemi estesi di dati
Fondamenti di Informatica
12