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

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

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

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

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

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

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

Δομές Δεδομένων Ενότητα 2

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

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

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

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

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

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

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

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

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

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

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

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

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

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

Επιµέλεια Θοδωρής Πιερράτος

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

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

Κάθε στοιχείο που γίνεται αντιληπτό με μία από τις πέντε αισθήσεις μας

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

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

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

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

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

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Ενδεικτικές Ερωτήσεις Θεωρίας

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

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

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

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

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

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

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

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

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

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

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ. Πίνακες και βασικές επεξεργασίες αυτών

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

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

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

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

ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΚΕΦΑΛΑΙΟ 3 ΠΡΟΣΘΗΚΗ

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

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

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

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

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

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

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο ΚΕΦΑΛΑΙΟ

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

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

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

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

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

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

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

Δομές Δεδομένων (Data Structures)

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

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

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

Πίνακες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

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

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

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

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

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

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

3 ΟΥ και 9 ΟΥ ΚΕΦΑΛΑΙΟΥ

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

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Δομές Δεδομένων Ενότητα 4

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

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

Φίλη μαθήτρια, φίλε μαθητή,

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

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

ENOTHTA 3 ΟΜΕΣ Ε ΟΜΕΝΩΝ

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

Transcript:

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Γιάννης Κουτσονίκος Επίκουρος Καθηγητής

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

Επιλογή Δομής Δεδομένων Επιλέγουμε μία δομή δεδομένων ως εξής: 1. Αναλύουμε το πρόβλημα για να καθορίσουμε τους περιορισμούς πόρων, στους οποίους πρέπει να υπόκειται μια λύση. 2. Καθορίζουμε τις βασικές λειτουργίες που πρέπει να υποστηρίζονται: Όλα τα δεδομένα εισάγονται από την αρχή ή υπάρχουν εισαγωγές που παρεμβάλλονται μεταξύ άλλων λειτουργιών; Μπορούν τα δεδομένα να διαγραφούν; Όλα τα δεδομένα υφίστανται επεξεργασία σε μια καθορισμένη σειρά ή επιτρέπεται τυχαία προσπέλαση; 3. Επιλέγουμε τη δομή (ή τις δομές) δεδομένων που ικανοποιεί (ικανοποιούν) καλύτερα αυτούς τους περιορισμούς. 3

Απόδοση Αλγορίθμων - Πολυπλοκότητα Η εκτίμηση της απόδοσης ενός αλγορίθμου στοχεύει: 1. Στην επιλογή του κατάλληλου αλγορίθμου για την επίλυση ενός προβλήματος, 2. Στη σύγκριση διαφορετικών αλγορίθμων, 3. Στον προσδιορισμό αν ένας αλγόριθμος είναι βέλτιστος ή όχι. Για την εκτίμηση της απόδοσης, το κόστος ενός αλγορίθμου υπολογίζεται με βάση π.χ. τον αριθμό συγκρίσεων, αντιμεταθέσεων ή άλλων πράξεων/λειτουργιών και όχι με βάση το χρόνο εκτέλεσης σε κάποιο υπολογιστικό σύστημα. 4

Απόδοση Αλγορίθμων - Πολυπλοκότητα Το κόστος μίας μεθόδου εκφράζεται ως συνάρτηση του μεγέθους της εισόδου και μετρά το πλήθος κάποιων βασικών λειτουργιών που εκτελούνται (π.χ. συγκρίσεις μεταξύ στοιχείων, αντιμεταθέσεις, κλπ.). Εστιάζουμε στο κόστος χειρότερης περίπτωσης (αναφέρεται και ως πολυπλοκότητα χειρότερης περίπτωσης). Παράδειγμα: έστω n το πλήθος των στοιχείων ενός μονοδιάστατου πίνακα που αποθηκεύει ακεραίους αριθμούς. Τότε, αν ο πίνακας δεν είναι ταξινομημένος, για να εντοπίσουμε το μέγιστο στοιχείο απαιτούνται στη χειρότερη περίπτωση n-1 συγκρίσεις. 5

Συμβολισμός Ο (κεφαλαίο όμικρον) Η συνάρτηση πολυπλοκότητας ενός αλγορίθμου εκφράζεται με τον συμβολισμό O, στον οποίο παραλείπονται οι σταθεροί όροι, καθώς και οι όροι μικρότερου βαθμού. Παραδείγματα Έστω ότι f(n) είναι η συνάρτηση υπολογισμού του πλήθους των πράξεων που εκτελεί κάποιος αλγόριθμος, όπου n τα στοιχεία εισόδου. Εάν f(n) = 3n 2 τότε η f(n) είναι O(n 2 ) Εάν f(n) = 13n 2 + 1000 τότε η f(n) είναι O(n 2 ) Εάν f(n) = 100n 3 + 3n 2 τότε η f(n) είναι O(n 3 ) 6

κόστος (π.χ. πλήθος συγκρίσεων) Πολυπλοκότητες Αλγορίθμων 120 100 80 n log(n) n log(n) n*n 60 40 20 0 1 2 3 4 5 6 7 8 9 10 πλήθος στοιχείων εισόδου 7

Πολυπλοκότητα Δυαδικής Αναζήτησης // Επιστροφή της θέσης του στοιχείου με τιμή x // στον ταξινομημένο πίνακα a μεγέθους n. int BinarySearch(int a[], int n, int x) { int left = 0; int right = n-1; // όρια πίνακα while (left <= right) { // σταμάτα όταν τα // όρια αναστραφούν // έλεγχος του μεσαίου στοιχείου int middle = (left + right) / 2; } // αναζήτηση στο δεξιό ή αριστερό μισό, αντίστοιχα if (x == a[middle]) return middle; // βρέθηκε if (x > a[middle]) left = middle + 1; else right = middle - 1; } return -1; // δεν βρέθηκε 8

Πολυπλοκότητα Δυαδικής Αναζήτησης Αναζήτηση του στοιχείου 45 Πόσα στοιχεία εξετάζουμε στη χειρότερη περίπτωση; Ισοδύναμο ερώτημα: Πόσες φορές μπορούμε να διαιρούμε στη μέση έναν πίνακα με n στοιχεία, έτσι ώστε ο τελικός πίνακας να έχει ένα μόνο κελί; 9

Πολυπλοκότητα Δυαδικής Αναζήτησης Έστω t το πλήθος των διαιρέσεων και χωρίς βλάβη της γενικότητας έστω ότι το πλήθος n των στοιχείων είναι δύναμη του 2. Μετά από κάθε διαίρεση το πλήθος των στοιχείων μειώνεται στο μισό, συνεπώς το πλήθος των στοιχείων θα είναι ίσο με 1, μετά από t διαιρέσεις όπου: n(1/2) t =1 => 2 t =n => t=log 2 n. Για το συγκεκριμένο παράδειγμα n=16 συνεπώς t=4. 10

Τύποι Δεδομένων Ατομικοί - με απλές τιμές (ακέραιοι, πραγματικοί, λογικοί, χαρακτήρες). Κάθε ατομικός τύπος ορίζεται από το όνομά του (π.χ. integer), το πεδίο τιμών του (π.χ. -32768 έως 32767) και τις επιτρεπόμενες πράξεις (π.χ. πρόσθεση, αφαίρεση, κλπ.). Δομημένοι - με σύνθετες τιμές (πίνακες, εγγραφές, λίστες, δένδρα). Αποτελούνται από επιμέρους τιμές (στοιχεία, πεδία, κόμβοι) και διαθέτουν ένα οργανωτικό σχήμα. Οι συνηθέστερες πράξεις - λειτουργίες σε δομές δεδομένων είναι: η διαπέραση (προσπέλαση και επεξεργασία στοιχείου/κόμβου), η αναζήτηση (εύρεση στοιχείου/κόμβου με κάποια τιμή), η εισαγωγή (πρόσθεση ενός νέου στοιχείου/κόμβου), η διαγραφή (αφαίρεση υπάρχοντος στοιχείου/κόμβου) και η ταξινόμηση (διάταξη στοιχείου/κόμβου με κάποια σειρά). 11

Πίνακες Μία ή περισσότερες διαστάσεις Κάθε διάσταση έχει όρια (π.χ. 0 έως 9). Κάθε στοιχείο χαρακτηρίζεται από τη θέση του στον πίνακα, που αποτελείται από τόσες τιμές όσες και οι διαστάσεις. Ομοειδή στοιχεία Όλα συγκεκριμένου τύπου (ακέραιοι, εγγραφές, κλπ.). Στατική δομή Πρέπει να δηλωθεί εξ αρχής το μέγεθος του πίνακα. Γραμμική δομή Υπάρχει «λογική» διάταξη των στοιχείων, δηλαδή κάθε στοιχείο έχει ένα επόμενο (πλην του τελευταίου) και ένα προηγούμενο (πλην του πρώτου). Αποθήκευση στοιχείων σε συνεχόμενες θέσεις Τυχαία προσπέλαση (χρόνος ανεξάρτητος της θέσης). Είναι οι βασικότερες δομές όπου στηρίζονται πιο πολύπλοκοι αλγόριθμοι και δομές δεδομένων. 12

Πίνακες Βασικό χαρακτηριστικό των πινάκων: Τα στοιχεία είναι αποθηκευμένα στη μνήμη σε συνεχόμενες θέσεις, με αποτέλεσμα να μπορούμε να υποστηρίξουμε τυχαία προσπέλαση σε οποιοδήποτε στοιχείο του πίνακα. Συνάρτηση Απεικόνισης Πίνακα (ΣΑΠ): μας δίνει τη θέση ενός στοιχείου του πίνακα στη μνήμη, με βάση τη θέση του, τον τύπο των στοιχείων του πίνακα και τη διεύθυνση του πρώτου στοιχείου. Αν η διεύθυνση του πρώτου στοιχείου είναι η L 0 και κάθε στοιχείο καταλαμβάνει (βάσει του τύπου των στοιχείων) c bytes, τότε: Θέση του στοιχείου a[i] σε μονοδιάστατο πίνακα a, N στοιχείων: L i = L 0 + i*c (στη γλώσσα C, το πρώτο στοιχείο είναι στη θέση 0) Θέση του στοιχείου b[i][j] σε δισδιάστατο πίνακα b, M x N στοιχείων που είναι αποθηκευμένα κατά γραμμές: L ij = L 0 + i*n*c + j*c (στη γλώσσα C, το πρώτο στοιχείο είναι στη θέση 0,0) 13

πίνακας μίας διάστασης με ακεραίους Πίνακες 1 2 5 2 3 6 9 8 πίνακας μίας διάστασης με εγγραφές 1 Mary 25 2 John 21 3 Kate 30 4 Bill 44 5 Jack 31 6 Jason 50 πίνακας δύο διαστάσεων (3 x 5) με ακεραίους 5 4 6 7 5 4 4 2 2 1 5 6 1 1 2 14

Συνδεδεμένες Λίστες Ομοειδή στοιχεία Αποτελούνται από 2 μέρη: πληροφορία και δείκτη. Η πληροφορία μπορεί να είναι ατομική ή ομαδική (εγγραφή). Δυναμική δομή Μπορούμε να προσθαφαιρούμε στοιχεία χωρίς πρόβλημα. Γραμμική δομή Υπάρχει «λογική» διάταξη των στοιχείων, δηλαδή κάθε στοιχείο έχει ένα επόμενο (πλην του τελευταίου) και ένα προηγούμενο (πλην του πρώτου). Αποθήκευση στοιχείων σε διάσπαρτες θέσεις Σειριακή προσπέλαση (ξεκινάμε πάντα από την αρχή και μετακινούμαστε μέσω των δεικτών στον επόμενο κόμβο). Διαγραφή στοιχείου με αλλαγή τιμής ενός δείκτη 15

Συνδεδεμένη λίστα με ακεραίους Συνδεδεμένες Λίστες 1 2 5 2 3 6 9 8 first Κάθε κόμβος έχει ένα δείκτη next στον επόμενο κόμβο last Διπλά συνδεδεμένη λίστα με εγγραφές (σε αύξουσα σειρά ονομάτων) 1 Bill 25 2 Jack 21 3 Jason 30 4 John 44 5 Kate 31 6 Mary 50 first Κάθε κόμβος έχει ένα δείκτη next στον επόμενο κόμβο και ένα δείκτη previous στον προηγούμενο κόμβο last 16

Συνδεδεμένες Λίστες Παράδειγμα εισαγωγής στοιχείου (σε αύξουσα σειρά ονομάτων, αρχικά γνωστά x και z) 1 Bill 25 2 Jack 21 3 Jason 30 4 John 44 5 Kate 31 6 Mary 50 x y first 10 Jim 30 z last y = x->next x -> next = z z -> previous = x y -> previous = z z -> next = y 17

Στοίβα Λογική LIFO (Last-In First-Out). Υποστηρίζονται δύο βασικές λειτουργίες: εισαγωγή (push) εξαγωγή (pop) Υλοποιείται συνήθως με πίνακα (όπου η κεφαλή T αυξομειώνεται κατά 1 σε κάθε εισαγωγή ή διαγραφή), αλλά και με συνδεδεμένη λίστα. Χρησιμοποιείται όταν θέλουμε να επεξεργαστούμε κάποια στοιχεία με αντίστροφη σειρά από αυτή που τα εισάγουμε (π.χ. στη μετατροπή δεκαδικού σε δυαδικό, όπου κάνουμε διαιρέσεις και παίρνουμε τα υπόλοιπα από το τέλος προς την αρχή). 18

Στοίβα Παράδειγμα 7 10 5 10 5 5 push(5) push(10) push(7) pop() pop() 19

Βασικές Εφαρμογές Στοίβας κλήση υποπρογραμμάτων αναπαράσταση και εκτίμηση αριθμητικών εκφράσεων οπισθοδρόμηση (backtracking) 20

Ουρά Λογική FIFO (First-In First-Out) Υποστηρίζονται δύο βασικές λειτουργίες: εισαγωγή στο τέλος (insert) διαγραφή από την αρχή (delete). Υλοποιείται συνήθως με πίνακα, όπου υπάρχει μετρητής - δείκτης της θέσης εξαγωγής (first ή front) και μετρητής - δείκτης της θέσης εισαγωγής (last ή rear), αλλά και με συνδεδεμένη λίστα σε περίπτωση που δεν θέλουμε να περιορίσουμε το πλήθος των στοιχείων που θα εισαχθούν στη δομή. 21

Βασικές Εφαρμογές Oυράς διαχείριση πόρων σε λειτουργικά συστήματα και δίκτυα επεξεργασία αιτήσεων πελατών, εργασιών, και παραγγελιών σε εμπορικές εφαρμογές προσομοίωση συστημάτων 22

Δένδρα Αποτελούνται από κόμβους και ακμές που τους συνδέουν. Κάθε κόμβος έχει παιδιά (πλην των φύλλων) και ένα μόνο γονέα (πλην της ρίζας). Ορολογία Διαδρομή (path) από ένα κόμβο Ν x σε ένα άλλο κόμβο Ν y είναι μια ακολουθία κόμβων όπου πρώτος είναι ο Ν x, τελευταίος ο Ν y και κάθε άλλος κόμβος είναι παιδί του προηγουμένου. Μήκος (length) μιας διαδρομής είναι ο αριθμός των ακμών που περιλαμβάνονται σ αυτήν. Επίπεδο (level) ή βάθος (depth) ενός κόμβου είναι το μήκος της μοναδικής διαδρομής από τη ρίζα στον κόμβο αυτό. Ύψος (height) ενός δένδρου είναι το μέγιστο βάθος των (τερματικών) κόμβων του. Βαθμός (degree) ενός κόμβου είναι ο αριθμός των παιδιών του. Βαθμός ενός δένδρου είναι ο μέγιστος των βαθμών των κόμβων του. 23

Δυαδικά Δένδρα Δυαδικά δένδρα: έχουν βαθμό 2. Σε κάθε κόμβο: Αριστερό υποδένδρο - δεξιό υποδένδρο Πλήρες δυαδικό δένδρο: έχει το μέγιστο αριθμό κόμβων σε κάθε επίπεδο πλην ίσως του τελευταίου (αν στο τελευταίο δεν έχει το μέγιστο αριθμό κόμβων, οι κόμβοι πρέπει να είναι όσο το δυνατό αριστερά). Αναπαράσταση Συνεχόμενη αναπαράσταση (με πίνακα) Η ρίζα μπαίνει στη θέση 0. Αν ένας κόμβος είναι στη θέση k, το αριστερό παιδί του θα είναι στη θέση 2*k+1 και το δεξιό παιδί του θα είναι στη θέση 2*k+2. Συνδεδεμένη αναπαράσταση (η πιο συνήθης μορφή) Χρήση 2 δεικτών (left, right) 24

Δυαδικά Δένδρα Δομή ενός κόμβου σε συνδεδεμένη αναπαράσταση Δεδομένα Left Right Ρίζα αριστερού υποδένδρου Ρίζα δεξιού υποδένδρου αριστερό υποδένδρο Δεξιό υποδένδρο 25

Διαπεράσεις Δυαδικών Δένδρων Κάθε διαδικασία επίσκεψης όλων των κόμβων ενός δένδρου, ακριβώς μία φορά τον καθένα, λέγεται διαπέραση ή διάσχιση (traversal). Προδιατεταγμένη διαπέραση (pre-order): Για κάθε κόμβο, επισκεπτόμαστε πρώτα τον ίδιο τον κόμβο, έπειτα τους κόμβους του αριστερού του υποδένδρου και στη συνέχεια τους κόμβους του δεξιού του υποδένδρου. Μεταδιατεταγμένη διαπέραση (post-order): Για κάθε κόμβο, επισκεπτόμαστε πρώτα τους κόμβους του αριστερού του υποδένδρου, έπειτα τους κόμβους του δεξιού του υποδένδρου και στη συνέχεια τον ίδιο τον κόμβο. Ενδοδιατεταγμένη διαπέραση (in-order): Για κάθε κόμβο, επισκεπτόμαστε πρώτα τους κόμβους του αριστερού του υποδένδρου, έπειτα τον ίδιο τον κόμβο και στη συνέχεια τους κόμβους του δεξιού του υποδένδρου. 26

Διαπεράσεις Δυαδικών Δένδρων Προδιατεταγμένη (ΡΑΔ): x, b, w, c, e, g, f, h, z Μεταδιατεταγμένη (ΑΔΡ): w, b, g, e, h, z, f, c, x Ενδοδιατεταγμένη (ΑΡΔ): b, w, x, g, e, c, h, f, z b x c w e f g h z 27

Ειδικά Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης Το αριστερό υποδένδρο κάθε κόμβου έχει τιμές μικρότερες από την τιμή του κόμβου. Το δεξιό υποδένδρο κάθε κόμβου έχει τιμές μεγαλύτερες από την τιμή του κόμβου. Χρησιμοποιούνται στην αναζήτηση στοιχείων, όπου ενδέχεται να βελτιώσουν σημαντικά το χρόνο (αντίστοιχα με τη δυαδική αναζήτηση σε ταξινομημένο πίνακα). Η δυαδική αναζήτηση σε ταξινομημένο πίνακα παίρνει Ο(log n) χρόνο και αυτό επιτυγχάνεται και στα ισοζυγισμένα δυαδικά δένδρα αναζήτησης. Με ενδοδιατεταγμένη διαπέραση παίρνουμε τα στοιχεία ταξινομημένα κατά αύξουσα σειρά. Δένδρα - Σωροί Πλήρη δυαδικά δένδρα. Στο σωρό ελαχίστων, η τιμή κάθε κόμβου είναι μικρότερη από τις τιμές των παιδιών του. Στο σωρό μεγίστων, η τιμή κάθε κόμβου είναι μεγαλύτερη από τις τιμές των παιδιών του. 28

εισαγωγή στοιχείων: 8, 4, 12, 2, 6, 14, 18, 13 Δυαδικά Δένδρα Αναζήτησης 8 4 12 2 6 14 13 18 29

Παράδειγμα Αναζήτησης Αναζήτηση του στοιχείου 5 8 4 12 2 6 14 Δεν βρέθηκε 13 18 30

Δυαδικά Δένδρα Αναζήτησης Άσκηση: αναζητήστε ένα προς ένα όλα τα στοιχεία του δένδρου. Καταγράψτε το πλήθος των απαιτούμενων συγκρίσεων μεταξύ στοιχείων. στοιχείο συγκρίσεις 8 1 4 2 2 3 6 3 12 2 14 3 13 4 18 4 8 4 12 2 6 14 13 18 31

Δυαδικά Δένδρα Αναζήτησης Διαγραφές 1. Ο κόμβος που διαγράφεται δεν έχει υποδένδρα. 2. Ο κόμβος που διαγράφεται έχει μόνο ένα υποδένδρο. 3. Ο κόμβος που διαγράφεται έχει δύο υποδένδρα. 32

Δυαδικά Δένδρα Αναζήτησης Διαγραφές Οι πρώτες δύο περιπτώσεις είναι πιο εύκολες. Έστω ότι διαγράφουμε έναν κόμβο t που δεν έχει υποδένδρα (παιδιά). Τότε απλά διαγράφουμε τον κόμβο και θέτουμε το δείκτη του γονιού σε NULL. Αν ο κόμβος που διαγράφεται έχει μόνο ένα υποδένδρο (παιδί), τότε μετά τη διαγραφή του κόμβου t, τη θέση του παίρνει η ρίζα του υποδένδρου (παιδιού) του t και ενημερώνεται κατάλληλα ο δείκτης του γονιού του t. 33

Δυαδικά Δένδρα Αναζήτησης Διαγραφή του 18: ο κόμβος που περιέχει το 18 δεν έχει υποδένδρα 8 8 4 12 4 12 2 6 14 2 6 14 13 18 13 34

Δυαδικά Δένδρα Αναζήτησης Διαγραφή του 12: ο κόμβος που περιέχει το 12 έχει μόνο δεξιό υποδένδρο 8 8 4 12 4 14 2 6 14 2 6 13 13 35

Δυαδικά Δένδρα Αναζήτησης Διαγραφή κόμβου που έχει δύο υποδένδρα. Τη θέση του στοιχείου που διαγράφεται θα πάρει είτε το μεγαλύτερο στοιχείο του αριστερού υποδένδρου είτε το μικρότερο στοιχείο του δεξιού υποδένδρου. x 36

Δυαδικά Δένδρα Αναζήτησης Διαγραφή του 8 Αντικατάσταση με το μεγαλύτερο του αριστερού υποδένδρου 8 6 4 12 4 12 2 6 14 2 14 13 18 13 18 37

Δυαδικά Δένδρα Αναζήτησης Διαγραφή του 8 Αντικατάσταση με το μικρότερο του δεξιού υποδένδρου 8 12 4 12 4 2 6 14 2 6 14 13 18 12 13 18 4 14 2 6 13 18 38

Δένδρο - Σωρός Είναι ένα πλήρες δυαδικό δένδρο που υποστηρίζει τις εξής βασικές λειτουργίες: Εύρεση ελαχίστου (ή μεγίστου) σε σταθερό χρόνο. Εισαγωγή στοιχείου σε χρόνο O(logn), όπου n το πλήθος των στοιχείων του σωρού. Διαγραφή ελαχίστου (ή μεγίστου) σε χρόνο O(logn). Να συγκρίνετε τους χρόνους αυτούς με τους αντίστοιχους του ταξινομημένου πίνακα. 39

Δένδρο - Σωρός Σωρός ελαχίστων (minheap) Το δένδρο-σωρός αναπτύσσεται από επάνω προς τα κάτω και από αριστερά προς τα δεξιά. Μόνο το τελευταίο επίπεδο μπορεί να μην είναι πλήρως συμπληρωμένο. 6 9 7 Το στοιχείο ενός κόμβου είναι μικρότερο από τα στοιχεία των παιδιών του. 12 11 20 8 10 Το ελάχιστο στοιχείο βρίσκεται πάντα στη ρίζα του δένδρου. 40

Δένδρο - Σωρός Διαδικασία εισαγωγής Το νέο στοιχείο τοποθετείται σε ένα νέο κόμβο στο τέλος του σωρού. Στη συνέχεια, λαμβάνουν χώρα αντιμεταθέσεις ώστε το νέο στοιχείο να τοποθετηθεί τελικά στο σωστό επίπεδο. Το νέο στοιχείο μπορεί να φτάσει μέχρι τη ρίζα του σωρού. 41

Δένδρο - Σωρός Παράδειγμα: εισαγωγή του 5 1 2 6 6 9 7 9 7 11 20 8 10 5 20 8 10 12 5 12 11 5 4 6 3 6 7 5 7 9 20 8 10 9 20 8 10 12 11 12 11 42

Δένδρο - Σωρός Διαδικασία διαγραφής ελαχίστου Παίρνουμε το τελευταίο στοιχείο του σωρού και το τοποθετούμε στη ρίζα. Στη συνέχεια, λαμβάνουν χώρα αντιμεταθέσεις ώστε το στοιχείο που μπήκε στη ρίζα να τοποθετηθεί τελικά στο σωστό επίπεδο. Το στοιχείο που τοποθετήθηκε στη ρίζα μπορεί να φτάσει μέχρι το τελευταίο επίπεδο του σωρού. Το μέγεθος (=πλήθος στοιχείων) του σωρού μειώνεται κατά ένα. 43

Δένδρο - Σωρός Παράδειγμα: διαγραφής ελαχίστου 5 1 2 11 6 7 6 7 9 20 8 10 9 20 8 10 12 11 12 6 4 6 3 9 7 11 7 11 20 8 10 9 20 8 10 12 12 44

Αποθήκευση σωρού σε πίνακα Δένδρο - Σωρός 5 6 7 9 20 8 10 12 11 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5 6 7 9 20 8 10 12 11 Τα παιδιά του κόμβου που βρίσκεται στη θέση i του πίνακα βρίσκονται στις θέσεις 2i+1 και 2i+2. Ο γονέας του κόμβου που βρίσκεται στη θέση i του πίνακα βρίσκεται στη θέση (i-1)/2 45

Δένδρο - Σωρός Σωρός μεγίστων (maxheap) Το δένδρο-σωρός αναπτύσσεται από επάνω προς τα κάτω και από αριστερά προς τα δεξιά. Μόνο το τελευταίο επίπεδο μπορεί να μην είναι πλήρως συμπληρωμένο. 20 11 12 Το στοιχείο ενός κόμβου είναι μεγαλύτερο από τα στοιχεία των παιδιών του. 9 6 8 10 Το μέγιστο στοιχείο βρίσκεται πάντα στη ρίζα του δένδρου. 7 46

76 22 64 Άσκηση για δένδρο-σωρό Δίνεται η εξής δενδρική δομή: 14 12 17 38 49 21 19 31 10 15 48 3 74 62 1. Αποτελεί η δομή αυτή δένδρο-σωρό; Αιτιολογήστε την απάντησή σας. 2. Θεωρήστε ότι το δένδρο σαρώνεται με την ενδοδιατεταγμένη διαπέραση και τα δεδομένα των κόμβων του εισάγονται, με διαδοχικές λειτουργίες push, σε μια στοίβα. Στη συνέχεια, τα δεδομένα εξάγονται από τη στοίβα με διαδοχικές λειτουργίες pop και εισάγονται σε μια νέα δομή δένδρου σωρού. Να δείξετε το νέο δένδρο σωρό μετά από την εισαγωγή των στοιχείων 15, 76, 19, 14, 74. 3. Να γίνει διαγραφή της ρίζας στο τελικό δένδρο-σωρό που προκύπτει μετά την εισαγωγή όλων των δεδομένων του ερωτήματος 2. Απεικονίστε το τελικό δένδρο που προκύπτει μετά τις αλλαγές που συντελούνται λόγω της διαγραφής. 47

Απάντηση 1. Όχι, το δένδρο αυτό δεν αποτελεί δομή σωρού γιατί ενώ είναι πλήρες δυαδικό δένδρο, οι κόμβοι γονείς με τις τιμές 14, 49, 12, 38 είναι μικρότεροι από τους κόμβους παιδιά δηλαδή (14<49, 14<21), (49<74, 49<62), (12<19, 12<31) και (38<48). 2. Τα δεδομένα που προκύπτουν κατά την εφαρμογή της ενδοδιατεταγμένης διαπέρασης στο δεδομένο δένδρο είναι τα εξής (με αυτή τη σειρά): 74,49,62,14,21,22,19,12,31,76,10,17,15,64,48,38,3. Συνεπώς, η στοίβα έχει την μορφή του διπλανού σχήματος: 3 38 48 64 15 17 10 76 31 12 19 22 21 14 62 49 74 48

64 Εισαγωγή 15 48 38 3 15 64 64 48 38 48 38 3 15 17 10 76 19 17 10 Εισαγωγή 76 76 64 3 76 76 38 64 38 48 15 17 10 48 15 17 10 3 3 49

Εισαγωγή 19 76 64 38 48 15 17 10 3 31 12 19 76 64 38 48 19 17 10 3 31 12 15 50

Εισαγωγή 14 76 64 38 48 19 22 10 3 31 12 15 17 21 14 76 64 38 48 19 22 14 3 31 12 15 17 21 10 51

Εισαγωγή 74 76 76 64 62 64 62 49 19 22 38 48 31 12 15 17 21 10 14 3 74 74 19 22 49 31 12 15 17 21 3 48 38 10 14 76 76 64 62 74 62 49 19 22 38 64 19 22 38 74 31 12 15 17 21 10 14 49 31 12 15 17 21 10 14 3 48 3 48 52

Διαγραφή της ρίζας: 74 76 48 62 74 62 64 19 22 38 49 31 12 15 17 21 10 14 64 19 22 38 3 49 31 12 15 17 21 3 48 10 14 74 64 62 48 19 22 38 48 49 31 12 15 17 21 10 14 3 74 62 74 64 19 22 38 49 31 12 15 17 21 10 14 64 62 3 49 19 22 38 48 31 12 15 17 21 10 14 3 53

Βασικές Εφαρμογές Δένδρων αναζήτηση σε διατεταγμένες λίστες και διάταξη αλγόριθμοι συμπίεσης δεδομένων αναπαράσταση και εκτίμηση αριθμητικών εκφράσεων αναπαράσταση οντολογιών αποθήκευση και δεικτοδότηση συμβολοσειρών 54

Διάταξη ή Ταξινόμηση Αποτελεί βασική λειτουργία στα συστήματα επεξεργασίας δεδομένων. Είσοδος: σύνολο στοιχείων που βρίσκονται σε έναν πίνακα. Έξοδος: ταξινομημένος πίνακας σε αύξουσα ή φθίνουσα διάταξη. Επειδή η ταξινόμηση χρησιμοποιείται συχνά για την επίλυση δυσκολότερων προβλημάτων θα πρέπει να εκτελείται γρήγορα. 55

Διάταξη Γνωστότεροι αλγόριθμοι διάταξης: με επιλογή (selection sort) με εισαγωγή (insertion sort) με ανταλλαγή ή φυσαλίδας (exchange sort ή bubble sort) με συγχώνευση (mergesort) με χρήση σωρού (heapsort) γρήγορη ταξινόμηση (quicksort) 56

Διάταξη με Επιλογή Από τις πλέον κατανοητές «διαισθητικά». Διαίρεσε τον πίνακα σε έναν ταξινομημένο υποπίνακα και σε έναν μη-ταξινομημένο. Για αύξουσα ταξινόμηση, σε κάθε πέρασμα, το μικρότερο στοιχείο του μη-ταξινομημένου υποπίνακα τοποθετείται στην αρχή του. Για φθίνουσα ταξινόμηση, σε κάθε πέρασμα, το μεγαλύτερο στοιχείο του μη-ταξινομημένου υποπίνακα τοποθετείται στην αρχή του. 57

Διάταξη με Επιλογή Σε κάθε πέρασμα, Βρες το μικρότερο στοιχείο στη μη ταξινομημένη λίστα Αντάλλαξε το επιλεγμένο στοιχείο με το στοιχείο στην αρχή της μη-ταξινομημένης λίστας Σημείωση: εναλλακτικά ο αλγόριθμος βρίσκει κάθε φορά το μεγαλύτερο στοιχείο και το τοποθετεί στο τέλος. 58

Αλγόριθμος Διάταξης με Επιλογή Το μικρότερο στοιχείο τοποθετείται στην αρχή. for (i=0; i<n-1; ++i) { min = A[i]; pos = i; for (k=i+1; k<n; ++k) if (A[k] < min) { min = A[k]; pos = k; } A[pos] = A[i]; A[i] = min; } 59

Διάταξη με Επιλογή Βρες το ελάχιστο 9 2 1 5 7 6 3 4 Τοποθέτησε το ελάχιστο στην αρχή 1 2 9 5 7 6 3 4 Βρες το ελάχιστο 1 2 9 5 7 6 3 4 Τοποθέτησε το ελάχιστο στην αρχή 1 2 9 5 7 6 3 4 Βρες το ελάχιστο 1 2 9 5 7 6 3 4 Τοποθέτησε το ελάχιστο στην αρχή 1 2 3 5 7 6 9 4 ταξ. υποπίνακας μη ταξ. υποπίνακας Σχολιάστε για το πλήθος συγκρίσεων που απαιτούνται 60

Διάταξη Φυσαλίδας Αλγόριθμος αύξουσας διάταξης Έστω ο πίνακας A με n στοιχεία. Σε κάθε πέρασμα, συγκρίνονται δύο γειτονικά στοιχεία, έστω στις θέσεις i και i+1. Εάν Α[i] > A[i+1], τότε αντιμεταθέτουμε τα δύο στοιχεία. Στο i-οστό πέρασμα (i=1,2,,n-1), βρίσκεται το i-οστό μικρότερο στοιχείο και τοποθετείται στην i-οστή θέση του πίνακα. 61

Αλγόριθμος Διάταξης Φυσαλίδας Το μικρότερο στοιχείο τοποθετείται στην αρχή. for (i=1; i<n; ++i) for (k=n-1; k>=i; --k) if (A[k] < A[k-1]) { temp = A[k-1]; A[k-1] = A[k]; A[k] = temp; } 62

Το μικρότερο στοιχείο τοποθετείται στην αρχή. Πρώτο πέρασμα: το στοιχείο 1 τοποθετείται στην αρχή του πίνακα. Ερώτηση: Πόσες συγκρίσεις/αντιμεταθέσεις πραγματοποιούνται στη χειρότερη περίπτωση στο πρώτο πέρασμα; Πόσες στο δεύτερο; Πόσες συνολικά συγκρίσεις θα εκτελεστούν σε σχέση με το μέγεθος (n) του πίνακα; Διάταξη Φυσαλίδας 9 2 1 5 7 6 3 4 9 2 1 5 7 6 3 4 9 2 1 5 7 3 6 4 9 2 1 5 7 3 6 4 9 2 1 5 3 7 6 4 9 2 1 5 3 7 6 4 9 2 1 3 5 7 6 4 9 2 1 3 5 7 6 4 9 1 2 3 5 7 6 4 9 1 2 3 5 7 6 4 1 9 2 3 5 7 6 4 63

Γρήγορη Διάταξη Η «γρήγορη» διάταξη βασίζεται στην αρχή του «Διαίρει και Βασίλευε». Στον προγραμματισμό της χρησιμοποιούμε την τεχνική της «αναδρομής». Είναι αισθητά πιο αποδοτική από τις προηγούμενες δύο. 64

Γρήγορη Διάταξη Διαίρει: διάλεξε ένα στοιχείο «άξονα» του πίνακα. Με βάση αυτό, χώρισε τον πίνακα στα δύο: στον αριστερό υποπίνακα βάλε όλα τα μικρότερα στοιχεία και στο δεξιό όλα τα μεγαλύτερα από το στοιχείο-άξονα Αναδρομή: Αναδρομικά κάνε το ίδιο στους δύο υποπίνακες. Βασίλευε: Βάλε στη σειρά τον αριστερό υποπίνακα, το στοιχείο-άξονα και τέλος τον δεξιό υποπίνακα. Σημείωση: στην απλή εκδοχή της quicksort ως στοιχείο-άξονας επιλέγεται συνήθως το πρώτο στοιχείο του κάθε υποπίνακα. 65

Γρήγορη Διάταξη 1) Επιλογή: Διάλεξε το στοιχείο-άξονα 2) Διαίρει: Βάλτο σε θέση ώστε αριστερά να είναι τα μικρότερα και δεξιά τα μεγαλύτερα 3) Βασίλευε: ταξινόμησε αναδρομικά 66

Γρήγορη Διάταξη Ο αλγόριθμος διαχωρισμού του πίνακα σε μεγαλύτερα και σε μικρότερα στοιχεία είναι ο εξής: Διαπερνάμε τον πίνακα ταυτόχρονα από τα δύο άκρα προς το κέντρο του με τη βοήθεια δύο δεικτών. Ο αριστερός δείκτης σταματά όταν συναντήσει στοιχείο μεγαλύτερο από το στοιχείο-άξονα, ενώ ο δεξιός όταν συναντήσει στοιχείο μικρότερο ή ίσο από αυτό. Όταν σταματήσουν και οι δύο, γίνεται εναλλαγή των στοιχείων που σταμάτησαν και κατόπιν η διαπέραση συνεχίζεται. Τα (2) και (3) επαναλαμβάνονται μέχρις ότου οι δείκτες διασταυρωθούν, οπότε σταματά η διαπέραση και γίνεται εναλλαγή του στοιχείου-άξονα με το στοιχείο που δείχνει ο δεξιός δείκτης. 67