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