Πρόλογος 7κεφάλαιο 1Εισαγωγή, Βασικές Έννοιες Δεδοµένων και Αλγορίθµων1.1 Τύποι Δεδομένων και Δομές Δεδομένων 171.1.1 Bασικές Έννοιες Δομών 181.2 Αλγόριθμοι 201.2.1 Γενικά 201.2.2 Προγραμματιστικές δομές 221.2.3 Παραδείγματα αλγορίθμων 271.3 Πίνακες 321.3.1 Πίνακας μιας διάστασης 331.3.2 Γραμμική Δομή λίστα στην Python (List) 361.3.3 Δείκτες μνήμης (pointers) στη C 401.3.4 Διδιάστατοι πίνακες 421.4 Αλφαριθμητικά (strings) 461.4.1 Επεξεργασία αλφαριθμητικών 471.4.2 Αλφαριθμητικά στην Python 481.5 Δομή σύνολο στην Python 511.6 Συναρτήσεις 531.6.1 Συναρτήσεις και παραδείγματα σε Python 561.6.2 Αλγόριθμοι εύρεσης πρώτων αριθμών(με συναρτήσεις) 571.6.3 Αναδρομικοί αλγόριθμοι και συναρτήσεις 601.7 Αποδοτικότητα Αλγορίθμων 651.7.1 Συμβολισμός μεγάλου Ο 671.7.2 Κατηγορίες της τάξης των αλγορίθμων 681.7.3 Πειραματική ανάλυση του χρόνου εκτέλεσης 711.7.4 Επίλυση αναδρομικής σχέσης με αντικατάσταση 711.8 Παραγωγή Τυχαίων Αριθμών 731.8.1 Τυχαίοι αριθμοί στη C 741.8.2 Τυχαίοι αριθμοί στην Python 761.9 Ερωτήσεις-Ασκήσεις 80κεφάλαιο 2Δοµές Δεδοµένων2.1 Γενικά - Δομές Δεδομένων 852.1.1 Σύνθετοι τύποι δεδομένων οριζόμενοι από τον χρήστη 862.1.2 Αναφορά στα πεδία δομής 872.1.3 Πίνακας με στοιχεία δομές 882.1.4 Δημιουργία σύνθετων δομών στην Python 892.1.5 Ένθετες δομές 922.1.6 Δείκτες σε δομές και δυναμικές δομές 922.1.7 Αναδρομικές δομές 942.1.8 Ενδιαφέροντα χαρακτηριστικά δομής 942.1.9 Αφηρημένοι Τύποι Δεδομένων (ΑΤΔ) 952.2 Η Στοίβα ως ΑΤΔ 972.2.1 Προγραμματιστική υλοποίηση στοίβας με πίνακα 982.2.2 Εφαρμογές στοίβας 1012.2.3 Στοίβες στην Python και εφαρμογές 1022.2.4 Υλοποίηση αναδρομικών αλγορίθμων με χρήση στοίβας 1092.3 Η Ουρά ως ΑΤΔ (Quene) 1112.3.1 Η Ουρά σε προγραμματιστικό περιβάλλον 1122.3.2 Υλοποίηση Ουράς αναμονής 1132.3.3 Ουρά στην Python 1162.3.4 Εφαρμογές και παραδείγματα Ουράς 1172.4 Συνδεδεμένη Λίστα (Linked list) 1232.4.1 Απλά συνδεδεμένη λίστα (Simply linked list) 1252.4.2 Δυναμική υλοποίηση συνδεδεμένης λίστας 1272.4.3 Διατεταγμένη συνδεδεμένη λίστα 1392.4.4 Διπλά συνδεδεμένη λίστα 1432.4.5 Εφαρμογές συνδεδεμένης λίστας 1472.4.6 Κυκλικά συνδεδεμένη λίστα 1512.4.7 Συνδεδεμένη λίστα σε Python 1522.4.8 Σύγκριση συνδεδεμένης λίστας και πίνακα 1552.5 Ερωτήσεις-Ασκήσεις 156κεφάλαιο 3Αλγόριθµοι Αναζήτησης, Ταξινόµησηςκαι Εφαρµογές3.1 Ταξινόμηση (Sorting) 1613.1.1 Κριτήρια κατηγοριοποίησης αλγορίθμων ταξινόμησης 1623.1.2 Κριτήρια επιλογής αλγορίθμου 1683.1.3 Ταξινόμηση με εισαγωγή (insertion sort) 1693.1.4 Ταξινόμηση επιλογής (selection sort) 1743.1.5 Ταξινόμηση φυσαλλίδας (bubble sort) 1773.1.6 Σύνοψη συγκριτικών απλών αλγορίθμων ταξινόμησης 1803.1.7 Μη συγκριτικός αλγόριθμος απαριθμητικήςταξινόμησης (counting sort) 1803.2 Αναζήτηση (Search) 1853.2.1 Σειριακή αναζήτηση 1863.2.2 Σειριακή αναζήτηση με βήμα σε ταξινομημένο πίνακα 1893.2.3 Δυαδική αναζήτηση σε ταξινομημένα στοιχεία 1913.2.4 Αναζήτηση σε Python με χρήση ενσωματωμένωνμεθόδων 1943.3 Αλγόριθμοι Επιλογής και Διαμέρισης 1953.3.1 Διαμέριση πίνακα 1953.3.2 Διμερής διαμέριση πίνακα 1973.3.3 Τριμερής διαμέριση 2013.3.4 Διάμεσος πίνακα με Επιλογή 2083.3.5 Το πρόβλημα της επιλογής (selection problem) 2123.3.6 Συγχώνευση γραμμικών δομών 2143.3.7 Συγχώνευση ταξινομημένων λιστών σε Python 2203.4 Ερωτήσεις-Ασκήσεις 221κεφάλαιο 4Δενδρικές Δοµές4.1 Δένδρα Γενικά 2274.1.1 Βασικοί ορισμοί και ιδιότητες 2284.1.2 Είδη και δομές δένδρων 2334.2 Δυαδικά Δένδρα (Binary trees) 2334.2.1 Μαθηματικές ιδιότητες και προτάσεις για δυαδικάδένδρα 2344.2.2 Αναπαράσταση δυαδικού δένδρου 2354.2.3 Κατασκευή δυαδικού δένδρου και πράξεις 2364.2.4 Δυαδικά δένδρα αναζήτησης (ΔΔΑ) - Binary searchtree (BST) 2404.2.5 Διάσχιση ή διέλευση ή επίσκεψη δυαδικού δένδρου 2434.2.6 Προβλήματα και εφαρμογές 2494.2.7 Βασικές πράξεις σε ΔΔΑ 2524.2.8 Αυξητικά ΔΔΑ (Augmented BST) 2634.2.9 Δυαδικό δένδρο αναζήτησης (ΔΔΑ) σε Python 2664.3 AVL Δένδρου 2684.3.1 Υπολογισμός τάξης του ύψους για AVL δένδρο 2714.3.2 Περιστροφές AVL 2724.3.3 Δομή κόμβου και υπολογισμός παράγοντα ισορροπίας 2734.3.4 Κατασκευή δένδρου AVL από ταξινομημένη ακολουθία 2744.4 Ουρά Προτεραιότητας και Σωρός (heap) 2774.4.1 Δυαδικός σωρός 2794.4.2 Υλοποίηση δυαδικού σωρού 2824.4.3 Αλγόριθμος ταξινόμησης σωρού (Heapsort) 2884.4.4 Εφαρμογή: Εύρεση της διαμέσου μιας σειράςστοιχείων με heap 2904.5 Β-Δένδρα (Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης) 2934.5.1 Εξωτερική αναζήτηση και ευρετήρια 2934.5.2 Ορισμοί και κατηγορίες Β-Δένδρων 2964.6 Τrie Tree 3004.7 Ερυθρόμαυρα Δένδρα (Red-Black trees) 3034.8 Διωνυμικές Δομές 3084.8.1 Διωνυμικά δένδρα 3084.8.2 Διωνυμικοί Σωροί – ουρές (ΔΣ) 3114.8.3 Πράξεις σε διωνυμικούς σωρούς 3144.8.4 Σωροί Fibonacci 3204.9 Ερωτήσεις-Ασκήσεις 323κεφάλαιο 5Σχεδίαση και Ανάλυση ΑλγορίθµωνΑλγόριθµοι 3295.1 Γενικά Χαρακτηριστικά & Κατηγορίες Αλγορίθμων 3295.1.1 Κατηγορίες αλγορίθμων και ορολογία 3305.2 Ανάλυση Αλγορίθμων 3435.2.1 Συμβολισμοί Θ και Ω 3435.2.2 Το κεντρικό θεώρημα ή θεώρημα κυριαρχίας 3455.2.3 Χρονική πολυπλοκότητα και είσοδος δεδομένωνπροβλήματος 3495.2.4 Παραδείγματα απαιτητικών προβλημάτων 3555.2.5 Η κλάση προβλημάτων P 3565.2.6 Η κλάση προβλημάτων NP 3565.2.7 Η κλάση των NP-hard και NP-complete προβλημάτων 3575.3 Σχεδίαση Αλγορίθμων 3595.3.1 Διαίρει και κυρίευε (ή βασίλευε) 3595.3.2 Ταξινόμηση με συγχώνευση 3615.3.3 Γρήγορη ταξινόμηση (Quick Sort) 3645.3.4 Δυναμικός προγραμματισμός 3695.3.5 Άπληστοι αλγόριθμοι 3855.3.6 Παράδειγμα ευρηματικού αλγορίθμου 3875.4 Αλγόριθμοι Κατακερματισμού 3895.4.1 Συνάρτηση κατακερματισμού 3925.5 Δομή Λεξικό (στην Python) 4075.6 Ασκήσεις 410κεφάλαιο 6Θεωρία και Αλγόριθµοι ΓράφωνΓενικά 4156.1 Ορισμοί και Ιδιότητες Γράφων 4196.1.1 Τοπολογική ταξινόμηση (Topological sorting) 4376.2 Γράφοι Euler & Hamilton 4406.2.1 Ο κύκλος Euler 4406.2.2 Γράφος Hamilton 4426.3 Αναπαράσταση Γράφων 4476.3.1 Πίνακας γειτονικών κόμβων ή πίνακας συνδέσεων 4476.3.2 Λίστα γειτονικών κόμβων ή λίστα γειτνίασης 4526.4 Ελάχιστα Συνδετικά Δένδρα Κάλυψης (minimal spanning trees) 4596.4.1 Δένδρα επικάλυψης γράφου (συνδετικά δένδρα) 4606.4.2 Ελάχιστα δένδρα επικάλυψης (MST) 4606.5 Ελάχιστο Μονοπάτι (Shortest Path) ή Ελαφρύτατες ΑπλέςΔιαδρομές 4686.5.1 Βασικοί αλγόριθμοι για ελάχιστα μονοπάτια 4706.5.2 Πίνακας αποστάσεων για κάθε ζεύγος κόμβωνγράφου (Floyd-Warshall) 4766.5.3 Mέγιστη διαδρομή σε γράφο (Longest path) 4826.6 Διάσχιση ή Επίσκεψη Γράφου 4846.6.1 Αναζήτηση με προτεραιότητα βάθους (DFS) 4856.6.2 Επίσκεψη ή αναζήτηση κατά πλάτος (BFS) 4936.7 Μέγιστη Ροή (Max flow) 4996.8 Ενδιαφέροντα Προβλήματα Γράφων 5076.8.1 Ταίριασμα (matching) 5076.8.2 Ανεξάρτητο Σύνολο 5096.8.3 Χρωματισμός κορυφών γράφου 5106.8.4 Κατηγοριοποίηση βασικών προβλημάτων γράφων 5126.9 Ασκήσεις-Ερωτήσεις 513Βιβλιογραφία 517Συµβολισµοί 519