QuickSort - PowerPoint PPT Presentation

About This Presentation
Title:

QuickSort

Description:

QuickSort Quick-Sort(A,s,d) IF s – PowerPoint PPT presentation

Number of Views:115
Avg rating:3.0/5.0
Slides: 87
Provided by: Massi84
Category:
Tags: quicksort | heap | sort

less

Transcript and Presenter's Notes

Title: QuickSort


1
QuickSort

Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
2
Algoritmo QuickSort
  • E un algoritmo di ordinamento sul posto
  • La sua complessità è
  • O(n2) nel caso peggiore
  • O(n log n) nel caso medio
  • Nonostante le cattive prestazioni nel caso
    peggiore, QuickSort è il miglior algoritmo di
    ordinamento in media

3
Struttura di QuickSort
  • È un algoritmo ricorsivo basato sul Divide et
    Impera
  • Divide si partiziona il vettore Asd
    (spostando elementi) in due sottovettori Asq-1
    e Aq1d, separati da un elemento pivot Aq

ogni elemento di Asq-1 è ? Aq ogni elemento
di Aq1d è gt Aq
Impera si ordinano ricorsivamente i due
sottovettori Asq e Aq1d con QuickSort
Combina si concatenano banalmente i sottovettori
(sono già reciprocamente ordinati!)
4
Pseudocodice di QuickSort
Indice mediano

Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q1,d)
q è lindice che divide il vettore A in due in
modo che gli elementi con indice ? q siano
minori o uguali a quelli con indice gt q
5
Pseudocodice di QuickSort
Ordinamento dei due sottoarray

Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
Poiché il primo sottovettore ha elementi tutti
minori o uguali a quelli del secondo
sottovettore, basta ordinare separatamente i due
sottovettori per risolvere lintero problema
6
Pseudocodice di QuickSort
passo Divide

Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
Partiziona è la chiave dellalgoritmo !
7
Partiziona
  • Si partiziona il vettore Asd in due
    sottovettori Asq-1 e Aq1d tali che ogni
    elemento di Asq-1 sia ? Aq e ogni elemento
    di Aq1d sia gt Aq
  • - si sceglie un elemento del vettore, detto pivot
    (perno), che farà da spartiacque
  • - si spostano gli elementi maggiori del pivot
    verso destra e gli elementi minori verso sinistra

Lindice mediano q dipende dallelemento pivotè
il numero di elementi minori o uguali al pivot
8
Partiziona

Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
Chiaro? Mah Discutiamolo in termini di
invarianti di ciclo!
9
Partiziona invariante di ciclo
  • Partiziona mantiene questo invariante di ciclo
  • Ad x lelemento pivot x è in posizione
    terminale
  • il vettore A contiene
  • un sottovettore Asi i cui elementi sono tutti
    ? x
  • un sottovettore Ai1j-1 i cui elementi sono
    tutti gt x

Gli stati ammissibili sono quelli in cui vale
linvariante La distanza dallo stato finale è
misurata da j Linvariante si impone con i s-1
e j s (sottovettori vuoti)
10
Partiziona
Stabilire linvariante

Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
- Lelemento pivot è in fondo al vettore - I
due sottovettori sono vuoti
11
Partiziona
Misurare i progressi

Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
La misura di distanza è il numero di elementi
esterni ai due sottovettori cala ad ogni passo
12
Partiziona
Mantenere linvariante

Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
Ogni passo aggiunge un nuovo elemento in fondoSe
esso è destinato al primo sottovettore, va
scambiato
13
Partiziona
Condizioni di uscita

Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
Al termine, lelemento pivot deve trovarsi fra i
due sottovettori
14
Esempio partiziona(A,1,12)

x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 28 34 15 45 12 30 21 25 16 22
i
j
Asi Ai1j-1
15
Esempio partiziona(A,1,12)
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 28 34 15 45 12 30 21 25 16 22
i
j
Asi 20 Ai1j-1
16
Esempio partiziona(A,1,12)

x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 28 34 15 45 12 30 21 25 16 22
i
j
Asi 20 14 Ai1j-1
17
Esempio partiziona(A,1,12)

x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 28 34 15 45 12 30 21 25 16 22
i
j
Asi 20 14 Ai1j-1 28
18
Esempio partiziona(A,1,12)
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 28 34 15 45 12 30 21 25 16 22
i
j
Asi 20 14 Ai1j-1 28 34
19
Esempio partiziona(A,1,12)
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 34 28 45 12 30 21 25 16 22
i
j
Asi 20 14 15 Ai1j-1 34 28
20
Esempio partiziona(A,1,12)
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 34 28 45 12 30 21 25 16 22
i
j
Asi 20 14 15 Ai1j-1 34 28 45
21
Esempio partiziona(A,1,12)
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 12 28 45 34 30 21 25 16 22
i
j
Asi 20 14 15 12 Ai1j-1 28 45 34
22
Esempio partiziona(A,1,12)
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 12 28 45 34 30 21 25 16 22
i
j
Asi 20 14 15 12 Ai1j-1 28 45 34 30
23
Esempio partiziona(A,1,12)
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 12 21 45 34 30 28 25 16 22
i
j
Asi 20 14 15 12 21 Ai1j-1 45 34 30
28
24
Esempio partiziona(A,1,12)

x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 12 21 45 34 30 28 25 16 22
i
j
Asi 20 14 15 12 21 Ai1j-1 45 34 30
28 25
25
Esempio partiziona(A,1,12)
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 12 21 16 34 30 28 25 45 22
i
j
Asi 20 14 15 12 21 16 Ai1j-1 34 30
28 25 45
26
Esempio partiziona(A,1,12)
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 12 21 16 22 30 28 25 45 34
i
j
Asi 20 14 15 12 21 16 Ai1j-1 30 28
25 45 34
27
Partiziona un caso limite
x

Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 28 34 15 45 12 30 21 25 16 1
i
j
Se un solo elemento è ? pivot, ...
28
Partiziona un caso limite
x
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
20 14 28 34 15 45 12 30 21 25 16 1
i
j
Se un solo elemento è ? pivot, il THEN non
viene mai eseguito
29
Partiziona un caso limite
x

Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
1 2 3 4 5 6 7
8 9 10 11 12
1 14 28 34 15 45 12 30 21 25 16 20
i
j
Se un solo elemento è ? pivot, la dimensione del
sottovettore sinistro è 1, quella del
sottovettore destro è n-1
30
Partiziona analisi di complessità
Partiziona(A,s,d) x Ad i s - 1 j
s WHILE j lt d DO IF Aj ? x THEN
ii1 scambia Ai con Aj j j1
scambia Ai1 con Ad RETURN i1
31
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
20 14 28 34 15 45 12 30 21 25 16 22
s
d
32
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 12 21 16 22 30 28 25 45 34
s
d
q
33
QuickSort un esempio
1 2 3 4 5 6
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
20 14 15 12 21 16
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 12 21 16 22 30 28 25 45 34
s
d
q
34
QuickSort un esempio
1 2 3 4 5 6
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
20 14 15 12 21 16
1 2 3 4 5 6 7
8 9 10 11 12
20 14 15 12 21 16 22 30 28 25 45 34
s
d
35
QuickSort un esempio
1 2 3 4 5 6
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
20 14 15 12 21 16
1 2 3 4 5 6 7
8 9 10 11 12
14 15 12 16 20 21 22 30 28 25 45 34
s
d
q
36
QuickSort un esempio
1 2 3
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
14 15 12
1 2 3 4 5 6 7
8 9 10 11 12
14 15 12 16 20 21 22 30 28 25 45 34
s
d
q
37
QuickSort un esempio
1 2 3
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
14 15 12
1 2 3 4 5 6 7
8 9 10 11 12
14 15 12 16 20 21 22 30 28 25 45 34
s
d
38
QuickSort un esempio
1 2 3
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
12 14 15
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
39
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
40
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
41
QuickSort un esempio
2 3
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
14 15
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
42
QuickSort un esempio
2 3
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
14 15
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
43
QuickSort un esempio
2 3
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
14 15
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
44
QuickSort un esempio
2
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
14
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
45
QuickSort un esempio
2
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
14
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
46
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
47
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
48
QuickSort un esempio
5 6
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
20 21
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
49
QuickSort un esempio
5 6
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
20 21
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
50
QuickSort un esempio
5 6
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
20 21
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
51
QuickSort un esempio
5
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
20
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
52
QuickSort un esempio
5
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q)
Quick-Sort(A,q 1,d)
20
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
53
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
54
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
55
QuickSort un esempio
8 9 10 11 12
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
30 28 25 45 34
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
q
56
QuickSort un esempio
8 9 10 11 12
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
30 28 25 45 34
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 45 34
s
d
57
QuickSort un esempio
8 9 10 11 12
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
30 28 25 45 34
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 34 45
s
d
q
58
QuickSort un esempio
8 9 10 11 12
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
30 28 25 45 34
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 34 45
s
d
q
59
QuickSort un esempio
8 9 10
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
30 28 25
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 30 28 25 34 45
s
d
60
QuickSort un esempio
8 9 10
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
25 28 30
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
q
61
QuickSort un esempio
8 9 10
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
25 28 30
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
q
62
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
63
QuickSort un esempio
9 10
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
28 30
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
q
64
QuickSort un esempio
9 10
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
28 30
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
65
QuickSort un esempio
9 10
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
28 30
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
q
66
QuickSort un esempio
9
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
28
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
q
67
QuickSort un esempio
9
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
28
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
68
QuickSort un esempio

Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
q
69
QuickSort un esempio

Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
70
QuickSort un esempio
8 9 10 11 12
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
25 28 30 45 34
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
q
71
QuickSort un esempio
12
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
45
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34 45
s
d
72
QuickSort un esempio
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
Il vettore A ora è ordinato!
1 2 3 4 5 6 7
8 9 10 11 12
12 14 15 16 20 21 22 25 28 30 34
45
73
QuickSort analisi di complessità
  • Il tempo di esecuzione di QuickSort dipende dal
    bilanciamento fra i sottovettori costruiti da
    Partiziona
  • Il caso migliore si verifica quando i
    sottovettori sono perfettamente bilanciati,
    entrambi di dimensione n/2
  • Il caso peggiore si verifica quando un
    sottovettore è sempre di dimensione 1 (laltro è
    quindi di dimensione n - 1)

74
QuickSort caso migliore
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
Quando si verifica il caso migliore?
  • Se i sottovettori sono di uguale dimensione
  • T(n) 2T(n/2) ?(n)
  • per il caso 2 del teorema principale
  • T(n) ?(n log n)

75
QuickSort caso peggiore
Quick-Sort(A,s,d) IF s lt d THEN q
Partiziona(A,s,d) Quick-Sort(A,s,q-1)
Quick-Sort(A,q 1,d)
Quando si verifica il caso peggiore?
Il sottovettore sinistro ha dimensione 1, quello
destro dimensione n - 1 T(n) T(1) T(n - 1)
?(n) Poiché T(1) 1 otteniamo T(n) T(n -
1) ?(n)
76
QuickSort caso peggiore
s
d
1 2 3 4 5 6
7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10
11 12
Pivot 12
s
d
q
1 2 3 4 5 6
7 8 9 10 11 12
Pivot 11
1 2 3 4 5 6 7 8 9 10
11 12
q
s
d
1 2 3 4 5 6
7 8 9 10 11 12
Pivot 10
1 2 3 4 5 6 7 8 9 10
11 12
q

77
QuickSort caso peggiore
Lequazione di ricorrenza può essere risolta
facilmente col metodo iterativo T(n) T(n - 1)
?(n)
?(n2)
78
QuickSort caso medio?
La complessità di QuickSort nel caso medio è
molto vicina a quella del caso migliore Per
averne unintuitizione, supponiamo che ad ogni
passo Partiziona dia due sottovettori molto
sbilanciati, ma con un rapporto fisso n1
99/100 n n2 n/100 Allora T(n) T(99n/100)
T(n/100) ?(n) ?(n log n)
(basta applicare il metodo iterativo)
79
QuickSort caso medio?
La stessa cosa vale per qualsiasi rapporto fisso
fra le dimensioni dei sottovettori Se n1 (1-e)
n e n2 e n, allora T(n) ?(n log n) Ma non si
può garantire un comportamento così
regolare! Occorre invece unipotesi sulla
distribuzione di probabilità delle diverse
istanze, ad esempio che ogni permutazione sia
equiprobabile Per ogni istanza, la partizione
sarà buona in alcuni livelli, cattiva in altri
80
QuickSort caso medio?
Facciamo unaltra ipotesi intuitiva Partiziona
genera una suddivisione cattiva e una buona,
alternate
?(n)
n
n

?(1)
?(n-1)
1
n-1
?((n-1)/2)
?((n-1)/2)
(n-1)/2
(n-1)/2
T(n) ?(n) ?(1) ?(n-1) 2T((n-1)/2)
81
QuickSort caso medio?
Facciamo unaltra ipotesi intuitiva Partiziona
genera una suddivisione cattiva e una buona,
alternate
?(n) ?(n-1)
n
n

?((n-1)/2)
?((n-1)/2)
?(1)
(n-1)/2
(n-1)/2
1
E la stessa complessità di una partizione
bilanciata!
T(n) ?(n) ?(1) ?(n-1) 2T((n-1)/2)
Ma non si può garantire un comportamento così
regolare!
82
QuickSort caso medio?
Per ottenere un comportamento del tutto casuale,
si sceglie un elemento pivot casuale anziché
lultimo del vettore A
RandomPartiziona(A,s,d) p random(s,d) scambi
a Ap e Ad Partiziona(A,s,d)
Questo rende improbabile che la partizione sia
sempre sbilanciata, anche per le istanze quasi
ordinate
83
QuickSort randomizzata analisi
  • Consideriamo tutto lalbero delle chiamate di
    QuickSort
  • Ogni chiamata comporta
  • alcune operazioni O(1)
  • una chiamata a Partiziona, che a sua volta
    comporta
  • altre operazioni O(1)
  • un ciclo di confronti fra gli elementi del
    sottovettore e il pivot
  • Ogni chiamata ha un pivot diverso avvengono al
    più n chiamate
  • La complessità è O(n) la complessità dei cicli
    di confronti

84
QuickSort randomizzata analisi
Quanti confronti fra Aj e x avvengono? Sia ai
li-esimo numero in ordine crescente e pij la
probabilità complessiva che durante lalgoritmo
si confrontino ai e aj Inizialmente, ai e aj
fanno parte del vettore corrente. Se in qualsiasi
momento viene scelto come pivot un elemento
intermedio, ai e aj finiscono in sottovettori
diversi e non verranno mai confrontati Se viene
scelto come pivot uno dei due, ai e aj vengono
confrontati esattamente una volta
85
QuickSort randomizzata analisi
Quindi ogni confronto è diverso, perché cambia
uno dei due elementi Il numero di confronti
totale è in media Siltj pij pij è la probabilità
che in un vettore contenente sia ai sia aj si
scelga come pivot o ai o aj, ma non un elemento
intermedio
pij 2 / (j-i1)
Siltj pij Sn-1i1 Snji1 2 / (j-i1)
86
QuickSort randomizzata analisi
Siltj pij Sn-1i1 Snji1 2 / (j-i1)
Posto k j-i
Siltj pij Sn-1i1 Sn-ik1 2 / (k1) lt Sn-1i1
Snk1 2 / k lt lt Sn-1i1 log n lt n log n
Siltj pij O(n log n)
Write a Comment
User Comments (0)
About PowerShow.com