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

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

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

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

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

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

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

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

Αλγόριθµοι Ταξινόµησης

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

Αλγόριθµοι Ταξινόµησης

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

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

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

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

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

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

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

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

p

Εργαστήριο 2: Πίνακες

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

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

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

Γηάιεμε 15: Αιγόξηζκνη Ταμηλόκεζεο

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

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

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

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα

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

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

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

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

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

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

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

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

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

Αναδρομικοί Αλγόριθμοι

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

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Διάλεξη 18: B-Δένδρα

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

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

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

Διάλεξη 04: Παραδείγματα Ανάλυσης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

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

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

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

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

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

add $t0,$zero, $zero I_LOOP: beq $t0,$s3, END add $t1, $zero,$zero J_LOOP: sub $t2, $s3, $t0 add $t2, $t2, $s1 int i, j, tmp; int *arr, n;

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

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

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

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

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

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

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

ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

1η Σειρά Γραπτών Ασκήσεων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Διάλεξη 14: Δέντρα IV - B-Δένδρα

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

Διάλεξη 24: B-Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

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

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

Προγραμματιστικές Τεχνικές

Προγραμματιστικές Τεχνικές

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

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

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

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

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

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

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Παύλος Εφραιμίδης V1.1,

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

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

Transcript:

Διάλεξη 20: Αλγόριθμοι ΤαξινόμησηςIII Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Ε. QuickSort Γρήγορη Ταξινόμηση - Έμμεση Ταξινόμηση - Εξωτερική Ταξινόμηση Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 1

Ε. Γρήγορη Ταξινόμηση (QuickSort) Η γρήγορη ταξινόμηση (QuickSort) είναι, όπως ο Mergesort, διαδικασία διαίρει και βασίλευε(divide and conquer, δηλ. αναδρομική διαδικασία όπου το πρόβλημα μοιράζεται σε μέρη τα οποία λύνονται ξεχωριστά, και μετά οι λύσεις συνδυάζονται.). Δεν χρειάζεται βοηθητικό πίνακα (όπως στην Mergesort) Πρακτικά, ο πιo γρήγορος αλγόριθμος. Στη χείριστη περίπτωση ο αλγόριθμοςquick Sortείναι Ο(n²)αλλά στην καλύτερη περίπτωση χρειάζεται Ω(nlogn): Τα περισσότερα συστήματα χρησιμοποιούν το Quick Sort(π.χ. Unix) και οι περισσότερες γλώσσες προγραμματισμού το προσφέρουν σαν μέρος των βασικών βιβλιοθηκών τους πχ. C, JAVA, C++, etc. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2

QuickSort: Αλγόριθμος Aν το δεδομένο εισόδου περιέχει 0 ή 1 στοιχεία δεν κάνουμε τίποτα. Διαφορετικά, αναδρομικά: 1. διαλέγουμε ένα στοιχείο p(ακόμα δεν ορίζουμε πιο ακριβώς), το οποίο ονομάζουμε τοάξονα(pivot)στοιχείο και το αφαιρούμε από το δεδομένο εισόδου. 2. χωρίζουμε τον πίνακα σε δύο μέρη S1και S2, όπου το S1θα περιέχει όλα τα στοιχεία του πίνακα που είναι μικρότερα από το p, και το S2θα περιέχει τα υπόλοιπα στοιχεία (όλα τα στοιχεία που είναι μεγαλύτερα ή ίσα από το p). 3. Καλούμε αναδρομικά τον αλγόριθμο στο S1, και παίρνουμε απάντηση το Τ1, και στο S2, και παίρνουμε απάντηση το Τ2. 4. Επιστρέφουμε τον πίνακα [Τ1, p, T2]. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

QuickSort: Βασική Ιδέα [72, 12, 1, 34, 3, 50, 28, 6, 5, 22, 91, 73] χωρίζουμε με pivot το 28 (μπορούσε να είναι οποιοδήποτε άλλο στοιχείο) Θέτουμε αριστερά του pivot τα μικρότερα και δεξιά τα μεγαλύτερα του < 28 >= 28 [12, 1, 3, 6, 5, 22] 28 [72,34,50,91,73] Quicksort Quicksort 1, 3, 5, 6, 12, 22 34, 50,72, 73, 91 Αποτέλεσμα: 1, 3, 5, 6, 12, 22, 28, 34, 50, 72, 73, 91 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4

QuickSort: Ψευδοκώδικας void Quicksort(int A[], int l, int r){ if (l>=r) return; int pivotindex = (l+r)/2; int pivot = A[pivotIndex]; Εδώ διαλέξαμε τον μεσαίο. Θα μπορούσαμε να είχαμε διαλέξει οποιονδήποτε άλλο // κάνουμε swap τον pivot με το τελευταίο. swap(a, pivotindex, r); /* H διαδικασία partition χωρίζει τον πίνακα Α[l r-1] έτσι ώστε Α[l..k-1] να περιέχει στοιχεία < pivot, A[k r-1] να περιέχει στοιχεία >=pivot, και επιστρέφει την τιμή k. */ int k = partition (A, l, r-1, pivot); // κάνουμε swap τον k με το τελευταίο. swap(a, k, r); } Quicksort(A, l, k-1); QuickSort(A, k+1, r); A 44 8 56 11 9 30 10 l r-1 r pivot ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

Διαδικασία Partition(A, l, r, p) Με δεδομένο εισόδου τον πίνακα Α[l r], και pivot p, θέλουμε να χωρίσουμε τον πίνακα σε δύο μέρη ως προς το p. To πιο πάνω πρέπει να επιτευχθεί χωρίςτη χρήση δεύτερου πίνακα (το sorting θα γίνει επί τόπου). Βασική Ιδέα: A 1. Επαναλαμβάνουμε τα εξής μέχρις ότου τα lκαι rνα συναντηθούν. 2. Προχώρα τοrπρος τα αριστεράόσο τα στοιχεία που βρίσκεις είναι μεγαλύτερα(ή ίσα) του p, 3. Προχώρα το l προς τα δεξιάόσο τα στοιχεία που βρίσκεις είναι μικρότερα του p, 4. αντάλλαξε τα στοιχεία που δείχνονται από τα l και r. 44 8 56 11 9 30 10 l r-1 r pivot ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6

Παράδειγμα Εκτέλεσης Partition Δεδομένο Εισόδου: index 0 1 2 3 4 5 6 7 72 6 37 48 30 42 83 75 pivot = 48, μετακίνηση του pivot στο τέλος (swap(4, 8)): 72 6 37 75 30 42 83 48 l r pivot εκτέλεση του Partition(A, l, r, 48): 72 6 37 75 30 42 83 48 l r 42 6 37 75 30 72 83 48 l r 42 6 37 30 75 72 83 48 l r 42 6 37 30 75 72 83 48 r l ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7

Ο Αλγόριθμος Quicksort στην C void quicksort(int A[], int l, int r) { int pivot, pivotindex; if (l>=r) return; // Επιλογή του κατάλληλου pivot pivotindex = (l+r)/2; pivot = A[pivotIndex]; A 44 8 56 11 9 30 10 l r-1 r pivot // Μετακίνηση του pivot στο τέλος της λίστας swap(a, pivotindex, r); /* Κλήση της συνάρτησης partition (η οποία τοποθετεί αριστερά, δεξιά τα μικρότερα και μεγαλύτερα στοιχεία αντίστοιχα. */ pivotindex = partition(a, l, r-1, pivot); // Τοποθέτηση του pivot πίσω στην αρχική του θέση if (A[r] < Α[pivotIndex]) swap(a, pivotindex, r); } quicksort(a, l, pivotindex-1); quicksort(a, pivotindex+1, r); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8

Η διαδικασία Partition στην C int partition(int A[], int l, int r, int pivot) { while(l<r) { // προχωρούμε από l στο r μέχρι να χρειαστεί ένα swap while (A[l]<pivot && l<r) // leave <pivot on left l++; // προχωρούμε από r στο l μέχρι να χρειαστεί ένα swap while (pivot<=a[r] && l<r) //leave >=pivot on right r--; } if (l == r) break; l // τώρα κάνε το swap if (A[l]>=pivot) swap(a, l, r); // move >= to the right A 44 8 56 11 9 30 10 r-1 r pivot } // επέστρεψε το σημείο στο οποίο θέλουμε να γίνει η // εισαγωγή του pivot return l; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9

Παράδειγμα Εκτέλεσης QuickSort BEFORE:[72,6,37,48,30,42,83,75] Index: 0 1 2 3 4 5 6 7 ** QuickSort [0,7] [72,6,37,48,30,42,83,75,] PivotIndex: 3(48) => Swapping 48, 75 [72,6,37,75,30,42,83,48,] Partitioning [0,6] Swapping 72, 42 [42,6,37,75,30,72,83,48,] Swapping 75, 30 [42,6,37,30,75,72,83,48,] Inserting Pivot at Position:4 Swapping 75, 48 [42,6,37,30,48,72,83,75,] ** QuickSort [0,3] [42,6,37,30,48,72,83,75,] PivotIndex: 1(6) => Swapping 6, 30 [42,30,37,6,48,72,83,75,] Partitioning [0,2] Inserting Pivot at Position:0 Swapping 42, 6 ** QuickSort [1,3] [6,30,37,42,48,72,83,75,] PivotIndex: 2(37) => Swapping 37, 42 [6,30,42,37,48,72,83,75,] Partitioning [1,2] Inserting Pivot at Position:2 Swapping 42, 37 ** QuickSort [1,1] -> RETURN ** QuickSort [3,3] -> RETURN ** QuickSort [5,7] [6,30,37,42,48,72,83,75,] PivotIndex: 6(83) => Swapping 83, 75 [6,30,37,42,48,72,75,83,] Partitioning [5,6] with pivot:83 Inserting Pivot at Position:6 ** QuickSort [5,5] -> RETURN ** QuickSort [7,7] -> RETURN AFTER:[6,30,37,42,48,72,75,83,] ** QuickSort [0,-1] -> RETURN ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10

Ανάλυση του Χρόνου Εκτέλεσης Η εύρεση του pivotαπαιτεί χρόνο Ο(1) και η διαδικασία Partition(Α, l, r, p) εκτελείται σε χρόνο O(n)σε κάθε επίπεδο της αναδρομής. Η αναδρομική εκτέλεσητου QuickSortπαίρνει στην χείριστη περίπτωση χρόνο O(n) και στην καλύτερη περίπτωση χρόνο Ω(logn) Χείριστη περίπτωση: Κάθε φορά που επιλέγουμε τον pivot όλα τα στοιχεία τυγχάνει να ταξινομούνται είτε μόνοαριστερά του (δηλαδή <pivot)ή μόνοδεξιά του (δηλαδή >=pivot) πχ 9,9,9,9,9,9,9 Συνολικός χρόνος εκτέλεσης Τ(n) O(n²). Βέλτιστη περίπτωση: Κάθε φορά που επιλέγουμε τον pivot τα μισάστοιχεία ταξινομούνται αριστερά του (δηλαδή <pivot) και τα υπόλοιπα μισά δεξιά του (δηλαδή >=pivot) πχ 1,2,3,4,5,6,7 Συνολικός χρόνος εκτέλεσης Τ(n) Ω(n log n). ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11

Έμμεση Ταξινόμηση(Indirect Sorting) Έμμεση Ταξινόμηση (Indirect Sorting) Οι αλγόριθμου που έχουμε παρουσιάσει υποθέτουν πως οι πίνακεςδεδομένα εισόδου περιέχουν ακέραιους αριθμούςκαι προϋποθέτουν μετακίνηση των στοιχείων μέσα στον πίνακα. Τι γίνεται αν θέλουμε να ταξινομήσουμε αρχείαπου περιέχουν πολύπλοκα αντικείμενα (π.χ. εγγραφές με πολλαπλές στήλες)? Σε τέτοιες περιπτώσεις η μετακίνηση (swapping) στοιχείων είναι δαπανηρή. Αυτό μπορεί να αποφευχθεί με τη χρήση δεικτών: ως δεδομένο εισόδου χρησιμοποιούμε πίνακα που περιέχει δείκτεςστα στοιχεία που θέλουμε να ταξινομήσουμε. Σύγκριση και ανταλλαγή γίνεται μεταξύ των δεικτών αντί μεταξύ των ιδίων των αντικειμένων. Έτσι έχουμε λιγότερη μετακίνηση στοιχείων. Οποιοσδήποτε από τους αλγόριθμους που αναφέραμε μπορεί να υλοποιηθεί με αυτό τον συλλογισμό χωρίς να αλλάξει ο αλγόριθμος. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 12

Εξωτερική ταξινόμηση (External Sorting) Τι γίνεται αν έχουμε 256ΜΒ RAM αλλά θέλουμε να ταξινομήσουμε ένα αρχείο με 800ΜΒ έγγραφες; Η ταξινόμηση μπορεί να γίνεται κατά τμήματα: Ένα μέρος του αρχείου μεταφέρεται στην κύρια μνήμη, ταξινομείται (με ένα από τους αλγόριθμους που συζητήσαμε) και αποθηκεύεται σε ένα προσωρινό αρχείο. Το επόμενο τμήμα μεταφέρεται στην κύρια μνήμη και ταξινομείται και μετά συγχωνεύεται με το προσωρινό αρχείο. Η διαδικασία επαναλαμβάνεται μέχρι εξάντλησης του αρχικού αρχείου. Με βάση αυτή την κύρια ιδέα υπάρχουν διάφοροι αλγόριθμοι εξωτερικής ταξινόμησης. Κύριος στόχος τους είναι η αποδοτική επεξεργασία της δευτερεύουσας μνήμης (δηλαδή του μαγνητικού δίσκου). Τέτοιοι αλγόριθμοι βρίσκουν εφαρμογές σε Βάσεις Δεδομένων ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 13