Εξωτερική Ταξινόμηση. Μ.Χατζόπουλος 1

Σχετικά έγγραφα
Εξωτερική Ταξινόμηση. Μ.Χατζόπουλος 1

Οι πράξεις της συνένωσης. Μ.Χατζόπουλος 1

Οργάνωση Βάσεων Βιοϊατρικών Δεδομένων Εξόρυξη Γνώσης Βιοϊατρικών Δεδομένων. Σεμινάριο 7: Αλγόριθμοι για επεξεργασία ερωτήσεων και βελτιστοποίηση

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

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

Τα δεδοµένα συνήθως αποθηκεύονται σε αρχεία στο δίσκο Για να επεξεργαστούµε τα δεδοµένα θα πρέπει αυτά να βρίσκονται στη

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΑΣΚΗΣΗ ΔΕΥΤΕΡΗ

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

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

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

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

Δυναμικά Πολυεπίπεδα Ευρετήρια (Β-δένδρα) Μ.Χατζόπουλος 1

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΛΥΣΗ ΣΤΗΝ ΕΥΤΕΡΗ ΑΣΚΗΣΗ

Κατακερµατισµός. Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετημένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

Ευρετήρια. Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρια 1

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κεφάλαιο 14. οµές Ευρετηρίων για Αρχεία. ιαφάνεια 14-1

Ευρετήρια. Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρια 1

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Επεξεργασία Ερωτήσεων

Επεξεργασία Ερωτήσεων

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

Κεφάλαιο 14. Δομές Ευρετηρίων για Αρχεία. Copyright 2007 Ramez Elmasri and Shamkant B. Navathe Ελληνική Έκδοση,

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

Επεξεργασία Ερωτήσεων

Copyright 2007 Ramez Elmasri and Shamkant B. Navathe, Ελληνική Έκδοση, Δίαβλος, Επιμέλεια Μ.Χατζόπουλος Διαφάνεια 14-1

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

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

Τα δεδομένα συνήθως αποθηκεύονται σε αρχεία στο δίσκο

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Επεξεργασία Ερωτήσεων

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

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

Οργάνωση Βάσεων Βιοϊατρικών Δεδομένων Εξόρυξη Γνώσης Βιοϊατρικών Δεδομένων. Σεμινάριο 6: Δομές ευρετηρίων για αρχεία

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

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

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

Οργάνωση Αρχείων. Βάσεις Δεδομένων : Οργάνωση Αρχείων 1. Blobs

Οργάνωση Αρχείων. Βάσεις Δεδομένων : Οργάνωση Αρχείων 1. Blobs

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

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

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

Το εσωτερικό ενός Σ Β

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

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

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

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

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

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

Advanced Data Indexing

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

Εισαγωγή. Γενική Εικόνα του Μαθήµατος. Το εσωτερικό ενός Σ Β. Εισαγωγή. Εισαγωγή Σ Β Σ Β. Αρχεία ευρετηρίου Κατάλογος συστήµατος Αρχεία δεδοµένων

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

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

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

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

Μεταγλωττιστές Βελτιστοποίηση

Επεξεργασία Ερωτήσεων

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

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

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

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

Ευρετήρια. Ευρετήρια. Βάσεις εδοµένων :ευρετήρια 1

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

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

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

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

Πληροφορική 2. Δομές δεδομένων και αρχείων

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

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

Βάσεις Δεδομένων 2. Φροντιστήριο Αλγόριθμοι Επεξεργασίας και Βελτιστοποίησης Επερωτήσεων. Ημερ: 27/5/2008 Ακ.Έτος

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

Βάσεις δεδομένων. (10 ο μάθημα) Ηρακλής Βαρλάμης

Τεχνολογία Πολυμέσων. Ενότητα # 9: Κωδικοποίηση εντροπίας Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

Copyright 2007 Ramez Elmasri and Shamkant B. Navathe, Ελληνική Έκδοση Διαφάνεια 16-1

Copyright 2007 Ramez Elmasri and Shamkant B. Navathe, Ελληνική Έκδοση, Δίαυλος Διαφάνεια 15-1

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

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

Άσκηση 1 (15 μονάδες) (Επεκτατός Κατακερματισμός)

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Οργάνωση Βάσεων Βιοϊατρικών Δεδομένων Εξόρυξη Γνώσης Βιοϊατρικών Δεδομένων. Σεμινάριο 7: Αλγόριθμοι για επεξεργασία ερωτήσεων και βελτιστοποίηση

Κατανεμημένα Συστήματα Ι

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

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

Advanced Data Indexing

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

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

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

Μεταγλωττιστές Βελτιστοποίηση

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

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

Πίνακες. (i) FORTRAN και Αντικειµενοστραφής Προγραµµατισµός

Transcript:

Εξωτερική Ταξινόμηση Μ.Χατζόπουλος 1

Γιατί είναι απαραίτητη; Κλασσικό Πρόβλημα της Πληροφορικής Πολλές φορές θέλουμε να παρουσιάσουμε δεδομένα σε ταξινομημένη μορφή Είναι σημαντική για την απαλοιφή διπλοτύπων Πράξεις στις βάσεις δεδομένων απαιτούν ταξινόμηση Σε πολλές οργανώσεις αρχείων αποτελεί το πρώτο βήμα στο αρχικό φόρτωμα του αρχείου. Σημαντικό πρόβλημα: τα αρχεία είναι μεγάλα και εφόσον δεν χωράνε στη μνήμη δεν μπορώ να χρησιμοποιήσω μια μέθοδο εσωτερικής ταξινόμησης Θα μπορούσα να χρησιμοποιήσω εικονική μνήμη; Μ.Χατζόπουλος Εξωτερική Ταξινόμηση 2 2

Η εξωτερική ταξινόμηση αναφέρεται σε αλγόριθμους ταξινόμησης που είναι κατάλληλοι για μεγάλα αρχεία εγγραφών αποθηκευμένα στο δίσκο που δεν μπορούν να χωρέσουν ολόκληρα στην κύρια μνήμη. Ο τυπικός αλγόριθμος εξωτερικής ταξινόμησης χρησιμοποιεί μια στρατηγική ταξινόμησης-συγχώνευσης, -, που ξεκινά με την ταξινόμηση μικρών υποαρχείων ονομάζονται σειρές (runs)-του κυρίως αρχείου και στη συνέχεια συγχώνευση των ταξινομημένων σειρών, δημιουργώντας μεγαλύτερα ταξινομημένα υποαρχεία που γίνεται με την σειρά συγχώνευση και αυτών. Μ.Χατζόπουλος 3

Εξωτερική Ταξινόμηση-Συγχώνευση Έστω Mτο μέγεθος της μνήμης (σε σελίδες). 1. Δημιουργία ταξινομημένων τμημάτων (runs). Έστω ότι αρχικά είναι i=0. Διαβάζουμε από το αρχείο τα παρακάτω μέχρι να τελειώσει: (a) Διάβασμα M blocks στη μνήμη (b) Ταξινόμηση των μπλοκ στη μνήμη (c) Γράψιμο του ταξινομημένου τμήματος (run) R i ; i++. Έστω ότι τελικά i=n 2. Συγχώνευση των runs (συνεχίζεται).. Μ.Χατζόπουλος 4

Εξωτερική Ταξινόμηση-Συγχώνευση (συν.) 2. Συγχώνευση των runs (N-τάξεως συγχώνευση). Έστω N < M. 1. Χρήση N blocks της μνήμης σαν είσοδο των runs, και 1 block σαν έξοδο. Διαβάζεται το πρώτο block από κάθε run στη σελίδα εισόδου το 2. repeat 1. Επιλογή της πρώτης εγγραφής (στη σειρά διάταξης) μεταξύ όλων των σελίδων 2. Γράψιμο στη σελίδα εξόδου. Αν γεμίσει γράψιμο στο δίσκο. 3. Διαγραφή της εγγραφής από τη σελίδα εισόδου της. Αν η σελίδα αδειάσει τότε διάβασε το επόμενο block αυτού του run (αν υπάρχει). 3. until όλες οι σελίδες εισόδου να αδειάσουν : Μ.Χατζόπουλος 5

Εξωτερική Ταξινόμηση-Συγχώνευση (συν.) Αν N M, απαιτούνται πολλά περάσματα συγχώνευσης. Σε κάθε πέρασμα, συγχωνεύονται ομάδες M - 1 runs. Κάθε πέρασμα μειώνει το πλήθος των runs κατά ένα παράγοντα M -1, και δημιουργεί μεγαλύτερα runs. Π.χ. Αν M=11, και υπάρχουν 90 runs, ένα πέρασμα μειώνει το πλήθος των runs σε 9, που το καθένα είναι 10 φορές το μέγεθος των αρχικών runs Εκτελούνται επαναλαμβανόμενα περάσματα μέχρι το πλήθος των runs να περιορισθεί σε 1. Μ.Χατζόπουλος 6

Παράδειγμα: Εξωτερικής Ταξινόμησης Μ.Χατζόπουλος 7

3,4 6,2 9,4 8,7 5,6 3,1 2 3,4 2,6 4,9 7,8 5,6 1,3 2 2,3 4,7 1,3 2 4,6 8,9 5,6 2,3 1,2 4,4 3,5 6,7 6 8,9 1,2 2,3 3,4 4,5 6,6 7,8 9 Μ.Χατζόπουλος 8

function rmerge(x, l, m, n); // (X l,.. X m ) και (X m+1, X n ) είναι ταξινομημένα (με κλειδιά τα x i ) και // η συγχώνευση παράγει στο Ζ στις θέχσεις (Ζ ι, Ζ n ) { k l; i l; j m+1; while ((i<=m) && (j<=n)) { if x i <= x j {Z k =X i ; i++} else {Z k =X j ; j++} k++ } if i>m { (Z k, Z n ) (X j, X n ) } else {(Z k, Z n ) (X j, X m ) } (X l, X n ) (Z l, Z n ) } Μ.Χατζόπουλος 9

function mpass(x, Y, n. l); // συγχωνεύει διαδοχικά υποαρχεία μεγέθους l από το αρχείο X στο // αρχείο Y. n είναι το πλήθος των εγγραφών του X { i=1; while (i<=(n-2*l+1)) do { rmerge(x, i, i+l-1, i+2*l-1, Y); i=i+2*l } if ((i+l-1)<n) {rmerge(x, i, i+l-1, n, Y) } else ({(Y i, Y n ) (X j, X n ) } } Μ.Χατζόπουλος 10

function msort(x, n) declare Y(n) {l=1; /* το μέγεθος των υποαρχείων */ while (l<n) {mpass(x,y,n, l); l=2*l; mpass(y,x,n.l); l=2*l } } Μ.Χατζόπουλος 11

Φάση Ταξινόμησης set i 1; j b; {το μέγεθος του αρχείου σε μπλοκ} k n b ; {το μέγεθος του μπαφερ σε μπλοκ} m (j/k) ; {φάση της ταξινόμησης} while (i<=m) do { διάβασε τα επόμενα k μπλοκ του αρχείου στο μπαφερ ή αν απομένουν λιγότερα από k μπλοκ διάβασε τα μπλοκ που απομένουν ταξινόμησε τις εγγραφές στο μπαφερ και να γραφούν σαν προσωρινό υποαρχείο; i i+1; } Μ.Χατζόπουλος 12

set i 1; p log k-1 m ; j m; while (i<=p) do { n 1; Φάση Συγχώνευσης q (j/(k-1)) ; {πλήθος υποαρχείων που θα γραφούν στο πέρασμα αυτό} while (n<=q) do { διάβασε τα επόμενα k-1 υποαρχεία (από το προηγούμενο πέρασμα) ένα μπλοκ τη φορά; συνένωση και γράψιμο σαν νέο υποαρχείο; n n+1; } j q; i i+1; } Μ.Χατζόπουλος 13

INPUT 1 OUTPUT INPUT 2 Μ.Χατζόπουλος 14

Εξωτερική ταξινόμηση Αν μπορούμε να έχουμε στη μνήμη περισσότερες από 2 σελίδες μπορούμε να κάνουμε κάτι καλύτερο Αν έχουμε n B σελίδες μνήμης Στο πέρασμα 0 ταξινομούμε n B σελίδες (θα δημιουργηθούν b/ n B ταξινομημένες σειρές Μετά σε κάθε πέρασμα θα γίνεται συγχώνευση n B -1 ταξινομημένων σειρών

INPUT 1 INPUT 2.. OUTPUT INPUT Β-1 Μ.Χατζόπουλος 16

Φάση Ταξινόμησης Έστω b το πλήθος των μπλοκ του αρχείου και έστω ότι μπορώ να έχω στη μνήμη n B μπλοκ. Τότε οι πρώτες ταξινομημένες σειρές που μπορώ να δημιουργήσω είναι: n R = (b/ n B ) Μ.Χατζόπουλος 17

Φάση της Συγχώνευσης Κάθε φάση της συγχώνευσης απαιτεί μια ανάγνωση και μια εγγραφή ολόκληρου του αρχείου. Επομένως το κόστος θα εξαρτάται από το πλήθος των συγχωνεύσεων. Αν γίνει συγχώνευση βαθμού dτότε το πλήθος των συγχωνεύσεων θα είναι: (log d (n R )) Και στην περίπτωση δυαδικής συγχώνευσης: (log 2 (n R )) Μ.Χατζόπουλος 18

Συνολικό κόστος Το κόστος για την δημιουργία των ταξινομημένων σειρών θα είναι: Για την συγχώνευση: 2*b 2*b* (log d (n R )) Επομένως συνολικά: 2*b+2*b* (log d (n R )) Μ.Χατζόπουλος 19

Πλήθος συγχωνεύσεων b n B =3 n B =5 n B =9 n B =17 n B =129 n B =257 100 7 4 3 2 1 1 1000 10 5 4 3 2 2 10000 13 7 5 4 2 2 100000 17 9 6 5 3 3 1000000 20 10 7 5 3 3 10000000 23 12 8 6 4 3 100000000 26 14 9 7 4 4 1000000000 30 15 10 8 5 4

Μπορώ να κάνω κάτι καλλίτερο; Από τον προηγούμενο τύπο για να έχω λιγότερες σαρώσεις του αρχείου πρέπει να συμβεί: 1)Όσο το δυνατόν μεγαλύτερο βαθμό συνένωσης. Όμως το d δεν μπορεί να ξεπεράσεις το n b -1. Ένα για την έξοδο και όλα τα υπόλοιπα για συγχώνευση. 2)Όσο το δυνατόν μικρότερο n R. Δηλαδή να φτιάξω αρχικές ταξινομημένες σειρές μεγαλύτερου μεγέθους. Μ.Χατζόπουλος 21

Μπορώ όμως να φτιάξω αρχικές ταξινομημένες σειρές με μέγεθος μεγαλύτερο από αυτό που χωράει η μνήμη; Σωρός ταξινόμησης είναι ένα πλήρες δυαδικό δένδρο με την ιδιότητα το στοιχείο της ρίζας να είναι μικρότερο από το στοιχείο της ρίζας των υποδένδρων του και κάθε υποδένδρο έχει την ιδιότητα να είναι σωρός ταξινόμησης 12 12 18 22 34 25 26 38 42 55 35 27 18 22 34 28 26 38 42 55 35 27 Αυτό είναι Αυτό δεν είναι Μ.Χατζόπουλος 22

Έστω ο πίνακας Α που έχει την ιδιότητα του σωρού ταξινόμησης από το στοιχείο i+1 μέχρι το τέλος m procedure pilesort(a, i, n) { if i<= n/2 then { j:=2*i; if j<n then {if A[j+1]<A[j] then j:=j+1} if A[i]>A[j] then {A[i] ]A[j]; pilesort(a,j,n)} } else exit } Μ.Χατζόπουλος 23

Το πιο πρόσφατο στοιχείο της εξόδου. Αν το επόμενο που θα διαβασθεί Είναι μεγαλύτερο του μπορούν να πάνε στην ίδια σειρά last ΜΠΛΟΚ ΕΞΟΔΟΥ m θέσεις μνήμης ΜΠΛΟΚ ΕΙΣΟΔΟΥ Μ.Χατζόπουλος 24

Αρχική εισαγωγή στοιχείων (δημιουργία αρχικού σωρού ταξινόμησης for i:=m downto m/2 +1 do read(in,a[i]) for i:= m/2 downto 1 do { read(in,a[i]); pilesort(a,i,m) } Μ.Χατζόπουλος 25

Κάθε φορά κατασκευάζονται δύο σειρές, η τρέχουσα και η επόμενη last:=a[1]; write(out, last); k:=m; no_of_runs:=1; while not eof(in) do{ read(in, A[1]); if A[1]>=last then pilesort(a,1,k) write(out,a[1]) } else{ if k>1 then{a[1] A[k]; } pilesort(a,1,k-1); pilesort(a, k, m); k:=k-1} else {write(out, end_of_run); no_of_runs:= no_of_runs+1; k:=m; pilesort(a, 1,k)} Μ.Χατζόπουλος 26

if k<m then { for i:=k downto 2 do{write(out, A[1]); A[1]:=A[i]; pilesort(a, 1, i-1); A[i]:=A[m-k+i]; pilesort(a, i, m-k+i-1] }; write(out, end_of_run); k:=m-k; no_of_runs:= no_of_runs+1; } else {for i:=k downto 1 do{write(out, A[1]); A[1]:=A[i]; pilesort(a, 1, i-1); } Μ.Χατζόπουλος 27

Τελευταίο 24 24 24 Έξοδος 26 28 35 32 30 40 38 42 36 38 52 37 44 42 41 12 18 49 Είσοδος Μ.Χατζόπουλος 28

Τελευταίο 26 24 26 26 Έξοδος 32 28 35 36 30 40 38 42 41 38 52 37 44 42 12 18 49 Είσοδος Μ.Χατζόπουλος 29

Τελευταίο 28 24 26 28 28 Έξοδος 32 30 35 36 37 40 38 42 41 38 52 42 44 12 18 49 Είσοδος Μ.Χατζόπουλος 30

Τελευταίο 30 24 26 28 30 30 Έξοδος 32 37 35 36 42 40 38 42 41 38 52 44 18 12 49 Είσοδος Μ.Χατζόπουλος 31

Τελευταίο 32 32 32 Έξοδος 35 37 38 36 42 40 49 42 41 38 52 44 18 12 22 27 55 29 Είσοδος Μ.Χατζόπουλος 32

Τελευταίο 35 32 35 35 Έξοδος 36 37 38 38 42 40 49 42 41 44 52 22 18 12 27 55 29 Είσοδος Μ.Χατζόπουλος 33

Τελευταίο 36 32 35 36 36 Έξοδος 38 37 42 38 42 40 49 52 41 44 27 22 18 12 55 29 Είσοδος Μ.Χατζόπουλος 34

Τελευταίο 37 32 35 36 37 37 Έξοδος 38 40 42 38 42 55 49 52 41 44 27 22 18 12 29 Είσοδος Μ.Χατζόπουλος 35

Τελευταίο 38 38 38 Έξοδος 38 40 42 41 42 55 49 52 44 29 27 22 18 12 35 45 19 27 Είσοδος Μ.Χατζόπουλος 36

Τελευταίο 38 38 38 38 Έξοδος 42 40 42 44 42 55 49 52 35 29 27 22 18 12 45 19 27 Είσοδος Μ.Χατζόπουλος 37

Τελευταίο 40 38 38 40 40 Έξοδος 42 42 42 44 45 55 49 52 35 29 27 22 18 12 19 27 Είσοδος Μ.Χατζόπουλος 38

Τελευταίο 42 38 38 40 42 42 Έξοδος 42 42 49 44 45 55 52 19 35 29 27 22 18 12 27 Είσοδος Μ.Χατζόπουλος 39

Τελευταίο 42 42 42 Έξοδος 44 42 49 52 45 55 27 19 35 29 27 22 18 12 38 68 41 32 Είσοδος Μ.Χατζόπουλος 40

Τελευταίο 42 42 42 42 Έξοδος 44 45 49 52 55 12 27 19 35 29 27 22 18 38 68 41 32 Είσοδος Μ.Χατζόπουλος 41

Τελευταίο 44 42 42 44 44 Έξοδος 49 45 68 52 55 12 27 19 35 29 27 22 18 38 41 32 Είσοδος Μ.Χατζόπουλος 42

Τελευταίο 45 42 42 44 45 45 Έξοδος 49 55 68 52 22 12 27 19 35 29 27 41 18 38 32 Είσοδος Μ.Χατζόπουλος 43

Τελευταίο 49 49 49 Έξοδος 52 55 68 29 22 12 27 19 35 32 27 41 18 38 54 8 39 Είσοδος Μ.Χατζόπουλος 44

Τελευταίο 52 49 52 52 Έξοδος 54 55 68 29 22 12 27 19 35 32 27 41 18 38 8 39 Είσοδος Μ.Χατζόπουλος 45

Τελευταίο 54 49 52 54 54 Έξοδος 68 55 8 29 22 12 27 19 35 32 27 41 18 38 39 Είσοδος Μ.Χατζόπουλος 46

Τελευταίο 55 49 52 54 55 55 Έξοδος 68 12 8 29 22 18 27 19 35 32 27 41 39 38 59 95 34 57 Είσοδος Μ.Χατζόπουλος 47

Τελευταίο 59 59 59 Έξοδος 68 12 8 29 22 18 27 19 35 32 27 41 37 38 95 34 57 Είσοδος Μ.Χατζόπουλος 48

Τελευταίο 68 59 68 68 Έξοδος 95 12 8 29 22 18 27 19 35 32 27 41 37 38 34 57 Είσοδος Μ.Χατζόπουλος 49

Τελευταίο 95 59 68 95 95 Έξοδος 8 12 19 29 22 18 27 34 35 32 27 41 37 38 57 Είσοδος Μ.Χατζόπουλος 50

Τελευταίο 95 59 68 95 8 Έξοδος 19 12 27 29 22 18 57 34 35 32 27 41 37 38 57 Είσοδος Μ.Χατζόπουλος 51

Τελευταίο 95 59 68 95 Τώρα αρχίζει νέα σειρά 8 Έξοδος 19 12 27 29 22 18 57 34 35 32 27 41 37 38 14 7 36 56 Είσοδος Μ.Χατζόπουλος 52

Τελευταίο 12 8 12 Έξοδος 19 14 27 29 22 18 57 34 35 32 27 41 37 38 7 36 56 Είσοδος Μ.Χατζόπουλος 53

Τελευταίο 14 8 12 14 Έξοδος 19 18 27 29 22 37 57 34 35 32 27 41 38 7 36 56 Είσοδος Μ.Χατζόπουλος 54

Όσο λιγότερες ταξινομημένες σειρές υπάρχουν τόσο είναι λιγότερες οι επαναλήψεις Για λιγότερες ταξινομημένες σειρές χρειαζόμαστε μεγάλες αρχικές ταξινομημένες σειρές Αποδεικνύεται ότι κατά μέσο όρο ο παραπάνω αλγόριθμος φτιάχνει αρχικές σειρές μεγέθους 2* n B Άλλες τεχνικές για ελαχιστοποίηση του Ι/Ο / χρόνου είναι η χρήση διπλού μπαφερ (που βέβαια μειώνει τον διαθέσιμο χώρο)

INPUT 1 INPUT 1 INPUT 2 INPUT 2.. INPUT K INPUT K OUTPUT OUTPUT Μ.Χατζόπουλος 56

Η ταξινόμηση αρχείων γενικά κοστίζει Παλαιό πρόβλημα των απανταχού μηχανογράφων Μια λύση η χρήση παραλληλίας Σε δοκιμές 1Μ εγγραφών μεγέθους 100 bytes Τυπικά ΣΔΒΔ 15 λεπτά 3,5 δευτερόλεπτα με 12 CPUs SGI μηχανή, 96 δίσκους, 2GB ram Νέοι τύποι δοκιμών Πόσες εγγραφές μπορώ να ταξινομήσω στη μονάδα χρόνου Πόσες εγγραφές μπορώ να ταξινομήσω με βάση το κόστος

Χρήση των Β+ δένδρων για ταξινόμηση Το αρχείο που θέλουμε να ταξινομήσουμε έχει ευρετήριο Β+ δένδρου στο πεδίο ταξινόμησης. Μπορούμε να ανακτήσουμε τις εγγραφές με σαρώνοντας στη σειρά τους κόμβους φύλλα Είναι καλή ιδέα? Θα θεωρήσουμε δύο περιπτώσεις: Το Β+ δένδρο είναι συστάδα (καλή ιδέα) Το Β+ δένδρο δεν είναι συστάδα (μπορεί να είναι πολύ κακή ιδέα)

Δομή Ευρετηρίου Καταχωρήσεις Ευρετηρίου Εγγραφές Αρχείου σε συστάδα

Δομή Ευρετηρίου Καταχωρήσεις Ευρετηρίου Εγγραφές Αρχείου δενδρικό ευρετήριο χωρίς συστάδα

Συμπεράσματα Η εξωτερική ταξινόμηση είναι πολύ σημαντική εργασία στις Βάσεις Δεδομένων. Με την μέθοδο της εξωτερικής ταξινόμησης θέλουμε να ελαχιστοποιήσουμε το I/O κόστος Η πρώτη φάση δημιουργεί ταξινομημένες σειρές (runs) μεγέθους nb Όσο μεγαλύτερο είναι το τόσο λιγότερες ταξινομημένες σειρές θα δημιουργηθούν Στην πράξη θέλουμε όσο το δυνατόν λιγότερες ταξινομηένες σειρές Μ.Χατζόπουλος 61

Συμπεράσματα (συν.) Είναι σημαντική η επιλογή του εσωτερικού αλγόριθμου ταξινόμησης quicksort :γρήγορος Heapsort: φτιάχνει ταξινομημένες σειρές διπλάσιου μεγέθους κατά μέσο όρο. Παρά τις προόδους των τελευταίων 50 ετών, ακόμη βελτιωνόμαστε Τα Β+ δένδρα αποτελούν καλή μέθοδο όταν είναι σε συστάδες. Μ.Χατζόπουλος 62