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