Algoritmi e Strutture Dati Selezione e statistiche di ordine Luigi Laura Algoritmi e strutture dati Luigi Laura Problemi di statistiche d’ordine • Estrarre da grandi quantità di dati un piccolo insieme di indicatori che ne rappresentino caratteristiche statisticamente salienti • Esempi: minimo, massimo, media, moda (valore più frequente), mediano. Selezione (k,n): Dati insieme di n elementi ed intero k ∈ [1,n], trovare elemento che occuperebbe la k-esima posizione se l’insieme fosse ordinato • Mediano: selezione per k = n/2 2 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Selezione: approcci naïf • Ordina gli elementi, poi restituisci quello in posizione k : O(n log n) • Costruisci un heap, ed estrai il minimo per k volte: O(n + k log n) O(n) se k = O(n/log n) … ma non risolve problema del mediano in tempo lineare! da Demetrescu et al. McGraw Hill 2004 3 Algoritmi e strutture dati Luigi Laura Calcolo randomizzato del mediano (con numero atteso di confronti lineare ) 4 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Usare QuickSort? 1. Divide: scegli pivot x e partiziona in elementi ≤ x ed elementi > x 2. Risolvi due sottoproblemi (QuickSort) 3. Impera: concatena sottosequenze ordinate 4. Restituisci k-esimo elemento nella sequenza Numero atteso di confronti O(n log n) Possiamo fare di meglio? 5 Algoritmi e strutture dati da Demetrescu et al. McGraw Hill 2004 Luigi Laura Usare QuickSort? 1. Divide: scegli pivot x e partiziona in elementi ≤ x ed elementi > x 2. Risolvi UN SOTTOPROBLEMA (QuickSort) 3. Impera: concatena sottosequenze 4. Restituisci k-esimo elemento nella sequenza Numero atteso di confronti: ancora O(n log n) Possiamo fare di meglio? 6 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura QuickSelect 1. Divide: scegli pivot x e partiziona in elementi ≤ x ed elementi > x 2. Risolvi un solo sottoproblema (RICORSIVAMENTE) 7 Algoritmi e strutture dati da Demetrescu et al. McGraw Hill 2004 Luigi Laura QuickSelect 8 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Analisi nel caso peggiore • Nel caso peggiore, pivot scelto ad ogni passo è minimo o massimo degli elementi nell’array • Numero di confronti nel caso peggiore è: C(n) = C(n-1) + O(n) • Risolvendo per iterazione si ottiene C(n) = O(n2) 9 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura QuickSelect Randomizzato • Come per QuickSort, possiamo evitare caso peggiore scegliendo pivot a caso • Ad ogni passo eliminiamo almeno |A2| + min{ |A1|, |A3| } elementi 10 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Analisi di QuickSelect Numero atteso di confronti: • Relazione di ricorrenza dipenderà da k e da n • Difficile da risolvere • Ci aspettiamo caso più difficile per k = n/2 11 Algoritmi e strutture dati da Demetrescu et al. McGraw Hill 2004 Luigi Laura Intuizione • Maggior numero di confronti in QuickSelect si ha per k = n/2 , ovvero nel caso del mediano Per k < n/2 ci sono maggiori possibilità di ricorrere sul più piccolo dei due insiemi A1 e A3 12 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Analisi di QuickSelect Randomizzato • Ad ogni passo eliminiamo almeno |A2| + min{ |A1|, |A3| } elementi • Ogni elemento ha stessa probabilità di essere scelto come pivot: probabilità di ricorrere su array di dimensione i∈[n/2,n-1] è 2/n • Numero di confronti nel caso atteso è quindi: n-1 C(n) = n-1+ ∑ 2 C(i) n i=n/2 da Demetrescu et al. McGraw Hill 2004 13 Algoritmi e strutture dati Luigi Laura Analisi di QuickSelect Randomizzato Dimostriamo per sostituzione che n-1 C(n) = n-1+ ∑ 2 C(i) ≤ n-1+ n i=n/2 n-1 n-1 ∑ i=n/2 2 ≤ n-1+ 2 A ∑ i ≤ n-1+ n A n 2 Ai n ≤ C(n) ≤ 14 2 ( n2 2 - n8 - n4 ( 1 + 3A 4 ) n A n se ( 1 + 3A 4 ) ≤ n-1 (∑ i=n/2 ≤ n-1+ 2 A n C(n) ≤ A n ) =( i=1 n/2-1 i -∑ i ) i=1 1 + 3A 4 )n -1- A 2 A ovvero A ≥ 4 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Numero atteso di confronti Relazione di ricorrenza del QuickSelect ha soluzione C(n) ≤ 4 n Il numero atteso di confronti di QuickSelect è lineare da Demetrescu et al. McGraw Hill 2004 15 Algoritmi e strutture dati Luigi Laura Algoritmo usato in pratica Per convergere rapidamente, scegli il pivot il più vicino possibile al k-esimo (dal lato giusto) Come? Scegli un campione opportuno (m elementi) Scegli il pivot come il j-esimo degli m elementi: j = k m +- δ n 16 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Calcolo deterministico del mediano (con un numero lineare di confronti nel caso peggiore) 17 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Algoritmo deterministico “Derandomizzare” l’algoritmo randomizzato Segui l’idea dell’algoritmo usato in pratica Scegli un campione deterministico (non casuale) Scegli il pivot come il mediano del campione 18 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Algoritmo deterministico: dettagli 1. Scegli n/5 quintuple 2. Per ogni quintupla calcola il mediano 3. Il campione è definito dai mediani delle quintuple 4. Calcola (ricorsivamente) il pivot come mediano dei mediani 5. Prosegui ricorsivamente (come per l’algoritmo randomizzato) da Demetrescu et al. McGraw Hill 2004 19 Algoritmi e strutture dati Luigi Laura Select Calcolo deterministico del pivot tramite una chiamata ricorsiva (riga 6) 20 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Mediano dei mediani • Pivot M è mediano dei mediani mi dei n/5 gruppi di 5 elementi • Mediano di 5 elementi può essere calcolato con al più 7 confronti l’implementazione della riga 5 richiede (7/5) n confronti (ordinando i 5 elementi) • La riga 6 è una chiamata ricorsiva su n/5 elementi • La partizione (righe 7-10) richiede n-1 confronti da Demetrescu et al. McGraw Hill 2004 21 Algoritmi e strutture dati Luigi Laura Seconda chiamata ricorsiva • La chiamata ricorsiva nella riga 11 (riga 12) viene effettuata su un insieme contenente al più 7n/10 +3 elementi 22 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Algoritmo deterministico: analisi 1. Scegli n/5 quintuple 2. Per ogni quintupla calcola mediano 3. Campione definito da mediani delle quintuple 4. Calcola (ricorsivamente) il pivot come mediano dei mediani 5. Partiziona intorno al pivot 6. Prosegui ricorsivamente (come per l’algoritmo randomizzato) (7/5) n T( n/5 ) n-1 T( (7/10) n ) da Demetrescu et al. McGraw Hill 2004 23 Algoritmi e strutture dati Luigi Laura Analisi • La seguente relazione di ricorrenza descrive il numero di confronti eseguiti da select nel caso peggiore: T(n) ≤ (12/5) n + T( n/5 ) + T( (7/10) n ) • La relazione di ricorrenza ha soluzione T(n) = O(n) Facile dimostrare per sostituzione che T(n) ≤ c n per c ≥ 24 24 da Demetrescu et al. McGraw Hill 2004 Algoritmi e strutture dati Luigi Laura Riepilogo • Abbiamo risolto il problema del calcolo del mediano studiandone una generalizzazione, ovvero il calcolo del k-esimo elemento per k ∈ [1,n] • A volte problema più generale più semplice da risolvere del problema originario (dà più facilmente luogo a sottoproblemi ricorsivi) • Il problema della selezione può essere risolto in tempo lineare, sia con algoritmi randomizzati che con algoritmi deterministici • L’algoritmo randomizzato, sebbena richieda tempo O(n2) nel caso peggiore, è più efficiente in pratica 25 da Demetrescu et al. McGraw Hill 2004