27
Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 8: ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ – ΑΛΓΟΡΙΘΜΟΣ HEAPSORT Δημήτριος Κουκόπουλος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διαχείρισης Πολιτισμικού Περιβάλλοντος και Νέων Τεχνολογιών

Αλγόριθμος HeapSort

  • Upload
    vucong

  • View
    232

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Αλγόριθμος HeapSort

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 8 ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT

Δημήτριος Κουκόπουλος

Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων

Τμήμα Διαχείρισης Πολιτισμικού Περιβάλλοντος

και Νέων Τεχνολογιών

2

ΠΕΡΙΕΧΟΜΕΝΟ

Βασικές Έννοιες ndash Δομή Σωρού Σωρός

Αλγόριθμος Κατασκευής Σωρού

Αλγόριθμος Συμπλήρωσης Σωρού

Παράδειγμα

Αλγόριθμος Ταξινόμησης Σωρού - HeapSort

Παράδειγμα

3

ΔΟΜΗ ΣΩΡΟΥ

Ορισμός

Δέντρο που προκύπτει από πλήρες δυαδικό δέντρο με ρίζα αν του

αφαιρεθούν μερικοί κόμβοι (ή κανένας) από τα δεξιά του τελευταίου

επιπέδου

Ειδικότερα δομή σωρού έχω σε ένα δέντρο αν

όλοι οι εσωτερικοί κόμβοι έχουν δυο παιδιά με μόνη εξαίρεση τον πιο δεξιά

εσωτερικό κόμβο του επιπέδου d-1 που επιτρέπεται να έχει βαθμό 1 οπότε θα

έχει μόνο αριστερό παιδί και

στο επίπεδο d-1 τα φύλλα είναι όλα στα δεξιά των εσωτερικών κόμβων

4

ΑΝΤΙΣΤΟΙΧΙΣΗ ΛΙΣΤΑΣ ΣΕ ΔΟΜΗ ΣΩΡΟΥ

Αν έχω μια λίστα L με n αριθμούς τους αντιστοιχίζω σε μια δομή σωρού βάθους

έτσι ώστε στο επίπεδο j της δομής σωρού ο πρώτος κόμβος να

αντιστοιχεί στον αριθμό που βρίσκεται στη θέση 2j στη λίστα L και ο τελευταίος

στον αριθμό που βρίσκεται στη θέση 2j+1-1 στη λίστα L με εξαίρεση το

τελευταίο επίπεδο όπου δεν υπάρχουν αρκετοί όροι

nd log

5

ΠΑΡΑΔΕΙΓΜΑ

Αν L=[5 6 7 9 4 3 0 1] τότε η δομή σωρού είναι

5

6 7

9 4 3 0

1

6

ΣΩΡΟΣ - HEAP

Ορισμός

Σωρός ονομάζεται ένα δέντρο στους κόμβους του οποίου αντιστοιχούν

αριθμοί από μια λίστα L και είναι δομή σωρού με την επιπλέον ιδιότητα ο

αριθμός που αντιστοιχεί σε έναν κόμβο να μην είναι μικρότερος από τους

αριθμούς που αντιστοιχούν στα παιδία του αν ο κόμβος έχει παιδιά

7

ΣΧΕΔΙΑΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ

ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ

Ο αλγόριθμος κατασκευής σωρού παίρνει σαν είσοδο μια

δομή σωρού L και δίνει σαν έξοδο ένα σωρό

Ο αλγόριθμος κατασκευής σωρού χρησιμοποιεί ως

υποαλγόριθμο τον αλγόριθμο συμπλήρωσης σωρού που

παίρνει σαν είσοδο μια δομή σωρού όπου τα παιδιά της

ρίζας είναι σωροί και δίνει σαν έξοδο ένα σωρό

8

ΒΗΜΑΤΑ

Ο αλγόριθμος κατασκευής σωρού επισκέπτεται τους

εσωτερικούς κόμβους του δέντρου εισόδου από επίπεδο σε

επίπεδο και σε κάθε επίπεδο από αριστερά προς τα δεξιά

Η επίσκεψη ξεκινά από το προτελευταίο επίπεδο προς τα

υψηλότερα επίπεδα

Σε κάθε εσωτερικό κόμβο ενεργοποιείται ο αλγόριθμος

συμπλήρωσης σωρού για το δέντρο που έχει ρίζα τον

κόμβο αυτό

9

ΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ-ΚΣ

Είσοδος Δομή σωρού L με n κόμβους

Έξοδος Σωρός

Ψευδοκώδικας

m1=2d

for m=d-1 downto 0 do

k=m

while 2klt=n and kltm1 do

κλήση αλγόριθμου σσ(rkn) k=k+1

end while

m1=2m

end for

nd log

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 2: Αλγόριθμος HeapSort

2

ΠΕΡΙΕΧΟΜΕΝΟ

Βασικές Έννοιες ndash Δομή Σωρού Σωρός

Αλγόριθμος Κατασκευής Σωρού

Αλγόριθμος Συμπλήρωσης Σωρού

Παράδειγμα

Αλγόριθμος Ταξινόμησης Σωρού - HeapSort

Παράδειγμα

3

ΔΟΜΗ ΣΩΡΟΥ

Ορισμός

Δέντρο που προκύπτει από πλήρες δυαδικό δέντρο με ρίζα αν του

αφαιρεθούν μερικοί κόμβοι (ή κανένας) από τα δεξιά του τελευταίου

επιπέδου

Ειδικότερα δομή σωρού έχω σε ένα δέντρο αν

όλοι οι εσωτερικοί κόμβοι έχουν δυο παιδιά με μόνη εξαίρεση τον πιο δεξιά

εσωτερικό κόμβο του επιπέδου d-1 που επιτρέπεται να έχει βαθμό 1 οπότε θα

έχει μόνο αριστερό παιδί και

στο επίπεδο d-1 τα φύλλα είναι όλα στα δεξιά των εσωτερικών κόμβων

4

ΑΝΤΙΣΤΟΙΧΙΣΗ ΛΙΣΤΑΣ ΣΕ ΔΟΜΗ ΣΩΡΟΥ

Αν έχω μια λίστα L με n αριθμούς τους αντιστοιχίζω σε μια δομή σωρού βάθους

έτσι ώστε στο επίπεδο j της δομής σωρού ο πρώτος κόμβος να

αντιστοιχεί στον αριθμό που βρίσκεται στη θέση 2j στη λίστα L και ο τελευταίος

στον αριθμό που βρίσκεται στη θέση 2j+1-1 στη λίστα L με εξαίρεση το

τελευταίο επίπεδο όπου δεν υπάρχουν αρκετοί όροι

nd log

5

ΠΑΡΑΔΕΙΓΜΑ

Αν L=[5 6 7 9 4 3 0 1] τότε η δομή σωρού είναι

5

6 7

9 4 3 0

1

6

ΣΩΡΟΣ - HEAP

Ορισμός

Σωρός ονομάζεται ένα δέντρο στους κόμβους του οποίου αντιστοιχούν

αριθμοί από μια λίστα L και είναι δομή σωρού με την επιπλέον ιδιότητα ο

αριθμός που αντιστοιχεί σε έναν κόμβο να μην είναι μικρότερος από τους

αριθμούς που αντιστοιχούν στα παιδία του αν ο κόμβος έχει παιδιά

7

ΣΧΕΔΙΑΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ

ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ

Ο αλγόριθμος κατασκευής σωρού παίρνει σαν είσοδο μια

δομή σωρού L και δίνει σαν έξοδο ένα σωρό

Ο αλγόριθμος κατασκευής σωρού χρησιμοποιεί ως

υποαλγόριθμο τον αλγόριθμο συμπλήρωσης σωρού που

παίρνει σαν είσοδο μια δομή σωρού όπου τα παιδιά της

ρίζας είναι σωροί και δίνει σαν έξοδο ένα σωρό

8

ΒΗΜΑΤΑ

Ο αλγόριθμος κατασκευής σωρού επισκέπτεται τους

εσωτερικούς κόμβους του δέντρου εισόδου από επίπεδο σε

επίπεδο και σε κάθε επίπεδο από αριστερά προς τα δεξιά

Η επίσκεψη ξεκινά από το προτελευταίο επίπεδο προς τα

υψηλότερα επίπεδα

Σε κάθε εσωτερικό κόμβο ενεργοποιείται ο αλγόριθμος

συμπλήρωσης σωρού για το δέντρο που έχει ρίζα τον

κόμβο αυτό

9

ΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ-ΚΣ

Είσοδος Δομή σωρού L με n κόμβους

Έξοδος Σωρός

Ψευδοκώδικας

m1=2d

for m=d-1 downto 0 do

k=m

while 2klt=n and kltm1 do

κλήση αλγόριθμου σσ(rkn) k=k+1

end while

m1=2m

end for

nd log

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 3: Αλγόριθμος HeapSort

3

ΔΟΜΗ ΣΩΡΟΥ

Ορισμός

Δέντρο που προκύπτει από πλήρες δυαδικό δέντρο με ρίζα αν του

αφαιρεθούν μερικοί κόμβοι (ή κανένας) από τα δεξιά του τελευταίου

επιπέδου

Ειδικότερα δομή σωρού έχω σε ένα δέντρο αν

όλοι οι εσωτερικοί κόμβοι έχουν δυο παιδιά με μόνη εξαίρεση τον πιο δεξιά

εσωτερικό κόμβο του επιπέδου d-1 που επιτρέπεται να έχει βαθμό 1 οπότε θα

έχει μόνο αριστερό παιδί και

στο επίπεδο d-1 τα φύλλα είναι όλα στα δεξιά των εσωτερικών κόμβων

4

ΑΝΤΙΣΤΟΙΧΙΣΗ ΛΙΣΤΑΣ ΣΕ ΔΟΜΗ ΣΩΡΟΥ

Αν έχω μια λίστα L με n αριθμούς τους αντιστοιχίζω σε μια δομή σωρού βάθους

έτσι ώστε στο επίπεδο j της δομής σωρού ο πρώτος κόμβος να

αντιστοιχεί στον αριθμό που βρίσκεται στη θέση 2j στη λίστα L και ο τελευταίος

στον αριθμό που βρίσκεται στη θέση 2j+1-1 στη λίστα L με εξαίρεση το

τελευταίο επίπεδο όπου δεν υπάρχουν αρκετοί όροι

nd log

5

ΠΑΡΑΔΕΙΓΜΑ

Αν L=[5 6 7 9 4 3 0 1] τότε η δομή σωρού είναι

5

6 7

9 4 3 0

1

6

ΣΩΡΟΣ - HEAP

Ορισμός

Σωρός ονομάζεται ένα δέντρο στους κόμβους του οποίου αντιστοιχούν

αριθμοί από μια λίστα L και είναι δομή σωρού με την επιπλέον ιδιότητα ο

αριθμός που αντιστοιχεί σε έναν κόμβο να μην είναι μικρότερος από τους

αριθμούς που αντιστοιχούν στα παιδία του αν ο κόμβος έχει παιδιά

7

ΣΧΕΔΙΑΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ

ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ

Ο αλγόριθμος κατασκευής σωρού παίρνει σαν είσοδο μια

δομή σωρού L και δίνει σαν έξοδο ένα σωρό

Ο αλγόριθμος κατασκευής σωρού χρησιμοποιεί ως

υποαλγόριθμο τον αλγόριθμο συμπλήρωσης σωρού που

παίρνει σαν είσοδο μια δομή σωρού όπου τα παιδιά της

ρίζας είναι σωροί και δίνει σαν έξοδο ένα σωρό

8

ΒΗΜΑΤΑ

Ο αλγόριθμος κατασκευής σωρού επισκέπτεται τους

εσωτερικούς κόμβους του δέντρου εισόδου από επίπεδο σε

επίπεδο και σε κάθε επίπεδο από αριστερά προς τα δεξιά

Η επίσκεψη ξεκινά από το προτελευταίο επίπεδο προς τα

υψηλότερα επίπεδα

Σε κάθε εσωτερικό κόμβο ενεργοποιείται ο αλγόριθμος

συμπλήρωσης σωρού για το δέντρο που έχει ρίζα τον

κόμβο αυτό

9

ΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ-ΚΣ

Είσοδος Δομή σωρού L με n κόμβους

Έξοδος Σωρός

Ψευδοκώδικας

m1=2d

for m=d-1 downto 0 do

k=m

while 2klt=n and kltm1 do

κλήση αλγόριθμου σσ(rkn) k=k+1

end while

m1=2m

end for

nd log

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 4: Αλγόριθμος HeapSort

4

ΑΝΤΙΣΤΟΙΧΙΣΗ ΛΙΣΤΑΣ ΣΕ ΔΟΜΗ ΣΩΡΟΥ

Αν έχω μια λίστα L με n αριθμούς τους αντιστοιχίζω σε μια δομή σωρού βάθους

έτσι ώστε στο επίπεδο j της δομής σωρού ο πρώτος κόμβος να

αντιστοιχεί στον αριθμό που βρίσκεται στη θέση 2j στη λίστα L και ο τελευταίος

στον αριθμό που βρίσκεται στη θέση 2j+1-1 στη λίστα L με εξαίρεση το

τελευταίο επίπεδο όπου δεν υπάρχουν αρκετοί όροι

nd log

5

ΠΑΡΑΔΕΙΓΜΑ

Αν L=[5 6 7 9 4 3 0 1] τότε η δομή σωρού είναι

5

6 7

9 4 3 0

1

6

ΣΩΡΟΣ - HEAP

Ορισμός

Σωρός ονομάζεται ένα δέντρο στους κόμβους του οποίου αντιστοιχούν

αριθμοί από μια λίστα L και είναι δομή σωρού με την επιπλέον ιδιότητα ο

αριθμός που αντιστοιχεί σε έναν κόμβο να μην είναι μικρότερος από τους

αριθμούς που αντιστοιχούν στα παιδία του αν ο κόμβος έχει παιδιά

7

ΣΧΕΔΙΑΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ

ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ

Ο αλγόριθμος κατασκευής σωρού παίρνει σαν είσοδο μια

δομή σωρού L και δίνει σαν έξοδο ένα σωρό

Ο αλγόριθμος κατασκευής σωρού χρησιμοποιεί ως

υποαλγόριθμο τον αλγόριθμο συμπλήρωσης σωρού που

παίρνει σαν είσοδο μια δομή σωρού όπου τα παιδιά της

ρίζας είναι σωροί και δίνει σαν έξοδο ένα σωρό

8

ΒΗΜΑΤΑ

Ο αλγόριθμος κατασκευής σωρού επισκέπτεται τους

εσωτερικούς κόμβους του δέντρου εισόδου από επίπεδο σε

επίπεδο και σε κάθε επίπεδο από αριστερά προς τα δεξιά

Η επίσκεψη ξεκινά από το προτελευταίο επίπεδο προς τα

υψηλότερα επίπεδα

Σε κάθε εσωτερικό κόμβο ενεργοποιείται ο αλγόριθμος

συμπλήρωσης σωρού για το δέντρο που έχει ρίζα τον

κόμβο αυτό

9

ΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ-ΚΣ

Είσοδος Δομή σωρού L με n κόμβους

Έξοδος Σωρός

Ψευδοκώδικας

m1=2d

for m=d-1 downto 0 do

k=m

while 2klt=n and kltm1 do

κλήση αλγόριθμου σσ(rkn) k=k+1

end while

m1=2m

end for

nd log

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 5: Αλγόριθμος HeapSort

5

ΠΑΡΑΔΕΙΓΜΑ

Αν L=[5 6 7 9 4 3 0 1] τότε η δομή σωρού είναι

5

6 7

9 4 3 0

1

6

ΣΩΡΟΣ - HEAP

Ορισμός

Σωρός ονομάζεται ένα δέντρο στους κόμβους του οποίου αντιστοιχούν

αριθμοί από μια λίστα L και είναι δομή σωρού με την επιπλέον ιδιότητα ο

αριθμός που αντιστοιχεί σε έναν κόμβο να μην είναι μικρότερος από τους

αριθμούς που αντιστοιχούν στα παιδία του αν ο κόμβος έχει παιδιά

7

ΣΧΕΔΙΑΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ

ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ

Ο αλγόριθμος κατασκευής σωρού παίρνει σαν είσοδο μια

δομή σωρού L και δίνει σαν έξοδο ένα σωρό

Ο αλγόριθμος κατασκευής σωρού χρησιμοποιεί ως

υποαλγόριθμο τον αλγόριθμο συμπλήρωσης σωρού που

παίρνει σαν είσοδο μια δομή σωρού όπου τα παιδιά της

ρίζας είναι σωροί και δίνει σαν έξοδο ένα σωρό

8

ΒΗΜΑΤΑ

Ο αλγόριθμος κατασκευής σωρού επισκέπτεται τους

εσωτερικούς κόμβους του δέντρου εισόδου από επίπεδο σε

επίπεδο και σε κάθε επίπεδο από αριστερά προς τα δεξιά

Η επίσκεψη ξεκινά από το προτελευταίο επίπεδο προς τα

υψηλότερα επίπεδα

Σε κάθε εσωτερικό κόμβο ενεργοποιείται ο αλγόριθμος

συμπλήρωσης σωρού για το δέντρο που έχει ρίζα τον

κόμβο αυτό

9

ΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ-ΚΣ

Είσοδος Δομή σωρού L με n κόμβους

Έξοδος Σωρός

Ψευδοκώδικας

m1=2d

for m=d-1 downto 0 do

k=m

while 2klt=n and kltm1 do

κλήση αλγόριθμου σσ(rkn) k=k+1

end while

m1=2m

end for

nd log

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 6: Αλγόριθμος HeapSort

6

ΣΩΡΟΣ - HEAP

Ορισμός

Σωρός ονομάζεται ένα δέντρο στους κόμβους του οποίου αντιστοιχούν

αριθμοί από μια λίστα L και είναι δομή σωρού με την επιπλέον ιδιότητα ο

αριθμός που αντιστοιχεί σε έναν κόμβο να μην είναι μικρότερος από τους

αριθμούς που αντιστοιχούν στα παιδία του αν ο κόμβος έχει παιδιά

7

ΣΧΕΔΙΑΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ

ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ

Ο αλγόριθμος κατασκευής σωρού παίρνει σαν είσοδο μια

δομή σωρού L και δίνει σαν έξοδο ένα σωρό

Ο αλγόριθμος κατασκευής σωρού χρησιμοποιεί ως

υποαλγόριθμο τον αλγόριθμο συμπλήρωσης σωρού που

παίρνει σαν είσοδο μια δομή σωρού όπου τα παιδιά της

ρίζας είναι σωροί και δίνει σαν έξοδο ένα σωρό

8

ΒΗΜΑΤΑ

Ο αλγόριθμος κατασκευής σωρού επισκέπτεται τους

εσωτερικούς κόμβους του δέντρου εισόδου από επίπεδο σε

επίπεδο και σε κάθε επίπεδο από αριστερά προς τα δεξιά

Η επίσκεψη ξεκινά από το προτελευταίο επίπεδο προς τα

υψηλότερα επίπεδα

Σε κάθε εσωτερικό κόμβο ενεργοποιείται ο αλγόριθμος

συμπλήρωσης σωρού για το δέντρο που έχει ρίζα τον

κόμβο αυτό

9

ΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ-ΚΣ

Είσοδος Δομή σωρού L με n κόμβους

Έξοδος Σωρός

Ψευδοκώδικας

m1=2d

for m=d-1 downto 0 do

k=m

while 2klt=n and kltm1 do

κλήση αλγόριθμου σσ(rkn) k=k+1

end while

m1=2m

end for

nd log

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 7: Αλγόριθμος HeapSort

7

ΣΧΕΔΙΑΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ

ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ

Ο αλγόριθμος κατασκευής σωρού παίρνει σαν είσοδο μια

δομή σωρού L και δίνει σαν έξοδο ένα σωρό

Ο αλγόριθμος κατασκευής σωρού χρησιμοποιεί ως

υποαλγόριθμο τον αλγόριθμο συμπλήρωσης σωρού που

παίρνει σαν είσοδο μια δομή σωρού όπου τα παιδιά της

ρίζας είναι σωροί και δίνει σαν έξοδο ένα σωρό

8

ΒΗΜΑΤΑ

Ο αλγόριθμος κατασκευής σωρού επισκέπτεται τους

εσωτερικούς κόμβους του δέντρου εισόδου από επίπεδο σε

επίπεδο και σε κάθε επίπεδο από αριστερά προς τα δεξιά

Η επίσκεψη ξεκινά από το προτελευταίο επίπεδο προς τα

υψηλότερα επίπεδα

Σε κάθε εσωτερικό κόμβο ενεργοποιείται ο αλγόριθμος

συμπλήρωσης σωρού για το δέντρο που έχει ρίζα τον

κόμβο αυτό

9

ΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ-ΚΣ

Είσοδος Δομή σωρού L με n κόμβους

Έξοδος Σωρός

Ψευδοκώδικας

m1=2d

for m=d-1 downto 0 do

k=m

while 2klt=n and kltm1 do

κλήση αλγόριθμου σσ(rkn) k=k+1

end while

m1=2m

end for

nd log

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 8: Αλγόριθμος HeapSort

8

ΒΗΜΑΤΑ

Ο αλγόριθμος κατασκευής σωρού επισκέπτεται τους

εσωτερικούς κόμβους του δέντρου εισόδου από επίπεδο σε

επίπεδο και σε κάθε επίπεδο από αριστερά προς τα δεξιά

Η επίσκεψη ξεκινά από το προτελευταίο επίπεδο προς τα

υψηλότερα επίπεδα

Σε κάθε εσωτερικό κόμβο ενεργοποιείται ο αλγόριθμος

συμπλήρωσης σωρού για το δέντρο που έχει ρίζα τον

κόμβο αυτό

9

ΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ-ΚΣ

Είσοδος Δομή σωρού L με n κόμβους

Έξοδος Σωρός

Ψευδοκώδικας

m1=2d

for m=d-1 downto 0 do

k=m

while 2klt=n and kltm1 do

κλήση αλγόριθμου σσ(rkn) k=k+1

end while

m1=2m

end for

nd log

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 9: Αλγόριθμος HeapSort

9

ΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΣΩΡΟΥ-ΚΣ

Είσοδος Δομή σωρού L με n κόμβους

Έξοδος Σωρός

Ψευδοκώδικας

m1=2d

for m=d-1 downto 0 do

k=m

while 2klt=n and kltm1 do

κλήση αλγόριθμου σσ(rkn) k=k+1

end while

m1=2m

end for

nd log

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 10: Αλγόριθμος HeapSort

10

ΑΛΓΟΡΙΘΜΟΣ ΣΥΜΠΛΗΡΩΣΗΣ ΣΩΡΟΥ-

ΣΣ(rkn)

Είσοδος Δομή σωρού με δείκτη ρίζας r και n στοιχεία όπου καθένα από τα υποδέντρα της ρίζας είναι σωρός

Έξοδος Σωρός

Ψευδοκώδικας x=L(r)

rleft=2r

while rleft lt= n do

max=rleft

rright=rleft+1

if rrightlt=n and L(rright)gt=L(rleft) then max=rright

if xltL(max) then do

L(r)=L(max)

r=max

rleft=2max

end if

end while

L(r)=x

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 11: Αλγόριθμος HeapSort

11

ΠΑΡΑΔΕΙΓΜΑ 14

Πρόβλημα Να εφαρμοστεί ο αλγόριθμος κατασκευής σωρού για τη λίστα

L=[101318289381948392328]

Απάντηση

1 Μετατρέπουμε τη λίστα L σε δομή σωρού

10

13 18

28 9 38 19

48 39 23 28

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 12: Αλγόριθμος HeapSort

12

ΠΑΡΑΔΕΙΓΜΑ 24

2 Ξεκινούμε από το προτελευταίο επίπεδο d-1=2 Καλούμε τον αλγόριθμο σσ για

το υποδέντρο με ρίζα το 28 και στη συνέχεια για το υποδέντρο με ρίζα το 9

Οπότε

28

48 39

48

28 39

9

23 28

28

23 9

10

13 18

48 28 38 19

28 39 23 9

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 13: Αλγόριθμος HeapSort

13

ΠΑΡΑΔΕΙΓΜΑ 34

3 Πηγαίνουμε σε επίπεδο 1 και καλούμε τον αλγόριθμο σσ για το υποδέντρο με ρίζα το 13 και στη συνέχεια για το υποδέντρο με ρίζα το 18

Οπότε

13

48 28

28 39 23 9

48

39 28

28 13 23 9

18

38 19

38

18 19

10

48 38

39 28 18 19

28 13 23 9

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 14: Αλγόριθμος HeapSort

14

ΠΑΡΑΔΕΙΓΜΑ 44

4 Πηγαίνουμε σε επίπεδο 0 και καλούμε τον αλγόριθμο σσ για τη ρίζα με

τον αριθμό 10

48

39 38

28 28 18 19

10 13 23 9

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 15: Αλγόριθμος HeapSort

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 12

Βήματα

1 Ο HeapSort εφαρμόζει πρώτα τον αλγόριθμο κατασκευής σωρού στην αρχική λίστα L Τότε στη ρίζα τοποθετείται το μέγιστο στοιχείο της λίστας

2 Το στοιχείο που βρίσκεται στη ρίζα του σωρού το παίρνουμε και το βάζουμε στο τέλος της L

3 Στην κενή θέση τοποθετείται το τελευταίο φύλλο (το δεξιότερο στο τελευταίο επίπεδο) που αφαιρείται από δέντρο Ο σωρός γίνεται δομή σωρού

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 16: Αλγόριθμος HeapSort

16

ΑΛΓΟΡΙΘΜΟΣ HEAPSORT ΓΙΑ

ΤΑΞΙΝΟΜΗΣΗ ΛΙΣΤΑΣ 22

4 Καλείται ο αλγόριθμος συμπλήρωσης σωρού οπότε η δομή σωρού γίνεται πάλι σωρός με το μεγαλύτερο στοιχείο στη ρίζα Το στοιχείο αυτό τοποθετείται στη θέση n-1 της L και στη ρίζα μπαίνει πάλι τελευταίο φύλλο

5 Επαναλαμβάνουμε διαδικασία μέχρι τέλος στοιχείων λίστας

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 17: Αλγόριθμος HeapSort

17

ΨΕΥΔΟΚΩΔΙΚΑΣ HEAPSORT

κλήση αλγορίθμου κατασκευής σωρού κσ

for i=n to 2 do

a=L(i)

κλήση αλγορίθμου συμπλήρωσης σωρού σσ(11i-1)

L(i)=a

end for

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 18: Αλγόριθμος HeapSort

18

ΠΑΡΑΔΕΙΓΜΑ 15

Πρόβλημα Εφαρμόστε τον αλγόριθμο HeapSort για να ταξινομήσετε τη λίστα

L=[131114121516]

Απάντηση Η δομή σωρού στην οποία αντιστοιχεί η λίστα L είναι

Εφαρμόζουμε τον αλγόριθμο κατασκευής σωρού και παίρνουμε

13

11 14

12 15 16

16

15 14

12 11 13

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 19: Αλγόριθμος HeapSort

19

ΠΑΡΑΔΕΙΓΜΑ 25

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(6) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[131514121116]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

13

15 14

12 11

15

13 14

12 11

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 20: Αλγόριθμος HeapSort

20

ΠΑΡΑΔΕΙΓΜΑ 35

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(5) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111314121516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

11

13 14

12

14

13 11

12

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 21: Αλγόριθμος HeapSort

21

ΠΑΡΑΔΕΙΓΜΑ 45

13 11

12

12 11

13

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(4) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121311141516]

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(3) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[121113141516]

12

11

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 22: Αλγόριθμος HeapSort

22

ΠΑΡΑΔΕΙΓΜΑ 55

11

12

Εφαρμόζουμε τον αλγόριθμο συμπλήρωσης σωρού στο νέο δέντρο

Τοποθετώ το στοιχείο στη ρίζα στη θέση L(2) και στη ρίζα βάζω το

τελευταίο φύλλο

L=[111213141516]

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 23: Αλγόριθμος HeapSort

23

ΧΡΗΜΑΤΟΔΟΤΗΣΗ

Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του

εκπαιδευτικού έργου του διδάσκοντα

Το έργο laquoΑνοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο

Πατρώνraquo έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του

εκπαιδευτικού υλικού

Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος

laquoΕκπαίδευση και Δια Βίου Μάθησηraquo και συγχρηματοδοτείται από την

Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς

πόρους

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 24: Αλγόριθμος HeapSort

24

ΣΗΜΕΙΩΜΑ ΙΣΤΟΥΡΙΚΟΥ ΕΚΔΟΣΕΩΝ ΕΡΓΟΥ

Το παρόν έργο αποτελεί την έκδοση 10

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 25: Αλγόριθμος HeapSort

25

ΣΗΜΕΙΩΜΑ ΑΝΑΦΟΡΑΣ

Copyright Πανεπιστήμιο Πατρών Δημήτριος Κουκόπουλος laquoΣχεδίαση και

Ανάλυση Αλγορίθμων ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ndash ΑΛΓΟΡΙΘΜΟΣ

HEAPSORTraquo Έκδοση 10 Πάτρα 2015 Διαθέσιμο από τη δικτυακή

διεύθυνση httpseclassupatrasgrcoursesCULTURE109

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 26: Αλγόριθμος HeapSort

26

ΣΗΜΕΙΩΜΑ ΑΔΕΙΟΔΟΤΗΣΗΣ

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons

Αναφορά Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη

Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες

διαγράμματα κλπ τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί

με τους όρους χρήσης τους στο laquoΣημείωμα Χρήσης Έργων Τρίτωνraquo

[1] httpcreativecommonsorglicensesby-nc-sa40 Ως Μη Εμπορική ορίζεται η χρήση bull που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του

έργου για το διανομέα του έργου και αδειοδόχο bull που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή

πρόσβαση στο έργο bull που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό

όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση εφόσον αυτό του ζητηθεί

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους

Page 27: Αλγόριθμος HeapSort

27

ΔΙΑΤΗΡΗΣΗ ΣΗΜΕΙΩΜΑΤΩΝ

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να

συμπεριλαμβάνει

το Σημείωμα Αναφοράς

το Σημείωμα Αδειοδότησης

τη δήλωση Διατήρησης Σημειωμάτων

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει)

μαζί με τους συνοδευόμενους υπερσυνδέσμους