Περιεχόμενα Πρόλογος xi I Θεμελιώδεις έννοιες Εισαγωγή 3 1 Ο ρόλος των αλγορίθμων στις υπολογιστικές διαδικασίες 5 1.1 Αλγόριθμοι 5 1.2 Οι αλγόριθμοι σαν τεχνολογία 12 2 Προκαταρκτικές έννοιες και παρατηρήσεις 17 2.1 Ενθετική ταξινόμηση 17 2.2 Ανάλυση αλγορίθμων 24 2.3 Σχεδίαση αλγορίθμων 32 3 Ρυθμός αύξησης συναρτήσεων 46 3.1 Ασυμπτωτικός συμβολισμός 46 3.2 Καθιερωμένοι συμβολισμοί και συνήθεις συναρτήσεις 57 4 Διαίρει-και-κυρίευε 67 4.1 Το πρόβλημα της μέγιστης υποσυστοιχίας 70 4.2 Ο αλγόριθμος του Strassen για πολλαπλασιασμό πινάκων 78 4.3 Η μέθοδος της αντικατάστασης για επίλυση αναδρομικών σχέσεων 85 4.4 Η μέθοδος του δένδρου αναδρομής για επίλυση αναδρομικών σχέσεων 90 4.5 Η κεντρική μέθοδος για την επίλυση αναδρομικών σχέσεων 96 4.6 Απόδειξη του κεντρικού θεωρήματος 100 5 Πιθανοτική ανάλυση και τυχαιοκρατικοί αλγόριθμοι 116 5.1 Το πρόβλημα της πρόσληψης 116 5.2 Δείκτριες τυχαίες μεταβλητές 120 5.3 Τυχαιοκρατικοί αλγόριθμοι 124 5.4 Πιθανοτική ανάλυση και άλλες χρήσεις των δεικτριών τυχαίων μεταβλητών 132
vi Περιεχόμενα II Ταξινόμηση και διατακτικές στατιστικές Εισαγωγή 149 6 Ταξινόμηση σωρού 154 6.1 Σωροί 154 6.2 Διατήρηση της ιδιότητας σωρού 157 6.3 Κατασκευή σωρού 160 6.4 Ο αλγόριθμος της ταξινόμησης σωρού 163 6.5 Ουρές προτεραιότητας 165 7 Ταχυταξινόμηση 173 7.1 Περιγραϕή της ταχυταξινόμησης 173 7.2 Επίδοση της ταχυταξινόμησης 177 7.3 Μια τυχαιοκρατική εκδοχή της ταχυταξινόμησης 182 7.4 Ανάλυση της ταχυταξινόμησης 183 8 Ταξινόμηση σε γραμμικό χρόνο 195 8.1 Κάτω ϕράγματα για αλγορίθμους ταξινόμησης 195 8.2 Απαριθμητική ταξινόμηση 198 8.3 Αριθμοτακτική ταξινόμηση 201 8.4 Ταξινόμηση με δοχεία 205 9 Διάμεσοι και διατακτικές στατιστικές 218 9.1 Ελάχιστο και μέγιστο 219 9.2 Επιλογή σε γραμμικό αναμενόμενο χρόνο 220 9.3 Επιλογή σε γραμμικό χρόνο χειρότερης περίπτωσης 224 III Δομές δεδομένων Εισαγωγή 233 10 Στοιχειώδεις δομές δεδομένων 237 10.1 Στοίβες και ουρές 237 10.2 Αλυσίδες 241 10.3 Υλοποίηση δεικτών και αντικειμένων 246 10.4 Αναπαράσταση έρριζων δένδρων 251 11 Πίνακες διασποράς 259 11.1 Πίνακες σταθερών διευθύνσεων 260 11.2 Πίνακες διασποράς 262 11.3 Συναρτήσεις διασποράς 268 11.4 Η μέθοδος των μεταβλητών διευθύνσεων 276 11.5 Πλήρης διασπορά 285 12 Δυαδικά δένδρα αναζήτησης 294 12.1 Τι είναι ένα δυαδικό δένδρο αναζήτησης; 294 12.2 Άντληση πληροϕοριών από δυαδικό δένδρο αναζήτησης 297 12.3 Εισαγωγή και διαγραϕή 302 12.4 Τυχαία κατασκευασμένα δυαδικά δέντρα αναζήτησης 308
Περιεχόμενα vii 13 Μελανέρυθρα δένδρα 317 13.1 Ιδιότητες των μελανέρυθρων δένδρων 317 13.2 Περιστροϕές 321 13.3 Εισαγωγή 324 13.4 Διαγραϕή 332 14 Επαύξηση δομών δεδομένων 348 14.1 Δυναμικές διατακτικές στατιστικές 348 14.2 Η επαύξηση δομών δεδομένων στην πράξη 355 14.3 Δένδρα διαστημάτων 358 IV Ανώτερες τεχνικές σχεδίασης και ανάλυσης Εισαγωγή 369 15 Δυναμικός προγραμματισμός 371 15.1 Κοπή ράβδου 372 15.2 Πολλαπλασιασμός αλληλουχίας πινάκων 382 15.3 Στοιχεία δυναμικού προγραμματισμού 390 15.4 Μέγιστη κοινή υπακολουθία 403 15.5 Βέλτιστα (στατικά) δυαδικά δένδρα αναζήτησης 409 16 Άπληστοι αλγόριθμοι 427 16.1 Ενα πρόβλημα επιλογής δραστηριοτήτων 428 16.2 Στοιχεία της άπληστης στρατηγικής 436 16.3 Κώδικες Huffman 442 16.4 Θεωρητική θεμελίωση της άπληστης μεθοδολογίας 451 16.5 Ενα πρόβλημα χρονοπρογραμματισμού εργασιών ως μητροειδές 458 17 Αντισταθμιστική ανάλυση 467 17.1 Η αθροιστική μέθοδος 468 17.2 Η χρεωπιστωτική μέθοδος 472 17.3 Η ενεργειακή μέθοδος 475 17.4 Δυναμικοί πίνακες 479 V Δομές δεδομένων προηγμένης σχεδίασης Εισαγωγή 495 18 Δένδρα Β 498 18.1 Ορισμός των δένδρων Β 502 18.2 Βασικές πράξεις σε δένδρα Β 505 18.3 Διαγραϕή κλειδιού από δένδρο Β 513 19 Σωροί Fibonacci 520 19.1 Δομή των σωρών Fibonacci 521 19.2 Πράξεις συγχωνεύσιμου σωρού 524 19.3 Μείωση κλειδιού και διαγραϕή κόμβου 533 19.4 Φραγή του μέγιστου βαθμού 537
viii Περιεχόμενα 20 Δένδρα van Emde Boas 543 20.1 Προκαταρκτικές τεχνικές 544 20.2 Μια αναδρομική δομή 548 20.3 Το δένδρο van Emde Boas 557 21 Δομές δεδομένων για παράσταση ξένων συνόλων 573 21.1 Πράξεις ξένων συνόλων 573 21.2 Αναπαράσταση ξένων συνόλων μέσω αλυσίδων 576 21.3 Δάση ξένων συνόλων 580 21.4 Ανάλυση της ένωσης κατά τάξη με συμπίεση κλάδου 584 VI Αλγόριθμοι γραϕημάτων Εισαγωγή 599 22 Στοιχειώδεις αλγόριθμοι γραϕημάτων 601 22.1 Αναπαραστάσεις γραϕημάτων 601 22.2 Οριζόντια διερεύνηση 606 22.3 Καθοδική διερεύνηση 615 22.4 Τοπολογική ταξινόμηση 625 22.5 Ισχυρά συνδεδεμένες συνιστώσες 628 23 Ελαϕρύτατα συνδετικά δένδρα 638 23.1 Επέκταση ελαϕρύτατου συνδετικού δένδρου 639 23.2 Οι αλγόριθμοι των Kruskal και Prim 645 24 Ομοαϕετηριακές ελαϕρύτατες διαδρομές 658 24.1 Ο αλγόριθμος των Bellman-Ford 666 24.2 Ομοαϕετηριακές ελαϕρύτατες διαδρομές σε κατευθυντά άκυκλα γραϕήματα 671 24.3 Αλγόριθμος του Dijkstra 674 24.4 Περιορισμοί διαϕοράς και ελαϕρύτατες διαδρομές 681 24.5 Αποδείξεις των ιδιοτήτων ελαϕρύτατων διαδρομών 687 25 Πανζευκτικές ελαϕρύτατες διαδρομές 701 25.1 Ελαϕρύτατες διαδρομές και πολλαπλασιασμός πινάκων 703 25.2 Ο αλγόριθμος των Floyd-Warshall 710 25.3 Αλγόριθμος του Johnson για αραιά γραϕήματα 717 26 Μέγιστη ροή 726 26.1 Δίκτυα ροής 727 26.2 Η μέθοδος των Ford-Fulkerson 733 26.3 Μέγιστη διμερής αντιστοίχιση 749 26.4 Αλγόριθμοι διοχέτευσης-αναβάθμισης 754 26.5 Ο αλγόριθμος της προτακτικής αναβάθμισης 767
Περιεχόμενα ix VII Επιλεγμένα θέματα Εισαγωγή 787 27 Πολυνηματικοί αλγόριθμοι 790 27.1 Τα βασικά στοιχεία της δυναμικής πολυνημάτωσης 792 27.2 Πολυνηματικός πολλαπλασιασμός πινάκων 811 27.3 Πολυνηματική συγχωνευτική ταξινόμηση 816 28 Πράξεις σε πίνακες 831 28.1 Επίλυση συστημάτων γραμμικών εξισώσεων 831 28.2 Αντιστροϕή πινάκων 844 28.3 Συμμετρικοί θετικά ορισμένοι πίνακες και προσέγγιση ελαχίστων τετραγώνων 850 29 Γραμμικός προγραμματισμός 860 29.1 Τυπική και αποκλιτική μορϕή 868 29.2 Διατύπωση προβλημάτων με τη μορϕή γραμμικών προγραμμάτων 876 29.3 Ο πολυτοπικός αλγόριθμος 882 29.4 Δυϊκότητα 897 29.5 Η αρχική βασική εϕικτή λύση 903 30 Πολυώνυμα και FFT 915 30.1 Αναπαράσταση πολυωνύμων 917 30.2 Οι μετασχηματισμοί DFT και FFT 923 30.3 Δραστικές υλοποιήσεις FFT 931 31 Αριθμοθεωρητικοί αλγόριθμοι 942 31.1 Στοιχειώδεις έννοιες της θεωρίας αριθμών 943 31.2 Μέγιστος κοινός διαιρέτης 949 31.3 Υπολοιπική αριθμητική 955 31.4 Επίλυση υπολοιπικών γραμμικών εξισώσεων 962 31.5 Το κινεζικό θεώρημα του υπολοίπου 966 31.6 Δυνάμεις ενός στοιχείου 970 31.7 Το κρυπτοσύστημα δημόσιου κλειδιού RSA 974 31.8 Ελεγχος πρώτευσης 981 31.9 Ακέραιη παραγοντοποίηση 992 32 Ταύτιση συμβολοσειρών 1002 32.1 Ο απλοϊκός αλγόριθμος ταύτισης συμβολοσειρών 1005 32.2 Ο αλγόριθμος Rabin-Karp 1007 32.3 Ταύτιση συμβολοσειρών με πεπερασμένα αυτόματα 1012 32.4 Ο αλγόριθμος Knuth-Morris-Pratt 1019 33 Υπολογιστική γεωμετρία 1029 33.1 Ιδιότητες ευθύγραμμων τμημάτων 1030 33.2 Πώς προσδιορίζεται εάν υπάρχει ζεύγος τεμνόμενων τμημάτων 1036 33.3 Εύρεση του κυρτού καλύμματος 1044 33.4 Εύρεση του ζεύγους εγγύτατων σημείων 1055
x Περιεχόμενα 34 NP-πληρότητα 1064 34.1 Πολυωνυμικός χρόνος 1070 34.2 Επαλήθευση πολυωνυμικού χρόνου 1078 34.3 NP-πληρότητα και αναγωγιμότητα 1083 34.4 Αποδείξεις NP-πληρότητας 1095 34.5 NP-πλήρη προβλήματα 1103 35 Προσεγγιστικοί αλγόριθμοι 1125 35.1 Το πρόβλημα του κομβικού καλύμματος 1127 35.2 Το πρόβλημα του περιοδεύοντος πωλητή 1130 35.3 Το πρόβλημα της κάλυψης συνόλου 1136 35.4 Τυχαιότητα και γραμμικός προγραμματισμός 1142 35.5 Το πρόβλημα του αθροίσματος υποσυνόλου 1147 VIII Παράρτημα: Μαθηματικό υπόβαθρο Εισαγωγή Π 1 Αʹ Αθροίσματα Π 2 Αʹ.1 Τύποι και ιδιότητες αθροισμάτων Π 2 Αʹ.2 Φραγή αθροισμάτων Π 6 Βʹ Σύνολα, σχέσεις, γραϕήματα και άλλα Π 14 Βʹ.1 Σύνολα Π 14 Βʹ.2 Σχέσεις Π 19 Βʹ.3 Συναρτήσεις Π 22 Βʹ.4 Γραϕήματα Π 24 Βʹ.5 Δένδρα Π 29 Γʹ Απαρίθμηση και πιθανότητες Π 39 Γʹ.1 Απαρίθμηση Π 39 Γʹ.2 Πιθανότητες Π 45 Γʹ.3 Διακριτές τυχαίες μεταβλητές Π 51 Γʹ.4 Η γεωμετρική και η διωνυμική κατανομή Π 56 Γʹ.5 Οι ουρές της διωνυμικής κατανομής Π 62 Δʹ Πίνακες Π 71 Δʹ.1 Πίνακες και πράξεις με πίνακες Π 71 Δʹ.2 Βασικές ιδιότητες πινάκων Π 76 Βιβλιογραϕία Β 1