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