Περιεχόμενα. Περιεχόμενα



Σχετικά έγγραφα
Περιεχόμενα. Εισαγωγή του επιμελητή, Γιάννης Σταματίου 15 Πρόλογος 17 Εισαγωγή 23. Μέρος I. ΕΠΑΝΑΛΗΠΤΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΚΑΙ ΑΝΑΛΛΟΙΩΤΕΣ ΣΥΝΘΗΚΕΣ

viii 20 Δένδρα van Emde Boas 543

xvi Προσέγγιση δομεσ δεδομενων και αλγοριθμοι

επιφάνεια πυριτίου Αναφορά στο Εκπαιδευτικό Υλικό : 5. Αναφορά στο Εργαστήριο :

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

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

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

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

ΒΙΒΛΙΑ ΒΙΒΛΙΑ

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

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

Περιεχόμενα. 2 Αριθμητικά συστήματα

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

Περιεχόμενα. Πρόλογος... 21

Οι δυναμικές δομές δεδομένων στην ΑΕΠΠ

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

Περιεχόμενα Πρόλογος 1. Εισαγωγή 2. Τα Βασικά Μέρη ενός Προγράμματος Prolog

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

Πρόλογος. Πρόλογος 13. Πώς χρησιμοποείται αυτό το βιβλίο 17

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

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

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

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

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής. Ακαδημαϊκό Έτος

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

Ελαφρύτατες διαδρομές

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

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

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

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

ΠΡΟΛΟΓΟΣ. Θεσσαλονίκη, Μάρτιος Οι συγγραφείς. Κ. Παπαρρίζος, Ν. Σαμαράς, Α. Σιφαλέρας.

ΑΝΑΚΟΙΝΩΣΗ ΚΑΤΑΤΑΚΤΗΡΙΩΝ ΕΞΕΤΑΣΕΩΝ ΑΚ. ΈΤΟΥΣ

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

Γλώσσες Προγραμματισμού

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

Περιεχόμενα ΜΕΡΟΣ ΠΡΩΤΟ. Πρόλογος... 13

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

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

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο

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

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

Δυναμικές Δομές Δεδομένων Λίστες Δένδρα - Γράφοι

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

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

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

Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης

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

Κεφάλαιο 5 Ανάλυση Αλγορίθμων

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ GD2670

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

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

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

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

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

Περιεχόμενα. Πρόλογος... 17

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Περιεχόμενα. 1. Εισαγωγή: Κάποια αντιπροσωπευτικά προβλήματα Βασικά στοιχεία ανάλυσης αλγορίθμων Γραφήματα...

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

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

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

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

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

Περιεχόμενα. Προλεγόμενα... ix Κεφάλαιο 1 Εισαγωγή Κεφάλαιο 2 Δεδομένα και εκφράσεις Κεφάλαιο 3 Λογικές συνθήκες και δομές ελέγχου...

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

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

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

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

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

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

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

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

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

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

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

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

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος στη δεύτερη έκδοση

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

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ Α : ΘΕΜΑΤΑ ΒΑΣΗΣ 1. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ...30

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

Μελετάμε την περίπτωση όπου αποθηκεύουμε ένα (δυναμικό) σύνολο στοιχειών. Ένα στοιχείο γράφεται ως, όπου κάθε.

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

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

1.1 Αλγόριθμοι Ένα ενδεικτικό πρόβλημα: συνδετικότητα Αλγόριθμοι ένωσης-εύρεσης Προοπτική Σύνοψη θεμάτων 46

Πρόλογος 1. 1 Μαθηµατικό υπόβαθρο 9

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

ΑΕΠΠ Ερωτήσεις θεωρίας

Εισαγωγή στην Ανάλυση Αλγορίθμων (2-3)

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

Μεταβατικό Πρόγραμμα Σπουδών και Συμπληρωματικό Εκπ/κό Υλικό

ΠΛΕ075: Προηγμένη Σχεδίαση Αλγορίθμων και Δομών Δεδομένων. Λουκάς Γεωργιάδης

Transcript:

Περιεχόμενα xv Περιεχόμενα 1 Αρχές της Java... 1 1.1 Προκαταρκτικά: Κλάσεις, Τύποι και Αντικείμενα... 2 1.1.1 Βασικοί Τύποι... 5 1.1.2 Αντικείμενα... 7 1.1.3 Τύποι Enum... 14 1.2 Μέθοδοι... 15 1.3 Εκφράσεις... 20 1.3.1 Λεκτικά... 20 1.3.2 Τελεστές... 21 1.3.3 Μετατροπή Τύπου και Autoboxing/Unboxing... 25 1.4 Έλεγχος Ροής... 27 1.4.1 Οι Εντολές If και Switch... 27 1.4.2 Βρόχοι Επανάληψης... 29 1.4.3 Ρητές Εντολές Ελέγχου της Ροής... 32 1.5 Πίνακες... 34 1.5.1 Δήλωση Πινάκων... 36 1.5.2 Οι Πίνακες είναι Αντικείμενα... 37 1.6 Απλή Είσοδος και Έξοδος... 39 1.7 Ένα Παράδειγμα Προγράμματος... 43 1.8 Εμφωλευμένες Κλάσεις και Πακέτα... 46 1.9 Γράψιμο ενός Java Προγράμματος... 48 1.9.1 Σχεδιασμός... 48 1.9.2 Ψευδο-Κώδικας... 49 1.9.3 Κωδικοποίηση... 50 1.9.4 Έλεγχος και Εύρεση Σφαλμάτων... 53 1.10 Ασκήσεις... 56 2 Αντικειμενοστραφής Σχεδιασμός... 59 2.1 Στόχοι, Αρχές και Πρότυπα... 60 2.1.1 Αντικειμενοστραφείς Σχεδιαστικοί Στόχοι... 60 2.1.2 Αντικειμενοστραφείς Αρχές Σχεδιασμού... 61 2.1.3 Σχεδιαστικά Πρότυπα... 64

xvi Δομές δεδομένων & Αλγόριθμοι σε Java 2.2 Κληρονομικότητα και Πολυμορφισμός... 65 2.2.1 Κληρονομικότητα... 65 2.2.2 Πολυμορφισμός... 67 2.2.3 Χρήση της Κληρονομικότητας στην Java... 68 2.3 Εξαιρέσεις... 78 2.3.1 Μεταβίβαση Εξαιρέσεων... 78 2.3.2 Σύλληψη Εξαιρέσεων... 80 2.4 Διασυνδέσεις και Αφηρημένες Κλάσεις... 82 2.4.1 Υλοποίηση Διασυνδέσεων... 82 2.4.2 Πολλαπλή Κληρονομικότητα σε Διασυνδέσεις... 85 2.4.3 Αφηρημένες Κλάσεις και Strong Typing... 86 2.5 Μετατροπή Τύπου και Γενικοί Τύποι... 87 2.5.1 Μετατροπή Τύπου... 87 2.5.2 Γενικευμένοι Ορισμοί (Generics)... 91 2.6 Ασκήσεις... 93 3 Δείκτες, Κόμβοι και Αναδρομή... 99 3.1 Χρήση Πινάκων... 100 3.1. 1 Αποθήκευση Καταχωρήσεων Παιγνιδιού σε έναν Πίνακα... 100 3.1.2 Ταξινόμηση ενός Πίνακα... 107 3.1.3 Μέθοδοι της java.util για Πίνακες και Τυχαίους Αριθμούς... 110 3.1.4 Απλή Κρυπτογραφία με Συμβολοσειρές και Πίνακες Χαρακτήρων... 113 3.1.5 Πίνακες Δύο Διαστάσεων και Παιγνίδια Θέσης... 116 3.2 Απλά Συνδεδεμένες Λίστες... 121 3.2.1 Εισαγωγή σε μια Απλά Συνδεδεμένη Λίστα... 123 3.2.2 Διαγραφή ενός Στοιχείου από μια Απλά Συνδεδεμένη Λίστα... 125 3.3 Διπλά Συνδεδεμένες Λίστες... 126 3.3.1 Εισαγωγή στο Μέσον μιας Διπλά Συνδεδεμένης Λίστας... 129 3.3.2 Διαγραφή από το Μέσον μιας Διπλά συνδεδεμένης Λίστας... 130 3.3.3 Μια Υλοποίηση μιας Διπλά Συνδεδεμένης Λίστας... 131 3.4 Κυκλικά Συνδεδεμένες Λίστες και Ταξινόμηση Συνδεδεμένης Λίστας... 134 3.4.1 Κυκλικά Συνδεδεμένες Λίστες και το Παιδικό Παιγνίδι Duck, Duck, Goose... 134 3.4.2 Ταξινόμηση μιας Συνδεδεμένης Λίστας... 139 3.5 Αναδρομή... 140 3.5.1 Γραμμική Αναδρομή... 146 3.5.2 Δυαδική Αναδρομή... 150 3.5.3 Πολλαπλή Αναδρομή... 153 3.6 Ασκήσεις... 155

Περιεχόμενα xvii 4 Εργαλεία Ανάλυσης... 161 4.1 Οι Επτά Συναρτήσεις που Χρησιμοποιούνται στο Παρόν Βιβλίο... 162 4.1.1 Η Σταθερά Συνάρτηση... 162 4.1.2 Η Λογαριθμική Συνάρτηση... 162 4.1.3 Η Γραμμική Συνάρτηση... 164 4.1.4 Η Συνάρτηση N-Log-N... 164 4.1.5 Η Τετραγωνική Συνάρτηση... 164 4.1.6 Η Κυβική Συνάρτηση και Άλλα Πολυώνυμα... 166 4.1.7 Η Εκθετική Συνάρτηση... 167 4.1.8 Σύγκριση Ρυθμών Αύξησης... 169 4.2 Ανάλυση Αλγορίθμων... 170 4.2.1 Πειραματικές Μελέτες... 171 4.2.2 Πρωταρχικές Πράξεις... 172 4.2.3 Ασυμπτωτικός Συμβολισμός... 174 4.2.4 Ασυμπτωτική Ανάλυση... 178 4.2.5 Χρήση του Συμβολισμού Big-Oh... 180 4.2.6 Ένας Αναδρομικός Αλγόριθμος για τον Υπολογισμό Δυνάμεων... 184 4.2.7 Περισσότερα Παραδείγματα Ανάλυσης Αλγορίθμων... 185 4.3 Απλές Τεχνικές Αιτιολόγησης... 189 4.3.1 Με Παράδειγμα... 189 4.3.2 Η Αντίθεση... 189 4.3.3 Επαγωγή και Μεταβλητές Επανάληψης... 190 4.2 Ασκήσεις... 193 5 Στοίβες, Ουρές και Διπλές Ουρές... 201 5.1 Στοίβες... 202 5.1.1 Ο Αφηρημένος Τύπος Δεδομένων Στοίβα... 203 5.1.2 Μια Απλή Υλοποίηση Στοίβας που Βασίζεται σε Πίνακα... 206 5.1.3 Υλοποίηση Στοίβας με Γενική Συνδεδεμένη Λίστα... 211 5.1.4 Αντιστροφή ενός Πίνακα με Χρήση Στοίβας... 213 5.1.5 Αντιστοίχιση Παρενθέσεων σε HTML Ετικέτες... 214 5.2 Ουρές... 218 5.2.1 Ο Αφηρημένος Τύπος Δεδομένων της Ουράς... 218 5.2.2 Μια Απλή Υλοποίηση Ουράς που Βασίζεται σε Πίνακα... 221 5.2.3 Υλοποίηση μιας Ουράς με μια Γενική Συνδεδεμένη Λίστα... 224 5.2.4 Κυκλικός Δρομολογητής... 225 5.3 Ουρές με Δύο Άκρα... 227 5.3.1 Ο Αφηρημένος Τύπος Δεδομένων της Διπλής Ουράς... 227 5.3.2 Υλοποίηση της Διπλής Ουράς... 228 5.3.3 Διπλές Ουρές στα Πλαίσιο των Java Συλλογών... 231 5.4 Ασκήσεις... 232

xviii Δομές δεδομένων & Αλγόριθμοι σε Java 6 ΑΤΔ Λίστα και Επαναλήπτησ... 237 6.1 Γραμμικές Λίστες... 238 6.1.1 Ο Αφηρημένος Τύπος Δεδομένων Γραμμική Λίστα... 238 6.1.2 Το Πρότυπο Προσαρμοστή... 239 6.1.3 Μια Απλή Υλοποίηση Βασισμένη σε Πίνακα... 240 6.1.4 Μια Απλή Διασύνδεση και η Κλάση java.util.arraylist... 242 6.1.5 Υλοποίηση μιας Γραμμικής Λίστας με Επεκτατούς Πίνακες... 243 6.2 Λίστες Κόμβων... 247 6.2.1 Πράξεις που βασίζονται σε κόμβους... 247 6.2.2 Θέσεις... 248 6.2.3 Ο Αφηρημένος Τύπος Δεδομένων Λίστα Κόμβων... 248 6.2.4 Υλοποίηση Διπλά Συνδεδεμένης Λίστας... 252 6.3 Επαναλήπτες... 258 6.3.1 Ο Επαναλήπτης και οι Επαναλήψιμοι Αφηρημένοι Τύποι Δεδομένων... 258 6.3.2 Ο Java Βρόχος Επανάληψης For-Each... 260 6.3.3 Υλοποίηση Επαναληπτών... 261 6.3.4 Επαναλήπτες Λίστας στην Java... 263 6.4 ΑΤΔ Λίστα και το Πλαίσιο Συλλογών... 264 6.4.1 Λίστες στο Πλαίσιο Συλλογών της Java... 264 6.4.2 Ακολουθίες... 268 6.5 Μελέτη Περίπτωσης: Η ευριστική μετακίνηση στην αρχή... 271 6.5.1 Χρήση μιας Ταξινομημένης Λίστας και μιας Εμφωλευμένης Κλάσης... 271 6.5.2 Χρήση Λίστας με την Ευριστική Μετακίνηση στην Αρχή... 274 6..5.3 Πιθανές Χρήσεις της Λίστας Προτιμήσεων... 275 6.6 Ασκήσεις... 278 7 Δενδρα... 283 7.1 Δένδρα Γενικά... 284 7.1.1 Ορισμοί Δένδρων και Ιδιότητες... 285 7.1.2 Ο Αφηρημένος Τύπος Δένδρου... 288 7.1.3 Υλοποίηση ενός Δένδρου... 289 7.2 Αλγόριθμοι Διάσχισης Δένδρων... 291 7.2.1 Βάθος και Ύψος... 291 7.2.2 Προδιατεταγμένη Διάσχιση... 294 7.2.3 Μεταδιατεταγμένη Διάσχιση... 297 7.3 Δυαδικά Δένδρα... 300 7.3.1 Ο ΑΤΔ Δυαδικό Δένδρο... 302 7.3.2 Μια Java Διασύνδεση Δυαδικού Δένδρου... 302 7.3.3 Ιδιότητες των Δυαδικών Δένδρων... 303 7.3.4 Μια Συνδεδεμένη Δομή για Δυαδικά Δένδρα... 305 7.3.5 Μια Αναπαράσταση Δυαδικού Δένδρου με Λίστα Πίνακα... 314

Περιεχόμενα xix 7.3.6 Σαρώσεις Δυαδικών Δένδρων... 316 7.3.7 Η Μέθοδος Προτύπου Περιγράμματος... 323 7.2 Ασκήσεις... 327 8 Σωροί και Ουρές Προτεραιότητας... 337 8.1 Ο Αφηρημένος Τύπος Δεδομένων Ουρά Προτεραιότητας... 338 8.1.1 Κλειδιά, Προτεραιότητες και Σχέσεις Ολικής Διάταξης... 338 8.1.2 Καταχωρήσεις και Συγκριτές... 340 8.1.3 Ο ΑΤΔ Ουρά Προτεραιότητας... 342 8.1.4 Ταξινόμηση με Ουρά Προτεραιότητας... 343 8.2 Υλοποίηση μιας Ουράς Προτεραιότητας με μια Λίστα... 344 8.2.1 Μια Java Υλοποίηση Ουράς Προτεραιότητας με Χρήση μιας Λίστας... 345 8.2.2 Ταξινόμηση με Επιλογή και Ταξινόμηση με Εισαγωγή... 348 8.3 Σωροί... 350 8.3.1 Η Δομή Δεδομένων του Σωρού... 350 8.3.2 Πλήρη Δυαδικά Δένδρα και Αναπαράστασή τους... 353 8.3.3 Υλοποίηση μιας Ουράς Προτεραιότητας με έναν Σωρό... 358 8.3.4 Μια Java Υλοποίηση του Σωρού... 363 8.3.5 Ταξινόμηση Σωρού... 366 8.3.6 Προς τα Πάνω Κατασκευή του Σωρού... 368 8.4 Προσαρμοζόμενες Ουρές Προτεραιότητας... 372 8.4.1 Χρήση της Κλάσης java.util.priorityqueue... 373 8.4.2 Καταχωρήσεις Ενήμερες Θέσης... 374 8.4.3 Υλοποίηση μιας Προσαρμοζόμενης Ουράς Προτεραιότητας... 375 8.5 Ασκήσεις... 378 9 Πίνακες Κατακερματισμού, Χάρτες και Λίστες Παράλειψης...385 9.1 Χάρτες... 386 9.1.1 Ο ΑΤΔ Χάρτης... 387 9.1.2 Μια Απλή Υλοποίηση Χάρτη που Βασίζεται σε Λίστα... 389 9.2 Πίνακες Κατακερματισμού... 390 9.2.1 Πίνακες Κάδων... 390 9.2.2 Συναρτήσεις Κατακερματισμού... 391 9.2.3 Κώδικες Κατακερματισμού... 392 9.2.4 Συναρτήσεις Συμπίεσης... 395 9.2.5 Σχήματα Διαχείρισης Συγκρούσεων... 397 9.2.6 Μια Υλοποίηση Πίνακα Κατακερματισμού σε Java... 401 9.2.7 Παράγοντες Φόρτωσης και Επανάληψη Κατακερματισμού... 405 9.2.8 Εφαρμογή: Απαρίθμηση των Συχνοτήτων Λέξεων... 406 9.3 Διατεταγμένοι Χάρτες... 407 9.3.1 Αναζήτηση σε Διατεταγμένους Πίνακες και Δυαδική Αναζήτηση... 408

xx Δομές δεδομένων & Αλγόριθμοι σε Java 9.3.2 Δύο Εφαρμογές Διατεταγμένων Χαρτών... 412 9.4 Λίστες Παράλειψης... 415 9.4.1 Πράξεις Αναζήτησης και Ενημέρωσης σε μια Λίστα Παράλειψης... 416 9.4.2 Μια Πιθανοθεωρητική Ανάλυση των Λιστών Παράλειψης*... 421 9.5 Λεξικά... 424 9.5.1 Ο ΑΤΔ Λεξικό... 424 9.5.2 Υλοποιήσεις με Καταχωρήσεις Ενήμερες Θέσης... 426 9.5.3 Μια Υλοποίηση που Χρησιμοποιεί το Πακέτο java.util... 427 9.6 Ασκήσεις... 430 10 Δένδρα Αναζήτησης... 435 10.1 Δυαδικά Δένδρα Αναζήτησης... 436 10.1.1 Αναζήτηση... 437 10.1.2 Πράξεις Ενημέρωσης... 439 10.1.3 Java Υλοποίηση... 443 10.2 AVL Δένδρα... 447 10.2.1 Πράξεις Ενημέρωσης... 449 10.2.2 Java Υλοποίηση... 455 10.3 Στρεβλά Δένδρα (Splay Trees)... 458 10.3.1 Στρέβλωση... 458 10.3.2 Πότε Εκτελείται Στρέβλωση... 462 10.3.3 Κλιμακωτή Ανάλυση των Στρεβλών Δένδρων*... 464 10.4 (2,4) Δένδρα... 469 10.4.1 Δένδρα Αναζήτησης Πολλών Δρόμων... 469 10.4.2 Πράξεις Ενημέρωσης για (2,4) Δένδρα... 475 10.5 Κόκκινα-Μαύρα Δένδρα... 481 10.5.1 Πράξεις Ενημέρωσης... 483 10.5.2 Java Υλοποίηση... 496 10.6 Ασκήσεις... 499 11 Ταξινόμηση, Σύνολα, και Επιλογή... 505 11.1 Ταξινόμηση με Συγχώνευση... 506 11.1.1 Διαίρει και Βασίλευε... 506 11.1.2 Συγχώνευση Πινάκων και Λιστών... 511 11.1.3 Ο Χρόνος Τρεξίματος της Ταξινόμησης με Συγχώνευση... 514 11.1.4 Java Υλοποιήσεις της Ταξινόμησης με Συγχώνευση... 515 11.1.5 Ταξινόμηση με Συγχώνευση και Αναδρομικές Εξισώσεις*... 518 11.2 Quick-Sort (Γρήγορη Ταξινόμηση)... 519 11.2.1 Τυχαία Γρήγορη Ταξινόμηση... 526 11.2.2 Java Υλοποιήσεις και Βελτιστοποιήσεις... 528

Περιεχόμενα xxi 11.3 Μελέτη της Ταξινόμησης μέσω Αλγοριθμικού Φακού... 531 11.3.1 Ένα Κάτω Φράγμα για την Ταξινόμηση... 531 11.3.2 Γραμμική σε Χρόνο Ταξινόμηση: Ταξινόμηση Κάδου και Ταξινόμηση Βάσης... 533 11.3.3 Σύγκριση των Αλγορίθμων Ταξινόμησης... 536 11.4 Σύνολα και Δομές Εύρεσης της Ένωσης... 538 11.4.1 Ο ΑΤΔ Σύνολο... 538 11.4.2 Σύνολα με Δυνατότητα Συγχώνευσης και το Πρότυπο Μεθόδου Πλαισίου... 539 11.4.3 Διαμερίσεις με Πράξεις Εύρεσης της Ένωσης... 543 11.5 Επιλογή... 547 11.5.1 Κλάδεμα και Αναζήτηση... 547 11.5.2 Γρήγορη Τυχαία Επιλογή... 548 11.5.3 Ανάλυση της Τυχαίας Γρήγορης Επιλογής... 549 11.6 Ασκήσεις... 550 12 Συμβολοσειρές και Δυναμικός Προγραμματισμός... 557 12.1 Πράξεις Συμβολοσειρών... 558 12.1.1 Η Κλάση String της Java... 559 12.1.2 Η Κλάση StringBuffer της Java... 560 12.2 Δυναμικός Προγραμματισμός... 561 12.2.1 Γινόμενο Πολλών Πινάκων... 561 12.2.2 DNA και Ευθυγράμμιση Ακολουθίας Κειμένου... 564 12.3 Αλγόριθμοι Ταιριάσματος Προτύπων... 568 12.3.1 Εξαντλητική Μέθοδος... 568 12.3.2 Ο Αλγόριθμος των Boyer-Moore... 570 12.3.3 Ο Αλγόριθμος των Knuth-Morris-Pratt... 574 12.4 Συμπίεση Κειμένου και η Άπληστη Μέθοδος... 759 12.4.1 Ο Αλγόριθμος Κωδικοποίησης του Huffman... 580 12.4.2 Η Άπληστη Μέθοδος... 581 12.5 Tries... 582 12.5.1 Τυπικές Tries... 582 12.5.2 Συμπιεσμένες Tries... 586 12.5.3 Tries Κατάληξης... 588 12.5.4 Μηχανές Αναζήτησης... 590 12.6 Ασκήσεις... 591 13 Αλγόριθμοι Γράφων... 597 13.1 Γράφοι... 598 13.1.1 Ο ΑΤΔ Γράφος... 603 13.2 Δομές Δεδομένων για Γράφους... 604

xxii Δομές δεδομένων & Αλγόριθμοι σε Java 13.2.1 Η Δομή Λίστας Ακμών... 604 13.2.2 Η Δομή με Λίστα Γειτνίασης... 607 13.2.3 Η Δομή Πίνακα Γειτνίασης... 609 13.3 Διασχίσεις Γράφων... 611 13.3.1 Αναζήτηση με Προτεραιότητα Βάθους... 611 13.3.2 Υλοποίηση της Αναζήτησης με Προτεραιότητα Βάθους... 615 13.3.3 Αναζήτηση με Προτεραιότητα Πλάτους... 623 13.4 Κατευθυνόμενοι Γράφοι... 626 13.4.1 Διάσχιση ενός Κατευθυνόμενου Γράφου... 628 13.4.2 Μεταβατική Κλειστότητα... 630 13.4.3 Κατευθυνόμενοι Άκυκλοι Γράφοι... 633 13.5 Συντομότερες Διαδρομές... 637 13.5.1 Γράφοι με Βάρη... 637 13.5.2 Αλγόριθμος του Dijkstra... 639 13.5.3 Υλοποιήσεις του Αλγορίθμου του Dijkstra... 645 13.6 Ελάχιστα Ζευγνύοντα Δένδρα... 648 13.6.1 Ο Αλγόριθμος του Kruskal... 650 13.6.2 Ο Αλγόριθμος Prim-Jarník... 654 13.7 Ασκήσεις... 657 14 Διαχείριση Μνήμης και Β-Δένδρα... 667 14.1 Διαχείριση Μνήμης... 668 14.1.1 Στοίβες στην Εικονική Μηχανή της Java... 668 14.1.2 Κατανομή του Χώρου στον Σωρό της Μνήμης... 672 14.1.3 Συλλογή Άχρηστων... 674 14.2 Εξωτερική και Κρυφή Μνήμη... 676 14.2.1 Η Ιεραρχία της μνήμης... 676 14.2.2 Στρατηγικές Κρυφής Μνήμης... 677 14.3 Εξωτερική Αναζήτηση και B-Δένδρα... 682 14.3.1 (a,b) Δένδρα... 683 14.3.2 Β-Δένδρα... 685 14.4 Εξωτερική Ταξινόμηση... 686 14.4.1 Συγχώνευση Πολλών Δρόμων... 687 14.5 Ασκήσεις... 688 Παράρτημα Α Χρήσιμα Μαθηματικά ΔΕΔΟΜΕΝΑ... 691 Βιβλιογραφία... 699 Ευερτήριο... 705