Σχεδίαση και Ανάλυση Αλγορίθμων

Σχετικά έγγραφα
Σχεδίαση και Ανάλυση Αλγορίθμων

Σχεδίαση και Ανάλυση Αλγορίθμων

Σχεδίαση & Ανάλυση Αλγορίθμων

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ

Δομές Δεδομένων και Αλγόριθμοι

ΠΛΗ111. Ανοιξη Μάθηµα 9 ο. Ταξινόµηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Ταξινόμηση με συγχώνευση Merge Sort

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Ταξινόμηση. Σαλτογιάννη Αθανασία

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

Αλγόριθμοι ταξινόμησης

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ταξινόμηση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Αλγόριθμοι Ταξινόμησης Μέρος 2

Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II

Δομές Δεδομένων & Αλγόριθμοι

Αλγόριθμοι Ταξινόμησης Μέρος 1

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

Αλγόριθμοι Ταξινόμησης Μέρος 4

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθµοι και Πολυπλοκότητα

Heapsort Using Multiple Heaps

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

Ταξινόμηση: Εισαγωγικά. Ταξινόμηση (Sor ng) Αλγόριθμοι Απλής Ταξινόμησης. Βασικά Βήματα των Αλγορίθμων

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

Δομές Δεδομένων & Αλγόριθμοι

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Πληροφορική 2. Αλγόριθμοι

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Ουρά Προτεραιότητας: Heap

Σχεδίαση και Ανάλυση Αλγορίθμων

Αλγόριθμοι και Πολυπλοκότητα

Ταχεία Ταξινόμηση Quick-Sort

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

ιαφάνειες παρουσίασης #4

Εργαστηριακή Άσκηση 1

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

Αλγόριθµοι και Πολυπλοκότητα

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

Προχωρημένες έννοιες προγραμματισμού σε C

Επιλογή. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Ταξινόμηση. 1. Ταξινόμηση του Shell. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

Ταξινόμηση. 1. Ταξινόμηση με Μέτρημα 2. Ταξινόμηση με βάση τη Ρίζα. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Επιλογή. Επιμέλεια διαφανειών: Δ. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Ταξινόµηση. Παύλος Εφραιµίδης. οµές εδοµένων και

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Επιλογή. Πρόβλημα Επιλογής. Μέγιστο / Ελάχιστο. Εφαρμογές

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

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

Quicksort. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

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

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

Διαδικασιακός Προγραμματισμός

Σχεδίαση & Ανάλυση Αλγορίθμων

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 4: Διαίρει και Βασίλευε. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1

242 -ΕισαγωγήστουςΗ/Υ

Δομές Δεδομένων και Αλγόριθμοι

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

Επιλογή. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Πρόβληµα Επιλογής. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1

Ουρά Προτεραιότητας: Heap

Ουρά Προτεραιότητας (priority queue)

ΠΕΡΙΕΧΟΜΕΝΑ 1 ΚΕΦΑΛΑΙΟ ΟΙ ΥΠΟΛΟΓΙΣΤΕΣ ΑΠΟ ΤΗΝ ΑΡΧΑΙΟΤΗΤΑ ΜΕΧΡΙ ΣΗΜΕΡΑ Ιστορική αναδρομή Υπολογιστικές μηχανές

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη

Quicksort. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

Δομές Δεδομένων & Αλγόριθμοι

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Εισαγωγή στην Ανάλυση Αλγορίθμων

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Transcript:

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα.0 Σταύρος Δ. Νικολόπουλος 06-7 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Ταξινόμηση Selection-Sort Bubble-Sort και Insertion-Sort Quick-Sort, Merge-Sort και Heap-Sort Counting-Sort και Radix-Sort Shell-Sort

Αλγόριθμοι Ταξινόμησης Selection-Sort Bubble-Sort Insertion -Sort Quick -Sort Merge Sort Heap Sort Counting Sort Bucket-Sort Radix-Sort Shell-sort

Αλγόριθμοι Ταξινόμησης Selection-Sort Bubble-Sort Insertion -Sort Quick -Sort Merge Sort Heap Sort Counting Sort Bucket-Sort Radix-Sort Shell-sort

Ταξινόμηση Το Πρόβλημα της Ταξινόμησης Ορισμός Προβλήματος Είσοδος : ακολουθία n στοιχείων S = (α, α,..., αn). Έξοδος : αναδιάταξη (α, α,..., α n) των στοιχείων της S σε αύξουσα τάξη ( i, i n-, α i α i+). Θεμελιώδες αλγοριθμικό πρόβλημα Πολλές εφαρμογές (~0-% του υπολογιστικού χρόνου). Ταχύτατη αναζήτηση σε ταξινομημένα δεδομένα. Σημαντικές αλγοριθμικές ιδέες και τεχνικές!!!

Ταξινόμηση Το Πρόβλημα της Ταξινόμησης Ευσταθής Αλγόριθμος Ταξινόμησης Ο αλγόριθμος ταξινόμησης που διατηρεί η σχετική σειρά των στοιχείων με ίσες τιμές. Δηλαδή, ένας αλγόριθμος ταξινόμησης είναι ευσταθής εάν για οποιαδήποτε δύο στοιχεία x και y με την ίδια τιμή ισχύει ότι το x βρίσκεται πριν το y στην αρχική ακολουθία S, να ισχύει ότι το x βρίσκεται πριν το y στην ταξινομημένη ακολουθία S!!! Ευσταθής Ταξινόμηση Μη-ευσταθής Ταξινόμηση

Selection-Sort Αλγόριθμος Selection-sort Επιλογής swap Min Min (no swap) Sorted

Αλγόριθμος Selection-Sort Αλγόριθμος Selection-sort (Επιλογής) Ιδέα Αλγόριθμου!!! Quick-Select(S[,n], i) Το i-th τάξης στοιχείο της ακολουθίας S[,n] στη θέση i, i n. or Quick-Select(S[i,n], ) Το min της ακολουθίας S[i,n] στη θέση i (και το S[i] στη θέση του min). Ονομάζεται και Min-Sort (ή Max-Sort) i- i Ταξινομημένο Τμήμα n x x = min(s[i,n])

Αλγόριθμος Selection-Sort Αλγόριθμος Selection-sort (Επιλογής) Algorithm Selection-sort begin for i to n- do min τοs[i]; pos i Quick-Select(S[,n], i) Βρες min στοιχείο S[pos] for j στην i+ to n do or ακολουθία if S[j] < min then x = Min(S[i,n]) S[i,n] min S[j]; pos j και αντάλλαξέ το με το στοιχείο S[i] x Swap(S[i], S[pos]) return S i- i x Ταξινομημένο Τμήμα n x = min(s[i,n]) i- i Ταξινομημένο Τμήμα n x S[i+,n]) Ονομάζεται και Min-Sort (ή Max-Sort) Το min της ακολουθίας S[i,n] στη θέση i

Αλγόριθμος Selection-Sort Αλγόριθμος Selection-sort (Επιλογής) Algorithm Selection-sort begin for i to n- do min το S[i]; posστοιχείο i Βρες x = min στην for j υποακολουθία i+ to n do i- i n x Ταξινομημένο Τμήμα x = min(s[i,n]) if S[j] < min then S[i,n] min S[j]; pos j και αντάλλαξέ το με το στοιχείο S[i] x Swap(S[i], S[pos]) return S i- i Ταξινομημένο Τμήμα n x S[i+,n]) Ονομάζεται και Min-Sort (ή Max-Sort) Το min της ακολουθίας S[i,n] στη θέση i

Αλγόριθμος Selection-Sort Αλγόριθμος Selection-sort (Επιλογής) Algorithm Selection-sort begin for i to n- do min S[i]; pos i for j i+ to n do i- i n x Ταξινομημένο Τμήμα min j if S[j] < min then min S[j]; pos j Swap(S[i], S[pos]) return S Ορθότητα Πολυπλοκότητα Ονομάζεται και Min-Sort (ή Max-Sort) Το min της ακολουθίας S[i,n] στη θέση i

Bubble-Sort & Insertion-Sort Αλγόριθμοι Bubble-Sort & Insertion-Sort Φυσαλίδας και Παρεμβολής

Αλγόριθμος Bubble-Sort Αλγόριθμος Bubble-Sort (Φυσαλίδας) Algorithm Bubble-sort begin for i to n- do for j n downto i+ do if S[j] < S[j] S[j-] Σύγκριση καιthen S[j-] καιswap(s[j], ανταλλαγή εάνs[j-]) χρειάζεται i- i Ταξινομημένο Τμήμα i+ n x min j return S Το min της ακολουθίας S[i,n] στη θέση i

Αλγόριθμος Bubble-Sort Αλγόριθμος Bubble-Sort (Φυσαλίδας) Algorithm Bubble-sort begin for i to n- do for j n downto i+ do if S[j] < S[j-] then i- i i+ Ταξινομημένο Τμήμα n x min j Swap(S[j], S[j-]) return S Ορθότητα Πολυπλοκότητα Το min της ακολουθίας S[i,n] στη θέση i

Αλγόριθμος Insertion-Sort Αλγόριθμος Insertion-Sort (Παρεμβολής) Algorithm Insertion-sort begin for i to n do x S[i]; j Εισαγωγή i- του στοιχείου x της υποακολουθίας while j and xs[i+,n] < S[j] do S[j+] του S[j] στην σωστή θέση j j- στην υποακολουθία S[,i] S[j+] x return S Ονομάζεται και Αλγόριθμος Εισαγωγής i- Ταξινομημένο Τμήμα i n x Μη-ταξινομημένο Τμήμα

Αλγόριθμος Insertion-Sort Αλγόριθμος Insertion-Sort (Παρεμβολής) Algorithm Insertion-sort begin for i to n do x S[i]; j i- while j and x < S[j] do i- Ταξινομημένο Τμήμα Swap(x, S[j]) j j- S[j+] x return S Μια πρώτη υλοποίηση του Insertion-Sort! Ορθότητα Πολυπλοκότητα i n x Μη-ταξινομημένο Τμήμα

Αλγόριθμος Insertion-Sort Αλγόριθμος Insertion-Sort (Παρεμβολής) Algorithm Insertion-sort begin for i to n do x S[i]; j i- while j and x < S[j] do i- Ταξινομημένο Τμήμα S[j+] S[j] j j- S[j+] x return S Μια καλύτερη υλοποίηση του Insertion-Sort!!! Ορθότητα Πολυπλοκότητα i n x Μη-ταξινομημένο Τμήμα

Αλγόριθμος Insertion-Sort Αλγόριθμος Insertion-Sort (Παρεμβολής) Ορθότητα Insertion-sort Για τον αλγόριθμο Insertion-sort θεωρούμε την παρακάτω αναλλοίωτη συνθήκη επανάληψης: Algorithm Insertion-sort begin for i to n do εντολές return S Κατά την έναρξη κάθε επανάληψη του εξωτερικού βρόχου (for), η υποακολουθία με στοιχεία από την θέση έως την i, δηλ. S[,i], αποτελείται από τα ίδια στοιχεία που υπήρχαν αρχικά στην S στις θέσεις έως i, αλλά ταξινομημένα (κάθε στοιχείο είναι μεγαλύτερο από όλα τα αριστερά του). Θα αποδείξουμε ότι η παραπάνω πρόταση αποτελεί αναλλοίωτη συνθήκη επανάληψης : Αρχικοποίηση - Η υποακολουθία S[,] που αποτελείται από το πρώτο στοιχείο είναι ταξινομημένη. Διατήρηση - Κάθε επανάληψη του βρόχου επεκτείνει την υποακολουθία S[,i] διατηρώντας αναλλοίωτη την συνθήκη επανάληψης. Πράγματι, όταν το στοιχείο x εισάγεται στην S[,i] είναι μεγαλύτερο από το στοιχείο y στα αριστερά του. Δεδομένου ότι τα στοιχεία στα αριστερά του y έχουν ήδη ταξινομηθεί, συνεπάγεται ότι το x είναι μεγαλύτερο από όλα τα στοιχεία αριστερά του. Άρα, η υποακολουθία S[,i] παραμένει ταξινομημένη. Τερματισμός - Ο αλγόριθμος τερματίζει όταν το i = n, που σημαίνει ότι η ταξινομημένη υποακολουθία S[,i] έχει επεκταθεί και τώρα είναι η S[,n]. Άρα, η ακολουθία S είναι τώρα πλήρως ταξινομημένη.

Αλγόριθμος Insertion-Sort Αλγόριθμος Insertion-Sort (Παρεμβολής) Χαρακτηριστικά Αλγόριθμου Απλός (simple): Είναι απλός στην εφαρμογή του. Αποτελεσματικός (efficient): Για μικρά σύνολα δεδομένων. Αποδοτικός (efficient in practice): Πιο αποτελεσματικός στην πράξη από άλλους απλούς αλγορίθμους O(n) (selection-sort ή bubble-sort), όπου στην «καλή» περίπτωση (σχεδόν ταξινομημένα τα στοιχεία κατά την είσοδο) ο χρόνος εκτέλεσης είναι Ο(n). Σταθερός (stable): Δεν αλλάζει τη σχετική σειρά των στοιχείων που έχουν ίσα κλειδιά. Σε ίδιο χώρο (in-place): Απαιτεί μόνο μια σταθερή ποσότητα O() επιπλέον χώρο μνήμης. Άμεσος (on-line): Μπορεί να ταξινομήσει μια ακολουθία καθώς τη λαμβάνει!!!

Bubble-Sort & Insertion-Sort Συμπεριφορά Bubble-Sort & Insertion-Sort Κλάση Αλγορίθμων: Μετά από κάθε σύγκριση δύο στοιχείων: Κανένα στοιχείο δεν μετακινείται Ανταλλάσουν θέσεις Όλοι οι αλγόριθμοι ταξινόμησης που εκτελούν τέτοιες «περιορισμένες» και «τοπικές» ανταλλαγές στοιχείων συμπεριφέρονται το ίδιο με τους αλγορίθμους Bubble-Sort και Insertion-Sort

Bubble-Sort & Insertion-Sort Συμπεριφορά Bubble-Sort & Insertion-Sort Έστω μια μετάθεση A = (a, a,, an) του συνόλου Nn = {,,, n}. Ένα ζεύγος στοιχείων (ak, am) της μετάθεσης A ονομάζεται αντιστροφή (inversion) εάν για τις θέσεις τους ισχύει k < m και για τις τιμές του ak > am. k<m Το ζεύγος (3, ) είναι μια αντιστροφή ak > am

Bubble-Sort & Insertion-Sort Συμπεριφορά Bubble-Sort & Insertion-Sort Έστω μια μετάθεση A = (a, a,, an) του συνόλου Nn = {,,, n}. Ένα ζεύγος στοιχείων (ak, am) της μετάθεσης A ονομάζεται αντιστροφή (inversion) εάν για τις θέσεις τους ισχύει k < m και για τις τιμές του ak > am. αντιστροφές αντιστροφές

Bubble-Sort & Insertion-Sort Συμπεριφορά Bubble-Sort & Insertion-Sort Οποιοσδήποτε αλγόριθμος ταξινόμησης (όπως οι Bubble-Sort και Insertion-Sort) που εκτελεί «περιορισμένες» και «τοπικές» ανταλλαγές στοιχείων Με κάθε σύγκριση «διορθώνει» το πολύ μία αντιστροφή!!! Επομένως, το πλήθος των συγκρίσεων σε μια είσοδο A = (a, a,, an) είναι τουλάχιστον ίση με το πλήθος των αντιστροφών στη μετάθεση A!!! Πρόταση: Μια μετάθεση A = (a, a,, an) μήκους n έχει το πολύ πλήθος αντιστροφών.

Bubble-Sort & Insertion-Sort Συμπεριφορά Bubble-Sort & Insertion-Sort Οποιοσδήποτε αλγόριθμος ταξινόμησης (όπως οι Bubble-Sort και Insertion-Sort) που εκτελεί «περιορισμένες» και «τοπικές» ανταλλαγές στοιχείων Με κάθε σύγκριση «διορθώνει» το πολύ μία αντιστροφή!!!

Selection, Bubble-Sort & Insertion-Sort Σύγκριση Αλγορίθμων Ταξινόμησης 000 3000 000 000 Bubble-Sort Insertion-Sort 0 60 0 00

Selection, Bubble-Sort & Insertion-Sort Σύγκριση Αλγορίθμων Ταξινόμησης Bubble-Sort Selection-Sort Insertion-Sort

Αλγόριθμοι Ταξινόμησης Selection-Sort Bubble-Sort Insertion -Sort Quick -Sort Merge Sort Heap Sort Counting Sort Bucket-Sort Radix-Sort Shell-sort

Αλγόριθμοι Ταξινόμησης Αλγόριθμοι Quick-sort και Merge-sort

Αλγόριθμοι Ταξινόμησης Αλγόριθμοι Quick-sort και Merge-sort Quick-sort Διαμέριση σε μικρότερα pivot μεγαλύτερα Merge-sort Συγχώνευση ταξινομημένων ακολουθιών

Αλγόριθμος Quick-Sort Αλγόριθμος Ταξινόμησης Quick-Sort Τεχνική Διαίρει-και-Βασίλευε Δύσκολη διαίρεση - Εύκολη συνένωση Υπο-προβλήματα Διαφορετικού μήκους Χειρίστη Πολυπλοκότητα O(n) Μέση Πολυπλοκότητα O(nlogn)

Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Ιδέα Αλγόριθμου!!! Αρχικό x βήμα i-στης επανάληψης pivot Ενδιάμεσο x x < x Διάσπαση βήμα i-στης επανάληψης i sp Τελικό Εφαρμογή της διαδικασίας < x x o τμήμα sp split x βήμα i-στης επανάληψης o τμήμα

Αλγόριθμος Merge-Sort Αλγόριθμος Ταξινόμησης Merge-Sort Τεχνική Διαίρει-και-Βασίλευε Εύκολη διαίρεση Δύσκολη συνένωση Υπο-προβλήματα Ίδιου μήκους Χειρίστη Πολυπλοκότητα O(nlogn) Μέση Πολυπλοκότητα O(nlogn)

Αλγόριθμος Merge-Sort Αλγόριθμος Merge-Sort Ιδέα Αλγόριθμου!!! ιαίρεση ακολουθίας εισόδου μήκους n σε δύο υποακολουθίες μήκους n/. Ταξινόμηση των δύο υποακολουθιών (μισού μεγέθους) αναδρομικά. Συγχώνευση των δύο ταξινομημένων υποακολουθιών σε μία ταξινομημένη ακολουθία. ιαίρεσε (divide) Ταξινόμησε (conquer) Συγχώνευσε 3 (combine)

Αλγόριθμος Quick-Sort Ευστάθεια Αλγορίθμων Quick-Sort και Marge-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] Algorithm Merge-Sort(A, left, right) begin if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] pivot = S 6 splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) aux ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S i j

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] pivot = S 6 splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) aux ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S i j

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] pivot = S aux 6 splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S i j

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] pivot = S aux 6 splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S i j

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] pivot = S aux 6 splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S i j

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] pivot = S aux 6 splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S i j Μη-ευσταθής Αλγόριθμος

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] pivot = S aux 6 splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S ij Μη-ευσταθής Αλγόριθμος

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] pivot = S 6 aux splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S ij Μη-ευσταθής Αλγόριθμος

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] pivot = S 6 splitpt first split for i first+ to last do if S[i] < pivot then splitpt splitpt + x Swap(S[splitpt], S[i]) ; ; < x x x Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Μη-ευσταθής Αλγόριθμος

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) ; ; sp : splitpt Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) ; ; sp : splitpt Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Μη-ευσταθής Αλγόριθμος Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Μη-ευσταθής Αλγόριθμος Split : επί τόπου διάσπαση i

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Μη-ευσταθής Αλγόριθμος Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Quick-Sort (in-place) pivot = Algorithm Quick-Sort(S, first, last) begin () if first < last then pivot S[first] splitpt first S 6 6 split for i first+ to last do if S[i] < pivot then splitpt splitpt + Swap(S[splitpt], S[i]) ; ; Swap (S[first], S[splitpt]) () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S Μη-ευσταθής Αλγόριθμος Split : επί τόπου διάσπαση

Αλγόριθμος Quick-Sort Ευστάθεια Merge-Sort Algorithm Merge-Sort(A, left, right) begin A if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C i C 6 6 j

Αλγόριθμος Quick-Sort Ευστάθεια Merge-Sort Algorithm Merge-Sort(A, left, right) begin A if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C i C 6 6 j

Αλγόριθμος Quick-Sort Ευστάθεια Merge-Sort Algorithm Merge-Sort(A, left, right) begin A if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C 6 i C 6 j

Αλγόριθμος Quick-Sort Ευστάθεια Merge-Sort Algorithm Merge-Sort(A, left, right) begin A if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) 6 Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C C 6 i j

Αλγόριθμος Quick-Sort Ευστάθεια Merge-Sort Algorithm Merge-Sort(A, left, right) begin A if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) 6 6 Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C j i C

Αλγόριθμος Quick-Sort Ευστάθεια Merge-Sort Algorithm Merge-Sort(A, left, right) begin A if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) 6 j i C 6 Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C

Αλγόριθμος Quick-Sort Ευστάθεια Merge-Sort Algorithm Merge-Sort(A, left, right) begin A if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) 6 6 Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C j i C

Αλγόριθμος Quick-Sort Ευστάθεια Merge-Sort Algorithm Merge-Sort(A, left, right) begin A if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) 6 6 Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C j i C 6

Αλγόριθμος Quick-Sort Ευστάθεια Merge-Sort Algorithm Merge-Sort(A, left, right) begin A if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) 6 6 Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση ai στη C και i i+ else{ai > bj}προσάρτηση bj στη C και j j+ προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C j i C 6 Ευσταθής Αλγόριθμος

Αλγόριθμοι Quick-Sort & Merge-Sort Σύγκριση Αλγορίθμων Ταξινόμησης Quick-Sort Merge-Sort

Σύγκριση Αλγορίθμων Ταξινόμησης Αλγόριθμοι Quick-Sort & Merge-Sort

Αλγόριθμοι Quick-Sort & Merge-Sort Σύγκριση Αλγορίθμων Ταξινόμησης Bubble-Sort Insertion-Sort Quick-Sort

Αλγόριθμοι Quick-Sort & Merge-Sort Σύγκριση Αλγορίθμων Ταξινόμησης Selection-Sort Insertion-Sort Merge-Sort

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ιδέα Αλγόριθμου!!! Ο αλγόριθμος προτάθηκε από τον Williams το 96. Βασίζεται στην ιδιότητα του σωρού: το max (ή min) στοιχείο βρίσκεται στην ρίζα. Ο αλγόριθμος Heap-Sort εκτελείται σε δύο φάσεις: 6 () τη φάση της δημιουργίας του σωρού, και () τη φάση της επεξεργασίας του σωρού. 0 Σωρός Μεγίστων : 7 9 3

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ιδιότητες Σωρού!!! Όλοι οι τερματικοί κόμβοι (φύλλα) του σωρού βρίσκονται στο h- και h επίπεδο. Όλες οι διαδρομές από την ρίζα σε ένα τερματικό κόμβο του h είναι αριστερά όλων των διαδρομών από την ρίζα σε ένα τερματικό κόμβο του h- επιπέδου. Ο δεξιότερος εσωτερικός κόμβος του h- επιπέδου έχει αριστερό παιδί. 6 Ιδιότητα μερικής διάταξης (partial order): Η τιμή του κλειδιού ενός κόμβου είναι μεγαλύτερη ή ίση (σωρός μεγίστων) από τις τιμές των κλειδιών των παιδιών του! Σωρός Μεγίστων : 0 7 9 3

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Algorithm Heap-sort begin for i to n- do min S[i]; pos i Διάγραψε τη ρίζα (x = max) του for j i+ to n do σωρού με στοιχεία if S[j] < min then S[,i] 3 7 min S[j]; pos j και την τιμή της καταχώρησε τη στη θέση i του πίνακα Α[,n] Swap(S[i], S[pos]) return S Διαγραφή Max = 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ας θυμηθούμε Διαγραφή Max 6 0 7 9 3 Max = 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ας θυμηθούμε Διαγραφή Max 0 7 9 3 Max = 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ας θυμηθούμε Διαγραφή Max Αποκατάσταση Heap 0 7 9 3 Η τιμή του κλειδιού ενός κόμβου είναι μεγαλύτερη ή ίση (σωρός μεγίστων) από τις τιμές των κλειδιών των παιδιών του

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ας θυμηθούμε Διαγραφή Max Αποκατάσταση Heap 0 7 9 3 Η τιμή του κλειδιού ενός κόμβου είναι μεγαλύτερη ή ίση (σωρός μεγίστων) από τις τιμές των κλειδιών των παιδιών του

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ας θυμηθούμε Διαγραφή Max Αποκατάσταση Heap 0 7 9 3 Η τιμή του κλειδιού ενός κόμβου είναι μεγαλύτερη ή ίση (σωρός μεγίστων) από τις τιμές των κλειδιών των παιδιών του

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ας θυμηθούμε Διαγραφή Max Αποκατάσταση Heap 0 7 9 3 Η τιμή του κλειδιού ενός κόμβου είναι μεγαλύτερη ή ίση (σωρός μεγίστων) από τις τιμές των κλειδιών των παιδιών του

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ας θυμηθούμε Διαγραφή Max Αποκατάσταση Heap 0 7 9 3 Η τιμή του κλειδιού ενός κόμβου είναι μεγαλύτερη ή ίση (σωρός μεγίστων) από τις τιμές των κλειδιών των παιδιών του

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Ας θυμηθούμε Διαγραφή Max Αποκατάσταση Heap 0 7 9 3 Η τιμή του κλειδιού ενός κόμβου είναι μεγαλύτερη ή ίση (σωρός μεγίστων) από τις τιμές των κλειδιών των παιδιών του

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Είσοδος Αλγόριθμου 6 Σωρός Μεγίστων 0 7 9 3

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 6 0 7 9 3 Διαγραφή Max =6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 0 7 9 0 3 Αποκατάσταση Heap 7 6 9 3

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 0 7 9 3 Διαγραφή Max = 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 0 0 7 9 9 3 Αποκατάσταση Heap 7 6 3

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 3 0 9 7 3 Διαγραφή Max = 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 3 9 9 7 3 3 7 Αποκατάσταση Heap 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 9 3 7 Διαγραφή Max = 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 3 7 3 7 Αποκατάσταση Heap 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 3 7 Διαγραφή Max = 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 7 3 7 3 Αποκατάσταση Heap 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 6 7 3 7 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 7 7 3 3 7 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 7 3 3 3 3 7 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 9 7 3 3 3 3 7 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Βήμα 0 7 3 3 3 3 7 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Παράδειγμα Έξοδος Αλγόριθμου 6 Ταξινομημένη ακολουθία στοιχείων 0 7 3 9 3 7 9 0 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Διατήρηση σωρού σε πίνακα!!! Εκτός από την χρήση δεικτών (δομή δένδρο) για την αναπαράσταση ενός σωρού Ν στοιχείων, μπορούμε να χρησιμοποιήσουμε έναν πίνακα A μήκους Ν. Οι κόμβοι του σωρού αντιστοιχούν στις θέσεις του πίνακα Η: A() είναι η ρίζα, και για κάθε κόμβο στην θέση i τα παιδιά του βρίσκονται στις θέσεις i και i+. 6 O πατέρας του κόμβου i βρίσκεται στη θέση i/. A: 6 0 7 9 3 Heap μεγέθους N = 0 0 7 9 3

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Διατήρηση σωρού σε πίνακα!!! Διαγραφή Max 6 0 7 3 9 6 0 7 9 3 Heap μεγέθους N = 0

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Διατήρηση σωρού σε πίνακα!!! Διαγραφή Max 0 7 3 9 0 7 9 3 Αποκατάσταση Heap μεγέθους N- 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Διατήρηση σωρού σε πίνακα!!! Διαγραφή Max Αποκατάσταση Heap 0 7 3 9 0 7 9 3 Αποκατάσταση Heap μεγέθους N- 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Διατήρηση σωρού σε πίνακα!!! Διαγραφή Max Αποκατάσταση Heap 0 7 3 9 0 7 9 3 Αποκατάσταση Heap μεγέθους N- 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Διατήρηση σωρού σε πίνακα!!! Διαγραφή Max Αποκατάσταση Heap 0 7 3 9 0 7 9 3 Αποκατάσταση Heap μεγέθους N- 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Διατήρηση σωρού σε πίνακα!!! Διαγραφή Max Αποκατάσταση Heap 0 7 3 9 0 7 9 3 Αποκατάσταση Heap μεγέθους N- 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Διατήρηση σωρού σε πίνακα!!! Διαγραφή Max Αποκατάσταση Heap 0 7 3 9 0 7 9 3 Αποκατάσταση Heap μεγέθους N- 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Διατήρηση σωρού σε πίνακα!!! Διαγραφή Max Αποκατάσταση Heap 0 7 3 9 0 7 9 3 Αποκατάσταση Heap μεγέθους N- 6

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Algorithm Heap-sort begin Build-heap(A,n) heap-size(a) n for i heap-size(a) downto do Swap(A[], A[i]) heap-size(a)-build-heap(a, heap-size(a)) return Α A: 6 0 7 9 3 Heap μεγέθους N = 0 Τα προς ταξινόμηση στοιχεία είναι καταχωρημένα στον πίνακα Α μήκος N. Εάν κάποια στιγμή ο σωρός έχει n < N στοιχεία χρησιμοποιούμε τις n πρώτες θέσεις του πίνακα A. 6 0 7 9 3

Αλγόριθμος Heap-Sort Αλγόριθμος Heap-Sort Algorithm Heap-sort begin Build-heap(A,n) heap-size(a) n for i heap-size(a) downto do Swap(A[], A[i]) heap-size(a)-build-heap(a, heap-size(a)) return Α A: 6 0 7 9 3 Heap μεγέθους N = 0 Τα προς ταξινόμηση στοιχεία είναι καταχωρημένα στον πίνακα Α μήκος N. Εάν κάποια στιγμή ο σωρός έχει n < N στοιχεία χρησιμοποιούμε τις n πρώτες θέσεις του πίνακα A. Ορθότητα Πολυπλοκότητα

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

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

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

Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Υπολόγισε ένα ελάχιστο πλήθος Βασικών Πράξεων (συγκρίσεων) που απαιτούνται για την επίλυση του Προβλήματος SORTING Είσοδος (x, x,..., xn) Αρχικά n! περιπτώσεις: x < x < x3 <... < xn x < x < x3 <... < xn x3 < x < x <... < xn... xn < xn- <... < x Σε κάθε σύγκριση το πλήθος των περιπτώσεων υποδιπλασιάζεται (στην καλύτερη περίπτωση) Έχουμε δείξει (Ενότητα 3): Πλήθος συγκρίσεων log(n!) (n logn)/ Οποιοσδήποτε αλγόριθμος ταξινόμησης n στοιχείων χρειάζεται Ω(n logn) συγκρίσεις Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης Οποιοσδήποτε αλγόριθμος ταξινόμησης με συγκρίσεις, ταξινομεί n στοιχεία απαιτώντας τουλάχιστον n log n συγκρίσεις. x[i] <? x[j] x[b] <? x[c] x[f] <? x[g] x[h] <? x[i] x[d] <? x[e] x[j] <? x[k] Ω(n logn) x[l] <? x[m] n! Ύψος δυαδικού δένδρου με n! φύλλα Λήμμα 3. Για δεδομένο n, το δένδρο απόφασης για οποιοδήποτε αλγόριθμο ταξινόμησης με συγκρίσεις των στοιχείων του έχει ύψος τουλάχιστον n log n.

Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης Οποιοσδήποτε αλγόριθμος ταξινόμησης με συγκρίσεις, ταξινομεί n στοιχεία απαιτώντας τουλάχιστον n log n συγκρίσεις. x[i] <? x[j] x[b] <? x[c] x[f] <? x[g] x[h] <? x[i] x[d] <? x[e] x[j] <? x[k] Ω(n logn) x[l] <? x[m] n! Ύψος δυαδικού δένδρου με n! φύλλα Κάτω φράγμα ταξινόμησης:

Αλγόριθμοι Ταξινόμησης Selection-Sort Bubble-Sort Insertion -Sort Quick -Sort Merge Sort Heap Sort Counting Sort Bucket-Sort Radix-Sort Shell-sort

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Α 3 6 7 9 0 3 6 3 6 C 3 6 9 B 3 6 7 9 0 3 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Ιδέα Αλγόριθμου!!! Ο αλγόριθμος ταξινόμησης της απαρίθμησης (Counting Sort) δέχεται ότι τα n στοιχεία εισόδου (κλειδιά) είναι ακέραιοι στο διάστημα [, k], όπου k θετικός ακέραιος. Όταν k = Ο(n), ο αλγόριθμος εκτελείται σε χρόνο O(n). Βασική ιδέα: για κάθε στοιχείο x της εισόδου υπολογίζει το πλήθος των στοιχείων που είναι μικρότερα του x. Για παράδειγμα, εάν υπάρχουν 3 στοιχεία μικρότερα του x, τότε το x θα καταλάβει τη θέση στην ταξινομημένη ακολουθία.

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Ιδέα Αλγόριθμου!!! Ο αλγόριθμος ταξινόμησης της απαρίθμησης (Counting Sort) δέχεται ότι τα n στοιχεία εισόδου (κλειδιά) είναι ακέραιοι στο διάστημα [, k], όπου k θετικός ακέραιος. Όταν k = Ο(n), ο αλγόριθμος εκτελείται σε χρόνο O(n). Προσοχή!!!: Οι ακέραιοι προς ταξινόμηση είναι τα κλειδιά (keys). Α: 3 6 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Ιδέα Αλγόριθμου!!! Τα n στοιχεία εισόδου είναι καταχωρημένα στον πίνακα A[..n]. Ο αλγόριθμος απαιτεί δύο ακόμα βοηθητικούς πίνακες: B[..n] για την καταχώρηση της ταξινομημένης ακολουθίας των στοιχείων. C[..k] για την καταχώρηση βοηθητικών πληροφοριών. n Α B C k

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Αλγόριθμος Algorithm Counting-sort begin () for i to k do C[i] 0 () for i to n do C[A[i]]++ (3) for i to k do C[i] C[i] + C[i-] () for i n downto do B[C[A[i]]] A[i] C[A[i]]- return B 3 6 7 Είσοδος: Α 3 6 3 C 0 0 0 0 0 0 C 0 0 C 6 6 7 Β * * * * * * * Έξοδος: B 3 3 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Παράδειγμα Α 3 6 7 9 0 3 6 3 6 C 3 6 0 0 Μέτρηση C 3 6 0 Προθεματικά Αθροίσματα

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Παράδειγμα Α 3 6 7 9 0 3 6 3 6 Αρχικοποίηση C 3 6 0 B 3 6 7 9 0

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 0 A(0) = 6 C(6) = 0 B(0) = 6 B 3 6 7 9 0

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 0 A(0) = 6 C(6) = 0 B 3 6 7 9 0 6 B(0) = 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 9 A(0) = 6 C(6) = 0 C(6) -- B 3 6 7 9 0 6 B(0) = 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 9 A(9) = C() = B() = B 3 6 7 9 0 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 9 A(9) = C() = B 3 6 7 9 0 6 B() =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 7 9 A(9) = C() = C() -- B 3 6 7 9 0 6 B() =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα 3 Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 7 9 A() = C() = 7 B(7) = B 3 6 7 9 0 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα 3 Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 7 9 A() = C() = 7 B 3 6 7 9 0 6 B(7) =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα 3 Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 6 9 A() = C() = 7 C() -- B 3 6 7 9 0 6 B(7) =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 6 9 A(7) = C() = B() = B 3 6 7 9 0 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 6 9 A(7) = C() = B 3 6 7 9 0 6 B() =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 6 9 A(7) = C() = C() -- B 3 6 7 9 0 6 B() =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 6 9 A(6) = C() = 6 B(6) = B 3 6 7 9 0 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 6 9 A(6) = C() = 6 B 3 6 7 9 0 6 B(6) =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α 3 6 7 9 0 3 6 3 6 A(6) = C 3 6 C() = 6 9 C() -- B 3 6 7 9 0 6 B(6) =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα 6 Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 9 A() = 3 C(3) = B() = 3 B 3 6 7 9 0 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα 6 Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 3 9 A() = 3 C(3) = C(3) -- B 3 6 7 9 0 3 6 B() = 3

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα 7 Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 3 9 A() = C() = B() = B 3 6 7 9 0 3 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα 7 Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 0 3 9 A() = C() = C() -- B 3 6 7 9 0 3 6 B() =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα Παράδειγμα Α C 3 6 7 9 0 3 6 3 6 3 6 0 3 9 A(3) = C() = C() -- B 3 6 7 9 0 3 6 B() =

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα 9 Παράδειγμα Α 3 6 7 9 0 3 6 3 6 A() = 6 C 3 6 C(6) = 9 0 3 C(6) -- B 3 6 7 9 0 3 6 6 B(9) = 6

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Βήμα 0 Παράδειγμα Α 3 6 7 9 0 3 6 3 6 A() = 3 C 3 6 C(3) = 3 0 C(3) -- B 3 6 7 9 0 3 3 6 6 B(3) = 3

Αλγόριθμος Counting-Sort Αλγόριθμος Counting-Sort Παράδειγμα Α 3 6 7 9 0 3 6 3 6 A() = 3 C 3 6 C(3) = 3 0 C(3) -- B 3 6 7 9 0 3 3 6 6 B(3) = 3 Τέλος Αλγόριθμου

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Μια εφαρμογή ταξινόμησης!!! Έστω ότι θέλουμε να ταξινομήσουμε Ν άτομα ως προς την ημερομηνία γέννησής τους (έτος-μήνας-ημέρα) κατά φθίνουσα τάξη. 06 0-90 03-99 6-03 0 0-06 -6 0 0-6 06 09-7 06 0-6 90-03- Ένας απλός τρόπος με την χρήση του αλγόριθμου Counting-Sort!!! Ταξινομούμε αρχικά τα Ν άτομα ως προς το έτος γέννησής τους! Στη συνέχεια, άτομα με το ίδιο έτος γέννησης τα ταξινομούμε ως προς το μήνα γέννησης τους!! Τέλος, άτομα με το ίδιο έτος και μήνα γέννησης τα ταξινομούμε ως προς την ημέρα γέννησης τους!! Υπάρχει κάποια «δυσκολία» σε αυτό τον τρόπο?

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Μια εφαρμογή ταξινόμησης!!! Έστω ότι θέλουμε να ταξινομήσουμε Ν άτομα ως προς την ημερομηνία γέννησής τους (έτος-μήνας-ημέρα) κατά φθίνουσα τάξη. 06 0-06 0-90 03-06 -6 99 6-03 06 09-7 0 0-06 0-6 06-6 0 0-0 0-6 0 0-6 06 09-7 99 6-03 06 0-6 90 03-90-03-90-03-

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Μια εφαρμογή ταξινόμησης!!! Έστω ότι θέλουμε να ταξινομήσουμε Ν άτομα ως προς την ημερομηνία γέννησής τους (έτος-μήνας-ημέρα) κατά φθίνουσα τάξη. 06 0-06 0-06 -6 90 03-06 -6 06 09-7 99 6-03 06 09-7 06 0-0 0-06 0-6 06 0-6 06-6 0 0-0 0-0 0-6 0 0-6 0 0-6 06 09-7 99 6-03 99 6-03 06 0-6 90 03-90-03-90-03-90-03-90 03-

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Μια εφαρμογή ταξινόμησης!!! Έστω ότι θέλουμε να ταξινομήσουμε Ν άτομα ως προς την ημερομηνία γέννησής τους (έτος-μήνας-ημέρα) κατά φθίνουσα τάξη. 06 0-06 0-06 -6 06-6 90 03-06 -6 06 09-7 06 09-7 99 6-03 06 09-7 06 0-06 0-6 0 0-06 0-6 06 0-6 06 0-06 -6 0 0-0 0-0 0-6 0 0-6 0 0-6 0 0-6 0 0-06 09-7 99 6-03 99 6-03 99 6-03 06 0-6 90 03-90-03-90-03-90-03-90-03-90 03-90 03-

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Μια εφαρμογή ταξινόμησης!!! Έστω ότι θέλουμε να ταξινομήσουμε Ν άτομα ως προς την ημερομηνία γέννησής τους (έτος-μήνας-ημέρα) κατά φθίνουσα τάξη. 06 0-06 0-06 -6 06-6 06-6 90 03-06 -6 06 09-7 06 09-7 06 09-7 99 6-03 06 09-7 06 0-06 0-6 06 0-6 0 0-06 0-6 06 0-6 06 0-06 0-06 -6 0 0-0 0-0 0-6 0 0-6 0 0-6 0 0-6 0 0-6 0 0-0 0-06 09-7 99 6-03 99 6-03 99 6-03 99 6-03 06 0-6 90 03-90-03-90-03-90-0-90-03-90-03-90 03-90 03-90 03-

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Ιδέα Αλγόριθμου!!! Έστω ότι τα στοιχεία είναι ακέραιοι με k ψηφία καταχωρημένα σε ένα πίνακα A. Ο αλγόριθμος Radix-Sort εργάζεται ως εξής: Παράδειγμα : 39 7 67 39 36 70 3

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Ιδέα Αλγόριθμου!!! Έστω ότι τα στοιχεία είναι ακέραιοι με k ψηφία καταχωρημένα σε ένα πίνακα A. Ο αλγόριθμος Radix-Sort εργάζεται ως εξής: Παράδειγμα : 39 7 67 39 36 70 3

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Ιδέα Αλγόριθμου!!! Έστω ότι τα στοιχεία είναι ακέραιοι με k ψηφία καταχωρημένα σε ένα πίνακα A. Ο αλγόριθμος Radix-Sort εργάζεται ως εξής: Παράδειγμα : 39 7 67 39 36 70 3

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Ιδέα Αλγόριθμου!!! Έστω ότι τα στοιχεία είναι ακέραιοι με k ψηφία καταχωρημένα σε ένα πίνακα A. Ο αλγόριθμος Radix-Sort εργάζεται ως εξής: Παράδειγμα : 39 7 67 39 36 70 3

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Ιδέα Αλγόριθμου!!! Έστω ότι τα στοιχεία είναι ακέραιοι με k ψηφία καταχωρημένα σε ένα πίνακα A. Ο αλγόριθμος Radix-Sort εργάζεται ως εξής: Παράδειγμα : 39 7 67 39 36 70 3

Αλγόριθμος Radix-Sort Αλγόριθμος Radix-Sort Πολυπλοκότητα Παράδειγμα : 39 7 67 39 36 70 3

Αλγόριθμος Radix-Sort Σύγκριση Αλγορίθμων Ταξινόμησης Bubble-Sort Selection-Sort Insertion-Sort Merge-Sort Radix-Sort

Αλγόριθμος Bucket-Sort Αλγόριθμος Bucket-Sort

Αλγόριθμος Bucket-Sort Αλγόριθμος Bucket-Sort Ιδέα Αλγόριθμου!!! Ο αλγόριθμος της ταξινόμησης με κάδους (Bucket-Sort) δέχεται ότι τα n προς ταξινόμηση στοιχείων παράγονται από μια τυχαία διαδικασία η οποία κατανέμει τα στοιχεία ομοιόμορφα στο διάστημα [0, ). Τεχνική : Ο αλγόριθμος χωρίζει το διάστημα [0, ) σε n ίσου μήκους υποδιαστήματα, ή «κάδους» όπως συνηθίζονται να λέγονται, και κατόπιν να κατανέμει τα n στοιχεία στους κάδους. Τα στοιχεία των κάδων ταξινομούνται με την χρήση ενός αλγόριθμου ταξινόμησης. Ο αλγόριθμος εκτελείται σε χρόνο O(n)

Αλγόριθμος Bucket-Sort Αλγόριθμος Bucket-Sort Παράδειγμα: Έστω ότι θέλουμε να ταξινομήσουμε τους 3-ψήφιους ακεραίους: Πολυπλοκότητα: 39 7 67 39 36 70 3

Αλγόριθμος Shell-Sort Αλγόριθμος Shell-Sort

Αλγόριθμος Shell-Sort Αλγόριθμος Shell-Sort Ιδέα Αλγόριθμου!!! Η τεχνική του αλγόριθμου είναι ενδιαφέρουσα, ο αλγόριθμος προγραμματίζεται εύκολα και εκτελείται γρήγορα. Τεχνική : Ο αλγόριθμος ταξινομεί μια ακολουθία S με n στοιχεία με επιτυχή ταξινόμηση υποακολουθιών της ακολουθία S. Οι υποακολουθίες καθορίζονται από μια σειρά βημάτων προσαύξησης (increments): h, h, h3,, ht-, ht

Αλγόριθμος Shell-Sort Αλγόριθμος Shell-Sort Παράδειγμα h = 6 7 9 3 3 9 63 9 3 3 63 9 7 7 3 9 63 3 9

Αλγόριθμος Shell-Sort Αλγόριθμος Shell-Sort Παράδειγμα h = 7 3 9 63 3 9 3 9 9 3 63 7 3 7 3 9 63 9

Αλγόριθμος Shell-Sort Αλγόριθμος Shell-Sort Παράδειγμα h 3 = 3 3 7 3 9 63 9 9 7 9 3 3 63 7 3 3 9 9 63

Αλγόριθμος Shell-Sort Αλγόριθμος Shell-Sort Παράδειγμα h = 7 3 3 9 9 63 7 3 9 63 9 3 7 3 9 9 3 63

Αλγόριθμος Shell-Sort Αλγόριθμος Shell-Sort Παράδειγμα h = 7 3 9 9 3 63 7 3 9 9 3 63 9 9 3 63 Ταξινομημένη Ακολουθία 7 3

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

Ευχαριστώ για τη Συμμετοχή σας!!! Σταύρος Δ. Νικολόπουλος Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros