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



Σχετικά έγγραφα
Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

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

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

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

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

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

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

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

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

Αλγόριθμοι και πολυπλοκότητα Bucket-Sort και Radix-Sort

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

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

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

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

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

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

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

Π.Μ.. ΣΜΖΜΑΣΟ ΠΛΖΡΟΦΟΡΗΚΖ ΓΗΠΛΧΜΑΣΗΚΖ ΔΡΓΑΗΑ. Υπνινγηζηηθή ζύγθξηζε ησλ αιγνξίζκσλ Heap Sort θαη Weak Heap Sort. Βαζηιεία Φνξκόδε Α.Μ.

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

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

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

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

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

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

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

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

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

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

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

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

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

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

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

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

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

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

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

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

Εισαγωγή στους Αλγόριθμους. Παύλος Εφραιμίδης, Λέκτορας

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

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

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

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Δομημένος Προγραμματισμός

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Heapsort Using Multiple Heaps

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

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

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

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

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος

Δομημένος Προγραμματισμός (ΤΛ1006)

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

ΗΥ-150. Ταξινόµηση και Αναζήτηση

Προγραμματισμός Ι (ΗΥ120)

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

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Ηλεκτρονικοί Υπολογιστές

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

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

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

10-δικό δικό

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

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

Κεφ.11: Ευρετήρια και Κατακερματισμός

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

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

Transcript:

Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 22 Counting sort, bucket sort και radix sort 1 / 16

Ιδιότητες αλγορίθμων ταξινόμησης ευστάθεια (stable sort): Ένας αλγόριθμος ταξινόμησης είναι stable όταν η σχετική διάταξη στοιχείων με την ίδια τιμή κλειδιού δεν αλλάζει κατά την ταξινόμηση (πχ INSERTION SORT, BUBBLE SORT, MERGE SORT, QUICK SORT) επί τόπου (in-place, in-situ): Ένας αλγόριθμος ταξινόμησης είναι in-place όταν δεν χρησιμοποιεί επιπλέον βοηθητικό χώρο για την ταξινόμηση (πχ INSERTION SORT, SELECTION SORT, BUBBLE SORT) προσαρμοστικότητα (adaptive): Ένας αλγόριθμος ταξινόμησης είναι adaptive όταν εκμεταλλεύεται το γεγονός ότι τμήματα της ακολουθίας εισόδου είναι ήδη ταξινομημένα και ολοκληρώνει την ταξινόμηση της ακολουθίας ταχύτερα (πχ INSERTION SORT, SELECTION SORT, BUBBLE SORT) Οποιοσδήποτε αλγόριθμος ταξινόμησης μπορεί να γίνει stable προσθέτοντας το δείκτη της θέσης του στην αρχή του κλειδιού 2 / 16

Λεξικογραφική σειρά Η λεξικογραφική σειρά ονομάζεται και διάταξη λεξικού καθώς στη περίπτωση των αλφαριθμητικών πρόκειται για τη σειρά με την οποία εμφανίζονται οι λέξεις σε ένα λεξικό (πχ Μηχανή < Μηχανικός καθώς η < ι στην αλφαβητική σειρά των γραμμάτων) Η λεξικογραφική σειρά μπορεί να εφαρμοστεί εκτός από τα αλφαριθμητικά γενικότερα σε πλειάδες τιμών (tuples) Για παράδειγμα οι 2 πλειάδες (a1, a2, a3, an) και (b1, b2, b3,, bn) μπορούν να συγκριθούν λεξικογραφικά ως εξής: πρώτα θα συγκριθούν τα στοιχεία που είναι στη θέση 1 (a1 και b1) και αν αυτά είναι ίσα θα συγκριθούν τα στοιχεία στη θέση 2 (a2 και b2) κοκ Η σύγκριση αλφαριθμητικών γίνεται αυτόματα χωρίς την παρέμβαση του προγραμματιστή καθώς οι γλώσσες προγραμματισμού είναι σε θέση να συγκρίνουν απευθείας αλφαριθμητικές τιμές Για παράδειγμα στη C++ η συνάρτηση σύγκρισης αλφαριθμητικών είναι η: int strcmp ( const char * str1, const char * str2 ); η οποία δέχεται 2 αλφαριθμητικά ως παραμέτρους και επιστρέφει αρνητική τιμή όταν το str1 είναι λεξικογραφικά μικρότερο από το str2, μηδέν όταν είναι ίδια και θετική τιμή όταν το str2 είναι λεξικογραφικά μεγαλύτερο του str1 3 / 16

Όριο απόδοσης για αλγορίθμους ταξινόμησης με σύγκριση στοιχείων Οι αλγόριθμοι που στηρίζονται σε σύγκριση στοιχείων όπως οι QuickSort, MergeSort, HeapSort, InsertionSort κα έχουν ως όριο απόδοσης O(n log n) Ωστόσο, αν τα δεδομένα έχουν κάποια ιδιαίτερα χαρακτηριστικά τότε η ταξινόμηση μπορεί να γίνει ταχύτερα Για παράδειγμα, η ταξινόμηση n ακεραίων τιμών που κυμαίνονται σε εύρος τιμών [0, k) με k πολύ μικρότερο του n μπορεί να γίνει σε χρόνο O(n) με τον αλγόριθμο Counting Sort 4 / 16

Δένδρο απόφασης ως μοντέλο για την αναπαράσταση αλγορίθμων ταξινόμησης με συγκρίσεις στοιχείων Δυαδικό δένδρο απόφασης για την ταξινόμηση 3 στοιχείων με την INSERTION SORT A Levitin Introduction to the Design and Analysis of Algorithms 2nd ed (Pearson) 5 / 16

Η ρίζα του δένδρου αντιστοιχεί στην αρχική κατάσταση των δεδομένων (δηλαδή μη ταξινομημένα δεδομένα) ενώ στα φύλλα του δένδρου υπάρχουν οι καταστάσεις που αντιστοιχούν στην ταξινομημένη ακολουθία Κάθε κόμβος του δένδρου αναπαριστά μια κατάσταση στην οποία βρίσκονται τα δεδομέναγια κάθε κόμβο που δεν είναι φύλλο μπορούν να ληφθούν 2 αποφάσεις που θα οδηγήσουν σε 2 νέους κόμβους Ο χρόνος χειρότερης περίπτωσης ενός αλγορίθμου ταξινόμησης που αναπαρίσταται με ένα δυαδικό δένδρο απόφασης αντιστοιχεί στο ύψος του δένδρου Ένας αλγόριθμος ταξινόμησης δημιουργεί μια μετάθεση (αλλαγή της θέσεων) των δεδομένων εισόδου του Αν το πλήθος των δεδομένων εισόδου είναι n, ο αριθμός των πιθανών μεταθέσεων είναι n! Το δένδρο απόφασης που αντιστοιχεί στον αλγόριθμο ταξινόμησης θα πρέπει να έχει 1 φύλλο για κάθε μια από τις μεταθέσεις των n στοιχείων, άρα n! φύλλα Το ελάχιστο ύψος ενός δυαδικού δένδρου με n! φύλλα είναι log n! n log n (όπως προκύπτει από τον τύπο του Stirling) Συνεπώς η απόδοση ενός αλγορίθμου ταξινόμησης που χρησιμοποιεί συγκρίσεις στοιχείων έχει ως όριο απόδοσης το O(n log n) 6 / 16

Counting Sort Ο αλγόριθμος Counting Sort μετρά πόσες φορές παρατηρείται η κάθε διακριτή τιμή της ακολουθίας εισόδου (δημιουργεί έναν πίνακα συχνοτήτων) Στη συνέχεια, από το μικρότερο προς το μεγαλύτερο δείκτη του πίνακα συχνοτήτων καταγράφει στον αρχικό πίνακα την τιμή του δείκτη i τόσες φορές όσες η αριθμητική τιμή που περιέχεται στον πίνακα συχνοτήτων στη θέση i void count_sort( int a [], n, int k){ int i ; int *b=new int[k ]{0}; for ( i =0;i<n;i++) b[a[ i ]]++; } int j=0; for ( i=0;i<k;i++) while (b[ i ]>0){ b[ i] ; a[ j ]= i ; j++; } delete [] b; int 7 / 16

Παράδειγμα εκτέλεσης του Counting Sort Έστω ένα σύνολο τιμών που γνωρίζουμε ότι μπορεί να λάβει τιμές από 0 έως 9 και έστω ότι σε ένα συγκεκριμένο στιγμιότυπο εισόδου οι τιμές αυτές είναι: 3,2,8,3,8,0,8 8 / 16

Απόδοση του Counting Sort Ο αλγόριθμος Counting Sort προτάθηκε από τον Harold Seward το 1954 Δεν στηρίζεται σε σύγκριση αλλά σε απαρίθμηση των τιμών Έχει πολυπλοκότητα O(n + k) όπου k είναι το εύρος των διακριτών τιμών και n είναι το μέγεθος της εισόδου Για να μπορεί να εφαρμοστεί αποδοτικά θα πρέπει οι τιμές εισόδου να κυμαίνονται σε ένα γνωστό (και μικρό) εύρος τιμών και ο πίνακας συχνοτήτων των τιμών να μπορεί να υπολογιστεί γρήγορα 9 / 16

Bucket sort Ο αλγόριθμος bucket sort είναι χρήσιμος όταν τα δεδομένα είναι σχετικά ομοιόμορφα κατανεμημένα σε ένα εύρος τιμών Δημιουργεί n αριθμημένους κάδους (buckets, bins) και τοποθετεί κάθε στοιχείο σε ένα από τους κάδους ανάλογα με την τιμή του Ταξινομεί τα στοιχεία σε κάθε κάδο ξεχωριστά χρησιμοποιώντας κάποιον αλγόριθμο ταξινόμησης (πχ Insertion Sort) και στη συνέχεια συνενώνει τα περιεχόμενα των κάδων έτσι ώστε να δημιουργηθεί η τελική ταξινομημένη ακολουθία Υπάρχει και έκδοση του bucket sort που λειτουργεί αναδρομικά δηλαδή τα στοιχεία κατανέμονται αρχικά σε κάδους και σε κάθε κάδο κατανέμονται εκ νέου τα στοιχεία του σε άλλους κάδους μέχρι το μέγεθος των κάδων να γίνει μικρό Για κάθε 2 κάδους Α και Β θα πρέπει να ισχύει ότι όλα τα στοιχεία του κάδου Α είναι μικρότερα από όλα τα στοιχεία του κάδου Β ή το αντίστροφο 10 / 16

Μια απλή υλοποίηση του αλγορίθμου Bucket sort // bn = number of buckets // assume values in array are in [0,1) void bucket_sort( float arr [], int n, int bn) { vector<float> b[bn]; for ( int i = 0; i < n; i++) { int bi = bn * arr [ i ]; b[bi ] push_back(arr[i]) ; } for ( int i = 0; i < bn; i++) sort(b[ i ] begin(), b[ i ] end()); int index = 0; for ( int i = 0; i < bn; i++) for (unsigned int j = 0; j < b[ i ] size () ; j++) arr [index++] = b[ i ][ j ]; } float a[] = {0897, 0565, 0656, 01234, 0665, 03434}; bucket_sort(a, 6, 3); // 01234 03434 0565 0656 0665 0897 3 * 0897 =2691 ==> bucket 2 3 * 0565 =1695 ==> bucket 1 3 * 0656 =1968 ==> bucket 1 3 * 0123 =0370 ==> bucket 0 3 * 0665 =1995 ==> bucket 1 3 * 0343 =1030 ==> bucket 1 Προσαρμοσμένο από το http://wwwgeeksforgeeksorg/bucket-sort-2/ 11 / 16

Απόδοση του Bucket Sort Η πολυπλοκότητα του Bucket Sort είναι O(mC(n/m)) όπου n είναι το πλήθος των στοιχείων εισόδου, m είναι ο αριθμός των κάδων και C(x) είναι η πολυπλοκότητα του αλγορίθμου ταξινόμησης που θα χρησιμοποιηθεί για την ταξινόμηση των στοιχείων κάθε κάδου 12 / 16

Radix sort Η ταξινόμηση radix sort είναι ταξινόμηση ψηφίο προς ψηφίο ξεκινώντας από τα λιγότερο σημαντικά ψηφία και συνεχίζοντας προς τα περισσότερο σημαντικά Χρησιμοποιεί μια άλλη μέθοδο ταξινόμησης (η οποία θα πρέπει να είναι ευσταθής) ως υπορουτίνα Παράδειγμα ταξινόμησης radix sort Έστω η ακολουθία εισόδου: 341, 167, 43, 99, 777, 51, 92, 80, 60, 101 Ταξινόμηση με το ψηφίο των μονάδων: 80, 60, 341, 51, 101, 92, 43, 167, 777, 99 Ταξινόμηση με το ψηφίο των δεκάδων: 101, 341, 43, 51, 60, 167, 777, 80, 92, 99 Ταξινόμηση με το ψηφίο των εκατοντάδων: 43, 51, 60, 80, 92, 99, 101, 167, 341, 777 13 / 16

Μια απλή υλοποίηση του αλγορίθμου Radix Sort void count_sort_digit_by_digit ( int a [], int n, int d) { int b[10] = { 0 }; int temp[n]; for ( int i = 0; i < n; i++) b[(a[ i ] / d) % 10]++; for ( int i = 1; i < 10; i++) b[ i ] += b[i 1]; for ( int i = n 1; i >= 0; i ) { int x = (a[ i ] / d) % 10; temp[b[x] 1] = a[ i ]; b[x] ; } for ( int i = 0; i < n; i++) a[ i ] = temp[i ]; } void radix_sort( int arr [], int n, int m) { int d = 1; for ( int i = 0; i < m; i++) { count_sort_digit_by_digit (arr, n, d); d *= 10; } } int arr [] = { 170, 45, 75, 90, 802, 24, 2, 66 }; radix_sort(arr, 8, 3); // 2 24 45 66 75 90 170 802 Προσαρμοσμένο από το http://wwwgeeksforgeeksorg/radix-sort/ 170 45 75 90 802 24 2 66 170 90 802 2 24 45 75 66 802 2 24 45 66 170 75 90 2 24 45 66 75 90 170 802 14 / 16

Απόδοση του Radix Sort Η απόδοση του αλγορίθμου εξαρτάται από το πλήθος των ψηφίων που απαιτούνται για την αναπαράσταση των τιμών εισόδου Η αλγοριθμική πολυπλοκότητα του Radix Sort είναι O(kn), όπου k είναι το πλήθος των ψηφίων και n είναι το μέγεθος της εισόδου 15 / 16

Κριτήρια επιλογής αλγορίθμου ταξινόμησης Μικρό πλήθος στοιχείων Ταξινόμηση με εισαγωγή (INSERTION SORT) Σχεδόν ταξινομημένα δεδεομένα Ταξινόμηση με εισαγωγή (INSERTION SORT) Διασφάλιση καλής συμπεριφοράς για τη χειρότερη περίπτωση Ταξινόμηση σωρού (HEAP SORT) (HeapSort) Διασφάλιση καλής συμπεριφοράς κατά μέσο όρο Γρήγορη ταξινόμηση (QUICK SORT) Τα δεδομένα προέρχονται από μια πυκνή κατανομή πιθανών τιμών Ταξινόμηση κάδου (BUCKET SORT) Εύκολη και γρήγορη συγγραφή κώδικα Ταξινόμηση με εισαγωγή (INSERTION SORT) Πηγή: Algorithms in a nutshell by GTHeineman et al 16 / 16