Heap Sort

27
5/17/2011 1 Theo for students

Transcript of Heap Sort

Page 1: Heap Sort

5/17/2011 1Theo for students

Page 2: Heap Sort

Δίλαη πνιύ γλσζηόο θαη παξαδνζηαθόο

αιγόξηζκνο δηάηαμεο, ζρεηηθά, ζα πξέπεη λα

είλαη γλσζηά:

Heapsort είλαη πάληα O(n log n)

Quicksort είλαη ζπλήζσο O(n log n) αιιά ζηε

ρεηξόηεξε πεξίπησζε είλαη O(n2)

Quicksort είλαη γεληθά ηαρύηεξνο, αιιά Heapsort είλαη θαιύηεξνο ζε εθαξκνγέο κε θξηζηκόηεηα

ρξόλνπ.

Heapsort είλαη πολύ ενδιαθέρον αιγόξηζκνο25/17/2011 Theo for students

Page 3: Heap Sort

Οξηζκόο ελόο ζσξνύ (heap):

1. Μηα κεγάιε πεξηνρή κλήκεο από ηελ νπνία ν

πξνγξακκαηηζηήο κπνξεί λα δεζκεύζεη ηα

θνκκάηηα (blocks) πνπ ρξεηάδεηαη , θαη λα ηα

απνδεζκεύζεη (ή λα επηηξέςεη λα ζθνππηδν-

θαζαξηζηνύλ) όηαλ δελ ηα ρξεηάδεηαη πηα.

2. Ένα ζηαθμιζμένο, αριζηερά ζηοιτημένο

δσαδικό δένηρο ζηο οποίο κανένας κόμβος

ηοσ δεν έτει ηιμή μεγαλύηερη εκείνης ηοσ

γονέα ηοσ.

Οη πην πάλσ δύν νξηζκνί έρνπλ ειάρηζηα θνηλά

Ο Heapsort ρξεζηκνπνηεί ηνλ δεύηεξν35/17/2011 Theo for students

Page 4: Heap Sort

Υπελζύκηζε: Τν βάζνο ελόο θόκβνπ είλαη ε απόζηαζή ηνπ από ηε ξίδα.

Τν βάζνο ελόο δέληξνπ είλαη ην βάζνο ηνπ βαζύηεξνύ ηνπ θόκβνπ.

Έλα δπαδηθό δέληξν βάζνπο n είλαη ζηαζκηζκέλν εάλ όινη νη θόκβνη ηνπ βάζνπο 0 έσο n-2 έρνπλ από δύν παηδηά.

4

σταθμισμένο σταθμισμένο Μη σταθμισμένο

n-2n-1n

5/17/2011 Theo for students

Page 5: Heap Sort

Έλα ζηαζκηζκέλν δπαδηθό δέληξν βάζνπο nείλαη Αξηζηεξά ζηνηρεκέλν εάλ: Έρεη 2n θόκβνπο βάζνπο n (ην δέληξν είλαη

“πιήξεο”), ή

Έρεη 2k θόκβνπο βάζνπο k, γηα θάζε k < n, καιόια ηα θύιια βάζνπο n είλαη άθξσο αξηζηεξά ζηνηρεκέλα.

5

Αριστερά στοιχημένο Μη Αριστερά στοιχημένο

5/17/2011 Theo for students

Page 6: Heap Sort

Πξώηνλ, ζα κειεηεζεί ε κεηαηξνπή δπαδηθνύ

δέληξνπ ζε ζσξό (heap).

Σηε ζπλέρεηα, ζα κειεηεζεί ε κεηαηξνπή ηνπ

δπαδηθνύ δέληξνπ, πνπ ζα πξνθύςεη κεηά θάπνηα

κεηαβνιή, θαη πάιη ζε ζσξό.

Τέινο (απηή είλαη θαη ε θεληξηθή ηδέα), ζα

κειεηεζεί ην πώο ηα πην πάλσ ζα ρξεζηκνπνηεζνύλ

ζηε δηάηαμε (sort) ελόο πίλαθα (array).

65/17/2011 Theo for students

Page 7: Heap Sort

Έλαο θόκβνο δηέπεηαη από ηελ αξρή ζσξνύ (heap property) εάλ ε ηηκή ηνπ είλαη ηόζν κεγάιε ή θαη

κεγαιύηεξε από ηηο ηηκέο ησλ παηδηώλ ηεο.

Όινη νη θόκβνη θύιια έρνπλ ηελ heap property

Έλα δπαδηθό δέληξν είλαη heap εάλ όινη νη θόκβνη ηνπ έρνπλ ηελ heap property.

7

12

8 3

Ο κπιε θόκβνο

έρεη heap property

12

8 12

Ο κπιε θόκβνο

έρεη heap property

12

8 14

Ο κπιε θόκβνο δελ έρεη

heap property

5/17/2011 Theo for students

Page 8: Heap Sort

Γεδνκέλνπ ελόο θόκβνπ πνπ δελ έρεη heap property , κπνξεί λα ηνπ δνζεί ε αξρή απηή, κε ακνηβαία

αληηκεηάζεζε ηεο ηηκήο ηνπ, κε εθείλε ηνπ παηδηνύ ηνπ,

πνπ έρεη ηε κεγαιύηεξε ηηκή.

Ο κεηαζρεκαηηζκόο απηόο νλνκάδεηαη πξνο ηα πάλσ

νιίζζεζε (sifting up).

Αο ζεκεησζεί όηη ην παηδί θόκβνο κπνξεί λα χάζει ηελ

heap property ηνπ.8

14

8 12

Ο κπιε θόκβνο έτει

heap property

12

8 14

Ο κπιε θόκβνο δεν

έτει heap property

5/17/2011 Theo for students

Page 9: Heap Sort

Έλα δέληξν κε έλαλ κνλαδηθό θόκβν είλαηαπηόκαηα έλα heap

Καηαζθεπάδνπκε έλα heap πξνζζέηνληαο έλα λέν θόκβν ηε θνξά: Πξνζζέηνληαο θόκβν ζηα δεμηά ηνπ δεμηόηαηνπ

θόκβνπ ζην βαζύηεξν επίπεδν (ηειεπηαίν πξνο ηα θάησ).

Δάλ ην επίπεδν είλαη γεκάην, πξνζηίζεηαη λέν επίπεδν. Examples:

9

Πξόζζεζε

λένπ node

εδώ

Πξόζζεζε

λένπ node

εδώ

5/17/2011 Theo for students

Page 10: Heap Sort

Σε θάζε πξόζζεζε θόκβνπ, κπνξεί λα θαηαζηξέθεηαη ε heap-αξρή ηνπ γνλέα ηνπ θόκβνπ.

Γηα ηελ επαλόξζσζε, εθηειείηαη sift up

Αιιά ζε θάζε sift up, ε ηηκή ηνπ πάλσ θόκβνπ κπνξεί λα κεγαιώλεη έηζη, ώζηε λα θαηαζηξέθεηαη ε heap-αξρή ηνπ γνλέα ηνπ θόκβνπ.

Δπαλαιακβάλεηαη ε δηαδηθαζία ηεο πξνο ηα πάλσ νιίζζεζεο ζην δέληξν, έσο όηνπ:

Πξνζπειαζζεί θόκβνο πνπ δελ παξαβηάδεη ηελ αξρή-heap, ή

Πξνζπειαζζεί ε ξίδα ηνπ δέληξνπ.

105/17/2011 Theo for students

Page 11: Heap Sort

11

8 8

10

10

8

10

8 5

10

8 5

12

10

12 5

8

12

10 5

8

1 2 3

4

5/17/2011 Theo for students

Page 12: Heap Sort

Ο θόκβνο πνπ πεξηέρεη ην 8 δελ επεξεάδεηαη επεηδή ν γνλέαο ηνπ θόκβνο, παξά ηε κεηαβνιή, παξακέλεη κε κεγαιύηεξν πεξηερόκελν.

Ο θόκβνο πνπ πεξηέρεη ην 5 δελ επεξεάδεηαη επεηδή ν γνλέαο ηνπ θόκβνο, γίλεηαη κε κεγαιύηεξν πεξηερόκελν.

Ο θόκβνο πνπ πεξηέρεη ην 8 δελ επεξεάδεηαη επεηδή ν γνλέαο ηνπ θόκβνο, παξά ηε κεηαβνιή, παξακέλεη κε κεγαιύηεξν πεξηερόκελν.

12

12

10 5

8 14

12

14 5

8 10

14

12 5

8 10

5/17/2011 Theo for students

Page 13: Heap Sort

Αθνινπζεί έλα απιό δπαδηθό δέληξν κεηά ηε ζσξνπνίεζή ηνπ (heapified)

Αο ζεκεησζεί όηη heapified δε ζημαίνει διαηεηαγμένο.

Η ζσξνπνίεζε δελ αιιάδεη ηε κνξθή ηνπ δέληξνπ. Τν δέληξν είλαη ζηαθμιζμένο θαη αριζηερά ζηοιτημένο επεηδή έηζη ήηαλ από ηελ αξρή.

13

19

1418

22

321

14

119

15

25

1722

5/17/2011 Theo for students

Page 14: Heap Sort

Αο ζεκεησζεί όηη ν κεγαιύηεξνο αξηζκόο πεξηέρεηαη ζηε ξίδα

Αο ππνηεζεί όηη απομακρύνεηαι ε ξίδα:

Πώο κπνξεί λα δηνξζσζεί ην δέληξν ώζηε λα μαλαγίλεη

ζηαθμιζμένο θαη αριζηερά ζηοιτημένο (δένηρο - ζωρού);

Λύζε: κεηαζέηνληαο ην ηειεπηαίν ζηνηρείν (δεμηόηαην θύιιν

ηνπ βαζύηεξνπ επηπέδνπ) ζηε ζέζε ηεο ξίδαο.

14

19

1418

22

321

14

119

15

1722

11

5/17/2011 Theo for students

Page 15: Heap Sort

Τν δέληξν είλαη ζηαθμιζμένο θαη αριζηερά ζηοιτημένο (δένηρο - ζωρού), αιιά όρη heap.

Βέβαηα, μόνο η ρίζα έραζε ηελ αξρή - ζσξνύ

Κάλνπκε siftUp() ηε ξίδα

Σηε ζπλέρεηα , κόλν έλα από ηα παηδηά θόκβνη κπνξεί λα έρεη ράζεη ηελ αξρή – ζσξνύ.

15

19

1418

22

321

14

9

15

1722

11

5/17/2011 Theo for students

Page 16: Heap Sort

Τώξα ην αξηζηεξό παηδί ηεο ξίδαο (εμαθνινπζεί λα είλαη

ην 11) έραζε ηελ αξρή – ζσξνύ.

Κάλνπκε siftUp() ηνλ θόκβν.

Σηε ζπλέρεηα , κόλν έλα από ηα παηδηά θόκβνη κπνξεί λα

έρεη ράζεη ηελ αξρή – ζσξνύ.

16

19

1418

22

321

14

9

15

1711

22

5/17/2011 Theo for students

Page 17: Heap Sort

Τώξα ην δεμί παηδί ηνπ αξηζηεξνύ παηδηνύ ηεο ξίδαο

(εμαθνινπζεί λα είλαη ην 11) έραζε ηελ αξρή – ζσξνύ.

Κάλνπκε siftUp() ηνλ θόκβν.

Σηε ζπλέρεηα , κόλν έλα από ηα παηδηά θόκβνη κπνξεί λα έρεη

ράζεη ηελ αξρή – ζσξνύ, — αιιά όρη, επεηδή είλαη θόκβνο

θύιιν (ηα θύιια έρνπλ πάληα ηελ αξρή – ζσξνύ).

17

19

1418

11

321

14

9

15

1722

22

5/17/2011 Theo for students

Page 18: Heap Sort

Τν δέληξν καο είλαη θαη πάιη έλαο ζσξόο, επεηδή θάζε θόκβνο ηνπ δηέπεηαη από ηελ αξρή – ζσξνύ.

Καη πάιη, ε κεγαιύηεξε (ή κηα κεγαιύηεξε) ηηκή είλαη ζηε ξίδα.

Μπνξνύκε λα επαλαιακβάλνπκε ηε δηαδηθαζία έσο ην θαηλό δέληξν

Απηό παξάγεη κηα ζεηξά δηαηεηαγκέλσλ ηηκώλ από ηε κεγαιύηεξε έσο ηε κηθξόηεξε (heap sort).

18

19

1418

21

311

14

9

15

1722

22

5/17/2011 Theo for students

Page 19: Heap Sort

Τη ζρέζε έρνπλ ηα δέληξα – ζσξνί κε ηηο δηαηάμεηο;

Αθνινπζεί ε εμήγεζε: Δπεηδή ην δπαδηθό δέληξν είλαη ζσγιζμένο θαη αριζηερά

ζηοιτημένο, κπνξεί λα αλαπαξαζηαζεί ζαλ πίλαθαο (array) προζοτή: Η αλαπαξάζηαζε είλαη δπλαηή μόνο γηα ζσγιζμένα,

αριζηερά-ζηοιτημένα δπαδηθά δέληξα.

Όιεο νη πξάμεηο ησλ δσαδικών δένηρων κπνξνύλ λα αλαπαξαζηαζνύλ κε αληίζηνηρεο πξάμεηο ζε πίνακες

Αιγόξηζκνο δηάηαμεο:Σωροποίηζη ηοσ πίνακα;Εθ’ όζον ο πίνακας δεν είναι καινός{

απομάκρσνε και ανηικαηάζηηζε ηη ρίζα;επαναζωροποίηζε ηο δένηρο;

}

195/17/2011 Theo for students

Page 20: Heap Sort

Σεκείσζε:

Τν αξηζηεξό παηδί ηνπ δείθηε i έρεη δείθηε 2 * i + 1

Τν δεμί παηδί ηνπ δείθηε i έρεη δείθηε 2 * i + 2

Παράδειγμα: ηα παιδιά ηοσ κόμβοσ 3 (19) είναι 7 (18) και 8 (14)20

19

1418

22

321

14

119

15

25

1722

25 22 17 19 22 14 15 18 14 21 3 9 11

0 1 2 3 4 5 6 7 8 9 10 11 12

5/17/2011 Theo for students

Page 21: Heap Sort

Η “ξίδα” είλαη ην πξώην ζηνηρείν ηνπ πίλαθα

Ο “δεμηόηαηνο θόκβνο ζην βαζύηαην επίπεδν” είλαη ην ηειεπηαίν ζηνηρείν ηνπ πίλαθα

Ακνηβαία αληηθαηάζηαζε…

...θαη ζεσξνύκε όηη ην ηειεπηαίν ζηνηρείν ηνπ πίλαθα δελ ππάξρεη πιένλ—απηό ζα πεη, όηη “ηειεπηαίνο δείθηεο” είλαη ην 11 (πνπ πεξηέρεη ηελ ηηκή 9)

21

25 22 17 19 22 14 15 18 14 21 3 9 11

0 1 2 3 4 5 6 7 8 9 10 11 12

11 22 17 19 22 14 15 18 14 21 3 9 25

0 1 2 3 4 5 6 7 8 9 10 11 12

5/17/2011 Theo for students

Page 22: Heap Sort

Δπαλαζσξνπνίεζε (δέθηεο 0, πεξηερόκελν11)...

Υπελζπκίδεηαη, όκσο, όηη ν “ηειεπηαίνο” πηλαθνδείθηεο έρεη αιιάμεη.

Δπαλαιακβάλνπκε έσο κεδεληθό κήθνο πίλαθα, θαη ν πίλαθαο ζα έρεη

ηαμηλνκεζεί!22

22 22 17 19 21 14 15 18 14 11 3 9 25

0 1 2 3 4 5 6 7 8 9 10 11 12

9 22 17 19 22 14 15 18 14 21 3 22 25

0 1 2 3 4 5 6 7 8 9 10 11 12

11 22 17 19 22 14 15 18 14 21 3 9 25

0 1 2 3 4 5 6 7 8 9 10 11 12

...Καη πάιη, απνκάθξπλζε θαη αληηθαηάζηαζε ηεο ξίδαο

5/17/2011 Theo for students

Page 23: Heap Sort

Έηζη αξρίδεη ν αιγόξηζκνο:Σωροποίηζη ηοσ πίνακα;

Σωροποίηζη ηοσ πίνακα : πξόζζεζε θαζέλα από ηνπο

n θόκβνπο ηνπ δέληξνπ

Κάζε θόκβνο πξέπεη λα νιηζζήζεη πξνο ηα πάλσ

(sifting- up) , ίζσο θαη κέρξη ηε ξίδα.

Δπεηδή ην δπαδηθό δέληξν είλαη απόιπηα δπγηζκέλν, ε

νιίζζεζε θάζε θόκβνπ απαηηεί O(log n) ρξόλν.

Δπεηδή επαλαιακβάλνπκε n θνξέο, ε ζσξνπνίεζε

απαηηεί ρξόλν n*O(log n), άξα, ζπλνιηθά ρξόλν O(n*log n).

235/17/2011 Theo for students

Page 24: Heap Sort

Αθνινπζεί ν ππόινηπνο αιγόξηζκνο:Εθ’ όζον ο πίνακας δεν είναι καινός{

απομάκρσνε και ανηικαηάζηηζε ηη ρίζα;επαναζωροποίηζε ηο δένηρο;

}

Δπαλαιακβάλεηαη ν while βξόρνο n θνξέο (ζηελ πξαγκαηηθόηεηα, n-1 θνξέο), επεηδή απνκαθξύλνπκε έλα από ηνπο n θόκβνπο, θάζε θνξά.

Απνκάθξπλζε θαη αληηθαηάζηαζε ηεο ξίδαο απαηηεί ρξόλν O(1).

Δπνκέλσο, ν ζπλνιηθόο ρξόλνο είλαη n θνξέο ν ρξόλνο πνπ δηαξθεί ε επαναζωροποίηζη.

245/17/2011 Theo for students

Page 25: Heap Sort

Η επαλαζσξνπνίεζε ηεο ξίδαο, ζπλεπάγεηαη

κεηαθίλεζε από ηε ξίδα σο θάπνην θύιιν (θαη

κπνξεί λα ζηακαηήζεη πνιύ πην πξηλ)

Τν δπαδηθό δέληξν είλαη ηέιεηα δπγηζκέλν

Δπνκέλσο, ε δηαδξνκή έρεη κήθνο O(log n)

Καη πξαγκαηνπνηνύκε O(1) πξάμεηο γηα θάζε θόκβν.

Δπνκέλσο, ε επαλαζσξνπνίεζε γίλεηαη O(log n) θνξέο

Δπεηδή επαζσξνπνηνύκε κέζα ζε έλα while βξόρν απηό

γίλεηαη n θνξέο, ν ζπλνιηθόο ρξόλνο ηνπ while βξόρνπ

είλαη n*O(log n), ή O(n*log n).

255/17/2011 Theo for students

Page 26: Heap Sort

Αθνινπζεί, πάιη, ν αιγόξηζκνο :Σωροποίηζη ηοσ πίνακα;

Εθ’ όζον ο πίνακας δεν είναι καινός

{

απομάκρσνε και ανηικαηάζηηζε ηη ρίζα;

επαναζωροποίηζε ηο δένηρο;}

Φξόλνο επαλαζσξνπνίεζεο O(n*log n)

Φξόλνο while βξόρνπ O(n*log n)

Άξα, ζπλνιηθόο ρξόλνο O(n*log n) + O(n*log n)

Γειαδή O(n*log n)!

265/17/2011 Theo for students

Page 27: Heap Sort

275/17/2011 Theo for students