Χρήστης:Botaki/πρόχειρο

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Αφαιρέθηκαν

  • Strand sort
  • Unshuffle sort
  • Franceschini's method

Μάλλον θα βγει η Μέθοδος.

Βασικές έννοιες[Επεξεργασία | επεξεργασία κώδικα]

  • Εσωτερική (internal) λέγεται η ταξινόμηση η οποία γίνεται εξ ολοκλήρου στην κύρια μνήμη.
  • Εξωτερική (external) λέγεται η ταξινόμηση που γίνεται στη δευτερεύουσα μνήμη όπως για παράδειγμα στον σκληρό δίσκο.
  • Αντιστροφή (inversion): Έστω μία ακολουθία . Αν και , τότε λέμε ότι το ζεύγος είναι μία αντιστροφή. Για παράδειγμα η ακολουθία έχει τρεις αντιστροφές, τις , , .[1]
  • Ευστάθεια (stability): Ένας αλγόριθμος ταξινόμησης λέγεται ότι είναι ευσταθής (stable), αν τα στοιχεία με ίσες τιμές διατηρούν τη σειρά που είχαν στην αρχική ακολουθία. Φυσικά έχει νόημα να μιλάμε για ευστάθεια μόνο όταν τα στοιχεία φέρουν επιπλέον πληροφορία που δε λαμβάνει μέρος στην ταξινόμηση όπως για παράδειγμα όταν ταξινομούνται ζεύγη της μορφής (κλειδί , δεδομένα) και η ταξινόμηση γίνεται με βάση το κλειδί.
  • Προσαρμοστικότητα (adaptability): Προσαρμοστικός (adaptive) είναι ένας αλγόριθμος ταξινόμησης όταν ταξινομεί πιο γρήγορα δεδομένα τα οποία είναι μερικώς ταξινομημένα απ' ό,τι όταν αυτά έχουν τυχαία σειρά.[2] Παράδειγμα ενός προσαρμοστικού αλγορίθμου είναι η ταξινόμηση με εισαγωγή, ενώ ενός μη προσαρμοστικού η ταξινόμηση με συγχώνευση.
  • Επιτόπου (in-place) εκτέλεση: Στην πιο αυστηρή του μορφή, ένας αλγόριθμος εκτελείται επιτόπου όταν χρησιμοποιεί σταθερό μέγεθος επιπλέον μνήμης, δηλαδή ανήκει στην κλάση DSPACE(1). Κάτι τέτοιο όμως είναι αρκετά δεσμευτικό καθώς η κλάση DSPACE(1) ισοδυναμεί με τις κανονικές γλώσσες, ενώ θεωρητικά για να αποθηκευτεί σε μία μεταβλητή το μέγεθος του πίνακα, απαιτείται μνήμη. Γι' αυτό το λόγο θεωρούμε ότι οι μεταβλητές έχουν σταθερό μέγεθος και ότι ένας αλγόριθμος μπορεί να χρησιμοποιεί μνήμη, έτσι ώστε να συμπεριλαμβάνονται αλγόριθμοι όπως η γρήγορη ταξινόμηση στους αλγορίθμους που εκτελούνται επιτόπου.

Κατάλογος συγκριτικών αλγόριθμων ταξινόμησης[Επεξεργασία | επεξεργασία κώδικα]

Συγκριτικοί αλγόριθμοι ταξινόμησης
Αλγόριθμος Καλύτερη περίπτωση Μέση περίπτωση Χειρότερη περίπτωση Μνήμη Ευσταθής Μέθοδος Σημειώσεις
Γρήγορη ταξινόμηση
(Quicksort)
,
παραλλαγή του σε
Στη μέση περίπτωση , στη χειρότερη . Η παραλλαγή του Sedgewick έχει στη χειρότερη περίπτωση .[3] Συνήθως όταν εκτελείται επιτόπου (in-place) δεν είναι ευσταθής, αν και υπάρχουν ευσταθείς υλοποιήσεις. Διαμέριση Η γρήγορη ταξινόμηση γίνεται συνήθως επιτόπου (in-place) με μέγεθος στοίβας O(log n).[4][5]
Ταξινόμηση με συγχώνευση
(Merge sort)

Δες από κάτω για έναν υβριδικό με μνήμη.
Ναι Συγχώνευση Αρκετά παραλληλοποιήσιμος (έως και O(log n) χρησιμοποιώντας τον αλγόριθμο των τριών Ούγγρων[6] ή, πιο πρακτικά, με τον παράλληλο αλγόριθμο ταξινόμησης του Cole) για την επεξεργασία μεγάλου πλήθους δεδομένων.
Ταξινόμηση με
επιτόπου συγχώνευση

(In-place merge sort)

Δες από κάτω για έναν υβριδικό που τρέχει σε
Ναι Συγχώνευση Μπορεί να είναι ευσταθής με χρήση ευσταθούς επιτόπου συγχώνευσης.[7]
Block sort Ναι Εισαγωγή & Συγχώνευση Κάνει επιτόπου συγχώνευση με κομμάτια (blocks) σε O(n) [8] και υλοποιείται από κάτω προς τα πάνω.
Tαξινόμηση με σωρό
(Heapsort)

Αν όλα τα στοιχεία είναι διακριτά,
Όχι Επιλογή
Ταξινόμηση φυσαλίδας
(Bubble sort)
Ναι Ανταλλαγή Απλός στην υλοποίηση.
Ταξινόμηση με επιλογή
(Selection sort)
Όχι Επιλογή Ευσταθής όταν χρησιμοποιείται O(n) επιπλέον μνήμη ή όταν χρησιμοποιούνται συνδεδεμένες λίστες.
Ταξινόμηση με εισαγωγή
(Insertion sort)
Ναι Εισαγωγή O(n + d) για ακολουθίες με d αντιστροφές (δηλαδή ζεύγη στοιχείων που είναι αντίστροφα ταξινομημένα).
Shell sort Εξαρτάται από την ακολουθία διαστημάτων. Εξαρτάται από την ακολουθία διαστημάτων·
η καλύτερη γνωστή είναι
Όχι Εισαγωγή Απλός στην υλοποίηση, δεν χρησιμοποιεί αναδρομή, σχετικά γρήγορος και χρησιμοποιείται όταν δεν υπάρχει αρκετή διαθέσιμη μνήμη,για παράδειγμα στα ενσωματωμένα συστήματα. Υπάρχει ακολουθία διαστημάτων με χειρότερη περίπτωση O(n (log n)²), αλλά τότε η καλύτερη περίπτωση υπερβαίνει το O(n log n).
Introsort Όχι Διαμέριση & Επιλογή Χρησιμοποιεί quicksort και κάνει εναλλαγή σε ταξινόμηση με σωρό όταν το βάθος της αναδρομής γίνει μεγάλο. Χρησιμοποιείται σε πολλές υλοποιήσεις της STL.
Timsort Ναι Εισαγωγή & Διαμέριση Βασίζεται στην ταξινόμηση με συγχώνευση και στην ταξινόμηση με εισαγωγή και λαμβάνει υπόψη ήδη ταξινομημένες υποακολουθίες. Χρησιμοποιείται από την Python, Java, το Android και το GNU Octave.
Cubesort Ναι Εισαγωγή Κάνει n συγκρίσεις όταν τα δεδομένα είναι ήδη ή αντιστρόφως ταξινομημένα.
Binary tree sort Όταν χρησιμοποιείται ισοζυγισμένο δέντρο Ναι Εισαγωγή
Cycle sort Όχι Εισαγωγή Εκτελείται επιτόπου με θεωρητικά βέλτιστο αριθμό εγγραφών.
Library sort Ναι Εισαγωγή
Patience sorting Όχι Εισαγωγή & Επιλογή Βρίσκει όλες τις μέγιστες αυξανόμενες υποακολουθίες σε O(n log n).
Smoothsort Ναι Επιλογή Προσαρμοστικός, παραλλαγή της ταξινόμησης με σωρό που βασίζεται στην ακολουθία Leonardo αντί του δυαδικού σωρού.
Tournament sort [9] Όχι Επιλογή Παραλλαγή της ταξινόμησης με σωρό.
Cocktail sort Ναι Ανταλλαγή Παραλλαγή της ταξινόμησης φυσαλίδας η οποία κάνει περάσματα και από τις δύο κατευθύνσεις.
Comb sort Όχι Ανταλλαγή Παραλλαγή της ταξινόμησης φυσαλίδας η οποία είναι γρηγορότερη στην πράξη.
Gnome sort Ναι Ανταλλαγή Παρόμοιος με την ταξινόμηση με εισαγωγή. Δεν περιέχει φωλιασμένες επαναλήψεις.

Δείτε επίσης[Επεξεργασία | επεξεργασία κώδικα]

Εξωτερικοί σύνδεσμοι[Επεξεργασία | επεξεργασία κώδικα]

  1. Donald Knuth, The Art of Computer Programming, Volume 3: Sorting and Searching, Second Edition. Addison-Wesley, 1998, (ISBN 0-201-89685-0)
  2. Petersson, Ola; Alistair Moffat (1992). «A framework for adaptive sorting». Lecture Notes in Computer Science. Lecture Notes in Computer Science (Berlin: Springer Berlin / Heidelberg) 621: 422–433. doi:10.1007/3-540-55706-7_38. ISBN 978-3-540-55706-7. ISSN 1611-3349. http://www.springerlink.com/content/yv85w0u75777j021/. Ανακτήθηκε στις February 23, 2009. 
  3. Σύμφωνα με αυτήν την παραλλαγή γίνεται αναδρομή στον μικρότερο από τους δύο υποπίνακες της διαμέρισης ενώ για το δεύτερο γίνεται επαναληπτικά αφού αποτελεί tail recursion.
  4. Sedgewick, Robert (1 Σεπτεμβρίου 1998). Algorithms In C: Fundamentals, Data Structures, Sorting, Searching, Parts 1-4 (3 έκδοση). Pearson Education. ISBN 978-81-317-1291-7. Ανακτήθηκε στις 27 Νοεμβρίου 2012. 
  5. Sedgewick, R. (1978). «Implementing Quicksort programs». Comm. ACM 21 (10): 847–857. doi:10.1145/359619.359631. 
  6. Ajtai, M.; Komlós, J.; Szemerédi, E. (1983). «An O(n log n) sorting network». STOC '83, pp. 1–9. doi:10.1145/800061.808726. ISBN 0-89791-099-0. 
  7. Huang, B. C.; Langston, M. A. (December 1992). «Fast Stable Merging and Sorting in Constant Extra Space». Comput. J. 35 (6): 643–650. doi:10.1093/comjnl/35.6.643. http://comjnl.oxfordjournals.org/content/35/6/643.full.pdf. 
  8. Kim, P. S.; Kutzner, A. (2008). «Ratio Based Stable In-Place Merging». LNCS. 4978. TAMC 2008, pp. 246–257. doi:10.1007/978-3-540-79228-4_22. ISBN 978-3-540-79227-7. 
  9. http://dbs.uni-leipzig.de/skripte/ADS1/PDF4/kap4.pdf