Σχετικά έγγραφα

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

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

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

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

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

2 ) d i = 2e 28, i=1. a b c

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Συντομότερες Διαδρομές

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

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

u v 4 w G 2 G 1 u v w x y z 4

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Αναζήτηση Κατά Πλάτος

Κατευθυνόμενα γραφήματα. Μαθηματικά Πληροφορικής 6ο Μάθημα. Βρόχοι. Μη κατευθυνόμενα γραφήματα. Ορισμός

Κεφάλαιο 3. Γραφήµατα v1.0 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

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

Αλγόριθμοι Γραφημάτων

Κατευθυνόμενα γραφήματα. Μαθηματικά Πληροφορικής 6ο Μάθημα. Βρόχοι. Μη κατευθυνόμενα γραφήματα. Ορισμός

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

Θεωρία Γραφημάτων 6η Διάλεξη

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

Αλγόριθμοι Γραφημάτων

3η Σειρά Γραπτών Ασκήσεων

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

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1

Αναζήτηση Κατά Πλάτος

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

Συντομότερες ιαδρομές

Κατευθυνόμενα γραφήματα. Μαθηματικά Πληροφορικής 6ο Μάθημα. Βρόγχοι. Μη κατευθυνόμενα γραφήματα. Ορισμός

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

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

Το πρόβλημα μονοδρόμησης (The One-Way Street Problem)

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

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

Συντομότερες Διαδρομές

Προσεγγιστικοί Αλγόριθμοι

Κεφάλαιο 3. Γραφήματα. v1.3 ( ) Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Αναζήτηση Κατά Πλάτος

Συντομότερες ιαδρομές

Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων

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

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

Θεωρία Γραφημάτων 5η Διάλεξη

Ουρά Προτεραιότητας: Heap

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

Αναζήτηση Κατά Πλάτος

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

Κεφάλαιο 3. Γραφήµατα v1.1 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

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

Βασικές Έννοιες Θεωρίας Γραφημάτων

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

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

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

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

Υπολογιστικό Πρόβληµα

Τίτλος Μαθήματος: Θεωρία Γραφημάτων. Ενότητα: Εισαγωγή σε βασικές έννοιες. Διδάσκων: Λέκτορας Xάρης Παπαδόπουλος. Τμήμα: Μαθηματικών

Ασκηση 1 [ ] Παράδοση : Τετάρτη , 13:00

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

1 Διάσχιση κατευθυνόμενων γραφημάτων

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

Πανεπιστήμιο Στερεάς Ελλάδας Τμήμα Πληροφορικής Εξάμηνο ΣΤ ΘΕΩΡΙΑ ΓΡΑΦΩΝ

Θεωρία Υπολογισμού και Πολυπλοκότητα Μαθηματικό Υπόβαθρο

Βασικές Έννοιες Θεωρίας Γραφημάτων

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

Εισαγωγή στην Επιστήμη των Υπολογιστών

Στοιχεία Θεωρίας Γράφων (Graph Theory)

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

Θεωρία Γραφημάτων 5η Διάλεξη

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

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

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή

Διαίρει και Βασίλευε. πρόβλημα μεγέθους Ν. διάσπαση. πρόβλημα μεγέθους k. πρόβλημα μεγέθους Ν-k

Εισαγωγικές Έννοιες. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007

Αλγόριθµοι Γραφηµάτων

Άσκηση 3 (ανακοινώθηκε στις 14 Μαΐου 2018, προθεσμία παράδοσης: 8 Ιουνίου 2018, 12 τα μεσάνυχτα).

Δομές Δεδομένων και Αλγόριθμοι. Λουκάς Γεωργιάδης

Διαχρονικές δομές δεδομένων

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

Γράφοι: κατευθυνόμενοι και μη

Κεφάλαιο 4ο: Δικτυωτή Ανάλυση

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

Εισαγωγή στην Επιστήμη των Υπολογιστών

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

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

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

ΠΛΗ 20, 4 η ΟΣΣ: Βασικές Έννοιες Θεωρίας Γραφημάτων

Διάλεξη 21: Γράφοι IV - Βραχύτερα Μονοπάτια σε Γράφους

Θέματα Υπολογισμού στον Πολιτισμό - Δένδρα. Δένδρα

Graph Algorithms. Παρουσίαση στα πλαίσια του μαθήματος «Παράλληλοι Αλγόριθμοι» Καούρη Γεωργία Μήτσου Βάλια

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

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

Δρομολόγηση Και Πολύχρωματισμός. Γραφημάτων ΚΑΡΑΓΕΩΡΓΟΣ ΤΙΜΟΘΕΟΣ Α.Μ 1026

ΣΥΝΕΚΤΙΚΟΤΗΤΑ ΓΡΑΦΗΜΑΤΩΝ

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

Ενότητα 5: Αλγόριθμοι γράφων και δικτύων

Transcript:

Πανεπιστήμιο Πατρών Πολυτεχνική Σχολή Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Μιχαήλ Παναγιώτης (Α.Μ.: 607) Νέος Δυναμικός Τύπος Γραφημάτων Ευρείας Κλίμακας και Εφαρμογές του Επιβλέπων Καθηγητής Χρήστος Ζαρολιάγκης Καθηγητής, Τμήμα Μηχανικών Η/Υ & Πληροφορικής, Πανεπιστήμιο Πατρών Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Τριμελής Επιτροπή Σωτήρης Νικολετσέας Αν. Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Κωνσταντίνος Τσίχλας Λέκτορας Τμήμα Επιστήμης Υπολογιστών Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης 9 Ιουλίου 2012

Ευχαριστίες Για την ολοκλήρωση αυτής της εργασίας έλαβα την βοήθεια αρκετών ανθρώπων που θα ήθελα πραγματικά να ευχαριστήσω. Πρώτα, θα ήθελα να εκφράσω την ευγνωμοσύνη μου στον επιβλέποντα καθηγητή μου, κ. Χρήστο Ζαρολιάγκη, για όλη την βοήθεια που μου παρείχε. Τον ευχαριστώ για την εμπιστοσύνη του, τις εύστοχες παρατηρήσεις του και τις συμβουλές του σε κάθε στάδιο της εργασίας. Στη συνέχεια θα ήθελα να ευχαριστήσω τα άτομα που αφιέρωσαν χρόνο για την εισαγωγή μας στις ιδιαίτερες δομές δεδομένων που χρησιμοποιήσαμε. Πρώτα, τον κ. Κωνσταντίνο Τσίχλα, για την παρουσίαση των cache-oblivious δομών δεδομένων για πρώτη φορά σε εμάς. Επίσης, τον Daniel Delling για τις για αμέτρητες συμβουλές του και την παραχώρηση της πλατφόρμας γραφημάτων που έχει δημιουργήσει, καθώς η επέκτασή της αποτέλεσε βασικό κίνητρο της εργασίας. Ευχαριστώ την Γεωργία Μαλή, που συνέβαλε σημαντικά στο να ξεπεραστούν σχεδιαστικά αδιέξοδα κατά την κατασκευή της νέας δομής γραφημάτων, και για τον χρόνο που αφιέρωσε για την αποσφαλμάτωση ολόκληρης της νέας πλατφόρμας αλγορίθμων. Ευχαριστώ επίσης, τον αδερφό μου, Άγγελο Μιχαήλ, και τον Βασίλη Κωνσταντίνου για την βοήθειά τους σε περίπλοκα μαθηματικά προβλήματα που προέκυψαν κατά τη διάρκεια της εργασίας. Τέλος, ένα μεγάλο ευχαριστώ στην οικογένειά μου, που πάντοτε στηρίζει τις επιλογές μου.

Περίληψη Στην διπλωματική εργασία παρουσιάζεται μια νέα δομή δεδομένων ειδικά σχεδιασμένη για δίκτυα μεταφορών ευρείας κλίμακας τα οποία αλλάζουν δυναμικά. Η νέα δομή δεδομένων γραφημάτων μας παρέχει ταυτόχρονα τρία μοναδικά χαρακτηριστικά: 1. Σύμπτυξη(Compactness): ικανότητα να προσπελάσει αποδοτικά διαδοχικές κορυφές και ακμές, μια απαίτηση όλων των αλγορίθμων γραφημάτων). 2. Ευκινησία(Agility): ικανότητα να αλλάξει και να ρυθμίσει εξαρχής την εσωτερική της διάταξη με σκοπό να βελτιώσει την τοπικότητα των αναφορών των στοιχείων, σύμφωνα με έναν δεδομένο αλγόριθμο. 3. Δυναμικότητα(Dynamicity): ικανότητα να ενθέσει ή να διαγράψει αποδοτικά κορυφές και ακμές. Ολες οι προηγούμενες γνωστές δομές γραφημάτων δεν υποστήριζαν τουλάχιστον ένα από τα προηγούμενα χαρακτηριστικά ή/και δεν μπορούσαν να εφαρμοστούν σε δυναμικά δίκτυα μεταφορών ευρείας κλίμακας. Σε αυτή τη διπλωματική εργασία, παρουσιάζεται η πρακτικότητα της νέας δομής γραφημάτων εκτελώντας μια εκτενή πειραματική μελέτη για δρομολόγηση συντομότερων διαδρομών σε Ευρωπαϊκά οδικά δίκτυα ευρείας κλίμακας με μερικές δεκάδες εκατομμύρια κορυφές και ακμές. Χρησιμοποιώντας κλασικούς αλγόριθμους εύρεσης συντομότερων διαδρομών, επιτυγχάνονται εύκολα χρόνοι ερωτημάτων από μια αρχική κορυφή σε μια τελική κορυφή της τάξης των milliseconds, ενώ η νέα δομή γραφημάτων μας μπορεί να ενημερωθεί σε μόλις μερικά microseconds μετά από μια ένθεση ή διαγραφή μιας κορυφής ή ακμής.

Περιεχόμενα 1 Εισαγωγή 3 1.1 Σημασία του προβλήματος.................... 3 1.2 Στόχοι της διπλωματικής..................... 5 1.3 Συνεισφορά της διπλωματικής.................. 6 1.4 Δομή............................... 7 2 Βασικές Εννοιες 9 2.1 Γραφήματα............................ 9 2.2 Αναπαράσταση ενός γραφήματος................. 11 2.2.1 Αναπαράσταση Λίστας Γειτνίασης............ 11 2.2.2 Αναπαράσταση γραφήματος Ευθύδρομου Άστρου και Αντίστροφου Αστρου.................... 12 2.2.3 Αποθήκευση παράλληλων ακμών............. 14 2.2.4 Αναπαράσταση μη κατευθυνόμενων γραφημάτων.... 14 2.3 Δέντρα.............................. 14 2.3.1 Δέντρα με ρίζα...................... 15 2.3.2 Δυαδικά δέντρα...................... 15 2.3.3 Πλήρη δυαδικά δέντρα - Δομή σωρού.......... 16 2.3.4 Αναπαράσταση δένδρων.................. 16 2.4 Διερεύνηση κορυφών του γραφήματος.............. 17 2.5 Το πρόβλημα Εύρεσης Συντομότερων Διαδρομών....... 19 2.5.1 Ο απλός αλγόριθμος Dijkstra.............. 19 2.5.2 Ο αμφίδρομος αλγόριθμος Dijkstra........... 21 2.5.3 Στοχοκατευθυνόμενη αναζήτηση και ο αλγόριθμος A. 22 3 Ιεραρχία Μνήμης και Δομές Δεδομένων Cache Oblivious 25 3.1 Ιεραρχία μνήμης και δομές δεδομένων Cache-Oblivious..... 25 3.1.1 Αλγόριθμοι και δομές δεδομένων Cache-oblivious... 26 3.1.2 Ιδεατό μοντέλο κρυφής μνήμης.............. 26

2 ΠΕΡΙΕΧ ΟΜΕΝΑ 3.2 Διάταξη δυαδικών δέντρων κατά van Emde Boas........ 28 3.3 Πίνακες πακεταρισμένης-μνήμης................. 30 4 Γράφημα Πακεταρισμένης-μνήμης 35 4.1 Δομή δεδομένων......................... 35 4.2 Λειτουργίες............................ 37 4.3 Εσωτερική αναδιάταξη κορυφών................. 39 4.4 Ανάλυση πολυπλοκότητας λειτουργιών.............. 39 4.5 Σύγκριση με άλλες δομές δεδομένων για αναπαράσταση γραφημάτων............................... 43 4.6 Θέματα υλοποίησης........................ 45 5 Πειραματική Αξιολόγηση 47 5.1 Ερωτήματα συντομότερων διαδρομών.............. 48 5.2 Τοπικότητα των αναφορών.................... 50 5.3 Δυναμικές ενημερώσεις...................... 53 5.4 Τυχαία ακολουθία λειτουργιών.................. 55 6 Συμπεράσματα και Προοπτικές 63

Κεφάλαιο 1 Εισαγωγή 1.1 Σημασία του προβλήματος Τα τελευταία χρόνια παρατηρούμε έναν πολύ μεγάλο αριθμό ερευνών για α- ποδοτική δρομολόγηση σε οδικά δίκτυα και δίκτυα μαζικής μεταφοράς. Για παράδειγμα, βλέπουμε εξαιρετικά γρήγορους αλγόριθμους που μπορούν να α- παντήσουν σε ερωτήματα συντομότερων διαδρομών από μια αρχική κορυφή σε μια τελική κορυφή (βάση μιας συγκεκριμένης μετρικής) σε milliseconds για οδικά δίκτυα ευρείας κλίμακας με μερικές δεκάδες εκατομμυρίων κορυφών και ακμών, μετά από ένα αρχικό βήμα προεπεξεργασίας [4, 8, 12]. Αυτοί οι αλγόριθμοι είναι έξυπνες επεκτάσεις ή/και παραλλαγές του κλασικού αλγορίθμου του Dijkstra [9], που είναι κάπως αργός όταν εκτελείται σε δίκτυα ευρείας κλίμακας, και για αυτόν τον λόγο συνήθως αναφέρονται ως τεχνικές επιτάχυνσης (πάνω στον αλγόριθμο του Dijkstra). Οι τεχνικές επιτάχυνσης χρησιμοποιούν όχι μόνο ευρετικές μεθόδους για να ελαχιστοποιήσουν το εύρος αναζήτησης του αλγορίθμου του Dijkstra, αλλά και βελτιστοποιήσεις στον τρόπο που υλοποιούνται. Από όσο γνωρίζουμε, οι δομές γραφημάτων που χρησιμοποιούνται είναι παραλλαγές της αναπαράστασης λίστας γειτνίασης και παρέχουν έλεγχο στην αποθήκευση των στοιχείων του γραφήματος. Αυτές οι παραλλαγές δεν είναι μόνο σύμπτυξη(compaction), με την έννοια ότι αποθηκεύουν κορυφές και ακμές σε γειτονικές διευθύνσεις μνήμης, αλλά υποστηρίζουν και αναδιάταξη(reordering) των κορυφών και των ακμών σε αυθαίρετη σχετική σειρά, έτσι ώστε να αυξήσουν την τοπικότητα των αναφορών του κύριου βρόχου του αλγορίθμου του Dijkstra. Η τελευταία λειτουργία, γνωστή και ως εσωτερική αναδιάταξη κορυφών του γραφήματος, έχει παίξει σημαντικό ρόλο στην επίτευξη αυτών των πολύ γρήγορων χρόνων εκτέλεσης [4, 8, 12, 14, 15] για ερωτήματα συντομότερων διαδρομών από μια

4 Εισαγωγή αρχική κορυφή σε μια τελική κορυφή. Αυτή η βελτιστοποίηση, βελτιώνει την τοπικότητα των αναφορών των κορυφών με μια αναδιάταξή τους μέσα στην ήδη δεσμευμένη μνήμη από το γράφημα, επιτυγχάνοντας καλύτερη απόδοση της κρυφής μνήμης των συστημάτων και κατά συνέπεια καλύτερους χρόνους εκτέλεσης των αλγορίθμων. Αυτές οι αναπαραστάσεις γραφημάτων είναι πολύ αποδοτικές στην στατική περίπτωση που το γράφημα δεν αλλάζει, αλλά η απόδοσή τους πέφτει δραματικά όταν γίνονται ενημερώσεις (updates) του γραφήματος. Ο λόγος είναι ότι, για να διατηρήσουν την συνεπτυγμένη τους φύση και τοπικότητα, μια ενημέρωση πρέπει να μετακινήσει προς τα δεξιά (shift) ένα μεγάλο αριθμό στοιχείων στην μνήμη. Ετσι, οι παραπάνω αναπαραστάσεις χρησιμοποιούνται κυρίως σε στατικά περιβάλλοντα, όπου το υποκείμενο δίκτυο δεν αλλάζει. Ωστόσο, η υπόθεση ότι το δίκτυο είναι στατικό δεν είναι πάντα ρεαλιστική στην πράξη. Για παράδειγμα, σε ένα οδικό δίκτυο: Η δομή του δικτύου αλλάζει (χτίζονται καινούριες διαδρομές, καταστρέφονται οι παλιές). Μια διαφορετική συνάρτηση κόστους χρησιμοποιείται (διαφορετικά κριτήρια βέλτιστων διαδρομών). Κάτι αναπάντεχο συμβαίνει σε κάποια διαδρομή (κάποια καθυστέρηση, κάποιο ατύχημα). Τα κόστη των διαδρομών εξαρτώνται από την χρονική στιγμή που βρισκόμαστε (σε ένα οδικό δίκτυο, το βράδυ οι δρόμοι είναι άδειοι). Στις παραπάνω περιπτώσεις, το γράφημα που αναπαριστά το δίκτυο πρέπει να ενημερωθεί και οποιαδήποτε δεδομένα προεπεξεργασίας πρέπει να υπολογιστούν από την αρχή. Ετσι είναι απαραίτητο οποιαδήποτε δομή δεδομένων γραφημάτων χρησιμοποιείται σε τέτοιες εφαρμογές να υποστηρίζει αποδοτικές ενθέσεις και διαγραφές κορυφών και ακμών. Συνοψίζοντας, η αποδοτική δρομολόγηση σε δυναμικά δίκτυα μεταφορών ευρείας κλίμακας χρειάζεται μια δομή γραφημάτων που να έχει τα παρακάτω χαρακτηριστικά: 1. Σύμπτυξη(Compactness): ικανότητα να προσπελάσει αποδοτικά διαδοχικές κορυφές και ακμές. 2. Ευκινησία(Agility): ικανότητα να αλλάξει και να ρυθμίσει εξαρχής την εσωτερική της διάταξη με σκοπό να βελτιώσει την τοπικότητα των αναφορών των στοιχείων, σύμφωνα με έναν δεδομένο αλγόριθμο.

1.2 Στόχοι της διπλωματικής 5 3. Δυναμικότητα(Dynamicity): ικανότητα να ενθέσει ή να διαγράψει αποδοτικά κορυφές και ακμές. Μια προφανής επιλογή, σύμφωνα με τα παραπάνω χαρακτηριστικά, είναι η αναπαράσταση λίστας γειτνίασης, υλοποιημένη με συνδεδεμένες λίστες από γειτονικές κορυφές, λόγω της απλότητας και της δυναμικότητάς της. Ωστόσο, αν και η δομή αυτή είναι εκ φύσεως δυναμική, τέτοια ώστε να υποστηρίζει ενθέσεις και διαγραφές κορυφών και ακμών σε χρόνο O(1), δεν παρέχει καμία εγγύηση για την πραγματική διάταξη του γραφήματος στην μνήμη (που γίνεται από τον διαχειριστή μνήμης του συστήματος). Ετσι, έχει δυναμικότητα αλλά δεν προσφέρει ούτε σύμπτυξη, ούτε ευκινησία. Μια πολύ ενδιαφέρουσα παραλλαγή της αναπαράστασης λίστας γειτνίασης, που χρησιμοποιείται πολύ συχνά σε τεχνικές επιτάχυνσης (δείτε π.χ. [4]) είναι η αναπαράσταση ευθύδρομου άστρου [1, 2], η οποία αποθηκεύει την λίστα γειτνίασης σε έναν πίνακα, που χρησιμοποιείται ως ένα συνεχόμενο τμήμα δεσμευμένης μνήμης παραχωρημένο μόνο στο γράφημα. Οι κορυφές και οι ακμές μπορούν να διαταχθούν με τέτοιο τρόπο στην μνήμη ώστε να είναι βέλτιστος για τους αντίστοιχους αλγόριθμους, καταλαμβάνοντας διαδοχικές θέσεις μνήμης οι οποίες μπορούν αργότερα να προσπελαστούν διαδοχικά με την μέγιστη απόδοση. Αυτή η αναπαράσταση είναι εξαιρετικά γρήγορη όταν θεωρούμε ένα στατικό γράφημα, αλλά όταν απαιτείται μια ενημέρωση, ο χρόνος για ένθεση ή διαγραφή κορυφών και ακμών είναι απαγορευτικός διότι πολλά στοιχεία θα πρέπει να μετακινηθούν προς τα δεξιά για να δημιουργηθεί χώρος για τα νέα στοιχεία. Ετσι, η αναπαράσταση ευθύδρομου άστρου προσφέρει σύμπτυξη και ευκινησία, και έτσι εξαιρετικά γρήγορους χρόνους ερωτημάτων, αλλά δεν προσφέρει δυναμικότητα. 1.2 Στόχοι της διπλωματικής Ο κύριος στόχος της διπλωματικής είναι η σχεδίαση και η υλοποίηση ενός νέου δυναμικού τύπου γραφημάτων που να υποστηρίζει την δρομολόγηση σε δίκτυα ευρείας κλίμακας με δυναμικές ενημερώσεις, πιο αποδοτικά από ό,τι οι μέχρι σήμερα δομές που χρησιμοποιούνται. Πιο συγκεκριμένα οι στόχοι είναι: Ανάλυση των κύριων δομών γραφημάτων που χρησιμοποιούνται στην βιβλιογραφία. Αναγνώριση των μειονεκτημάτων τους με στόχο την εξάλειψή τους από την νέα δομή. Υλοποίηση των παραπάνω δομών με στόχο την μετέπειτα πειραματική αξιολόγηση.

6 Εισαγωγή Σχεδίαση και υλοποίηση μιας νέας πρωτότυπης δομής δεδομένων για κατευθυνόμενα γραφήματα. Πειραματική αξιολόγηση της νέας δομής έναντι των κλασικών αναπαραστάσεων γραφημάτων. 1.3 Συνεισφορά της διπλωματικής Στην παρούσα εργασία παρουσιάζουμε μια νέα δομή δεδομένων για κατευθυνόμενα γραφήματα που προσφέρει όλα τα χαρακτηριστικά που απαιτούνται για αποδοτική δρομολόγηση σε δυναμικά δίκτυα μεταφορών ευρείας κλίμακας. Πιο συγκεκριμένα: 1. Η ακολουθιακή προσπέλαση διαδοχικών κορυφών ή ακμών είναι κοντά στην βέλτιστη (κατά ένα σταθερό παράγοντα) σε σχέση με τον χρόνο ε- κτέλεσης και τις μεταφορές μνήμης, και κατά συνέπεια συγκρίσιμη με την μέγιστη αποδοτικότητα της αναπαράστασης ευθύδρομου άστρου (σύμπτυξη). 2. Οι κορυφές και οι ακμές μπορούν να επαναδιαταχθούν μέσα στην δεσμευμένη από το γράφημα μνήμη, με σκοπό να αυξήσουν την τοπικότητα των αναφορών οποιουδήποτε αλγόριθμου, και άρα την απόδοσή του. Ο- ποιαδήποτε τεχνική επιτάχυνσης στην οποία μια διάταξη κορυφών είναι ιδιαίτερης σημασίας μπορεί να δώσει αυτή την διάταξη ως είσοδο στο γράφημα (ευκινησία). 3. Η ένθεση ή η διαγραφή κορυφών είναι συγκρίσιμη σε απόδοση με την απόδοση στην αναπαράσταση λίστας γειτνίασης υλοποιημένη με συνδεδεμένες λίστες, και κατά συνέπεια αρκετά γρήγορη για πρακτικές εφαρμογές (δυναμικότητα). Η νέα δομή μπορεί να απαντήσει σε ερωτήματα συντομότερων διαδρομών σε δίκτυα μεταφορών ευρείας κλίμακας χρησιμοποιώντας τον αλγόριθμο του Dijkstra και δύο κλασικές τεχνικές επιτάχυνσης σε milliseconds, πολύ κοντά στην βέλτιστη απόδοση της αναπαράστασης ευθύδρομου άστρου. Επίσης, υποστηρίζει ενθέσεις και διαγραφές κορυφών και ακμών, καθώς και αλλαγές στην διάταξη των κορυφών και των ακμών σε μερικά microseconds. Στην παρούσα εργασία παρουσιάζεται επίσης μια πειραματική μελέτη για την νέα δομή δεδομένων. Η πειραματική μελέτη έχει ως στόχο να αναδείξει την αποδοτικότητα της νέας δομής δεδομένων πάνω σε γνωστές τεχνικές ε- πιτάχυνσης. Ο στόχος της αξιολόγησης δεν είναι να συγκριθούν οι τεχνικές

1.4 Δομή 7 επιτάχυνσης που χρησιμοποιούμε, με άλλες, πιο γρήγορες και αποδοτικές, αλλά να συγκριθούν οι αναπαραστάσεις γραφημάτων μεταξύ τους πάνω στις ίδιες τεχνικές. Η δομή γραφημάτων που παρουσιάζεται είναι μια πολύ καλή συμβιβαστική λύση ανάμεσα σε δύο δομές με ακραίες αποδόσεις, την αναπαράσταση λίστας γειτνίασης που προσφέρει βέλτιστη δυναμικότητα και την αναπαράσταση ευθύδρομου άστρου που παρέχει σύμπτυξη και ευκινησία σε βέλτιστο βαθμό. Η δομή γραφημάτων μας είναι μόλις 2% πιο αργή από την αναπαράσταση ευθύδρομου άστρου στους χρόνους απάντησης ερωτημάτων συντομότερων διαδρομών αλλά πάνω από ένα εκατομμύριο φορές πιο γρήγορη κατά τις ενημερώσεις του γραφήματος. Αντίστοιχα, είναι μόνο δέκα φορές πιο αργή από την αναπαράσταση λίστας γειτνίασης κατά τις ενημερώσεις του γραφήματος αλλά κοντά στο 30% πιο γρήγορη στην απάντηση των ερωτημάτων από αυτήν. Ετσι στη γενική περίπτωση, η συνολική απόδοση της δομής που παρουσιάζουμε είναι καλύτερη από τις άλλες κλασικές δομές που χρησιμοποιούνται. Αξίζει να σημειωθεί ότι η νέα δομή γραφημάτων δεν είναι η ίδια μια τεχνική επιτάχυνσης αλλά μπορεί να αυξήσει την απόδοση οποιασδήποτε τεχνικής επιτάχυνσης υλοποιηθεί πάνω σε αυτήν. Υπάρχουσες τεχνικές που λειτουργούν πάνω σε ένα στατικό γράφημα και μπορούν να επωφεληθούν από την δυναμική φύση της νέας δομής ώστε να εφαρμόζονται σε δυναμικές περιπτώσεις, χωρίς να θυσιάσουν την απόδοσή τους στην στατική περίπτωση. Θα θέλαμε να παρατηρήσουμε ότι η προσέγγισή μας σε σχέση με δίκτυα μεταφορών ευρείας κλίμακας είναι η πρώτη που ασχολείται με την δυναμοποίηση του ίδιου του γραφήματος. Σε αντίθεση, οι μέχρι τώρα γνωστές προσεγγίσεις που ασχολούνται με δυναμικές περιπτώσεις [19, 21], λειτουργούν σε ένα γράφημα στατικής δομής και διάταξης και ενδιαφέρονται κυρίως για δυναμικούς αλγόριθμους που ενημερώνουν τα δεδομένα της προεπεξεργασίας. Ολες αυτές οι τεχνικές μπορούν επίσης να υλοποιηθούν πάνω στην δική μας δομή γραφημάτων και έτσι να επωφεληθούν από αυτήν. 1.4 Δομή Στο Κεφάλαιο 2, κάνουμε μια σύντομη εισαγωγή στους όρους που χρησιμοποιούμε στην συνέχεια. Παραθέτουμε θεωρητικές έννοιες που αφορούν τα γραφήματα και περιγράφουμε τους τρόπους αναπαράστασής τους. Στη συνέχεια δίνουμε ορισμούς, ιδιότητες και αναπαραστάσεις ενός υποσυνόλου γραφημάτων, των δένδρων, που έχουν ιδιαίτερο ενδιαφέρον για τις δομές που θα παρουσιάσουμε. Παράλληλα, στο Κεφάλαιο 2 περιγράφουμε κάποιους αλγόριθμους, κυρίως αλγόριθμους εύρεσης συντομότερων διαδρομών που θα μας απασχολήσουν στην

8 Εισαγωγή συνέχεια. Στο Κεφάλαιο 3, εισάγουμε το μοντέλο ανάλυσης που θα χρησιμοποιήσουμε και εισάγουμε την έννοια των cache-oblivious αλγορίθμων και δομών δεδομένων. Στη συνέχεια παρουσιάζουμε δύο cache-oblivious δομές δεδομένων που είναι δομικά συστατικά της νέας δομής γραφημάτων που παρουσιάζουμε. Στο Κεφάλαιο 4, παρουσιάζουμε την νέα δομή δεδομένων γραφημάτων, περιγράφουμε τις διάφορες λειτουργίες της και παραθέτουμε την θεωρητική α- νάλυσή τους. Παράλληλα, την συγκρίνουμε με άλλες βασικές δομές δεδομένων γραφημάτων και παρουσιάζουμε τα ειδικά χαρακτηριστικά της. Το Κεφάλαιο 5 περιέχει μια πλήρη πειραματική αξιολόγηση της νέας δομής γραφημάτων. Η αξιολόγησή της γίνεται έναντι γνωστών δομών δεδομένων που χρησιμοποιούνται στην πράξη, σε στατικά και δυναμικά σενάρια. Οι δρομολογήσεις γίνονται σε οδικά Ευρωπαϊκά δίκτυα χρησιμοποιώντας κλασικές τεχνικές επιτάχυνσης του αλγορίθμου του Dijkstra. Ολα τα αποτελέσματα παρατίθενται σε πίνακες και γραφικές παραστάσεις. Το Κεφάλαιο 6 περιέχει κάποια συμπεράσματά μας, και προτάσεις για μελλοντική εργασία.

Κεφάλαιο 2 Βασικές Εννοιες Στο κεφάλαιο αυτό ορίζουμε κάποιες βασικές έννοιες που θα χρησιμοποιήσουμε αργότερα. Η περιγραφή τους θα είναι περιληπτική, ο αναγώστης μπορεί ωστόσο να ανατρέξει στην σχετική βιβλιογραφία που παρατίθεται. 2.1 Γραφήματα Ενα γράφημα συμβολίζεται G = (V, E) και αποτελείται από ένα πεπερασμένο μη μηδενικό σύνολο κορυφών V (vertices) και ένα πεπερασμένο σύνολο ακμών E (edges). Με n = V συμβολίζουμε το πλήθος των κορυφών και με m = E το πλήθος των ακμών. Μία ακμή e είναι είτε ένα σύνολο κορυφών, e = {u, v}, όπου u v, οπότε χαρακτηρίζεται μη-κατευθυνόμενη, ή ένα ζεύγος κορυφών, e = (u, v), οπότε χαρακτηρίζεται κατευθυνόμενη. Αντίστοιχα ένα γράφημα που αποτελείται μόνο από μη-κατευθυνόμενες ακμές, ονομάζεται απλό γράφημα ή μη-κατευθυνόμενο, ενώ ένα γράφημα που αποτελείται μόνο από κατευθυνόμενες ακμές, ονομάζεται κατευθυνόμενο. Μία ακμή e = (u, v) ή e = {u, v} προσπίπτει στις κορυφές u, v που ονομάζονται άκρα της ακμής. Η κορυφή u ονομάζεται αρχική της κατευθυνόμενης ακμής e = (u, v) (source(e) = u), και η κορυφή v τελική της (target(e) = v). Οι κορυφές u, v ονομάζονται γειτονικές όταν το γράφημα περιέχει μία ακμή με άκρα τις u, v. Μια ακμή e = (u, u) ονομάζεται βρόγχος. Δύο ακμές με τα ίδια άκρα ονομάζονται παράλληλες ακμές. Ο βαθμός μιάς κορυφής u, deg(u), είναι ο αριθμός των ακμών που προσπίπτουν στην u. Ο βαθμός εισόδου της u είναι ο αριθμός των κατευθυνόμενων ακμών του γραφήματος με τέλος την u. Αντίστοιχα ο βαθμός εξόδου μιάς κο-

10 Βασικές Εννοιες ρυφής u είναι ο αριθμός των κατευθυνόμενων ακμών του γραφήματος με αρχή την u. Συμβολίζουμε με τον μέγιστο βαθμό που έχει μια κορυφή στο γράφημα. Τέλος, μία κορυφή στην οποία δεν προσπίπτει καμία ακμή (έχει βαθμό 0) ονομάζεται απομονωμένη. Ενα γράφημα G = (V, E) ονομάζεται πλήρες (complete) όταν για κάθε ζεύγος κορυφών u, v V υπάρχει ακμή e = (u, v) που να ανήκει στο γράφημα. Εστω ένα γράφημα G = (V, E). Διαμερισμός (V 1, V 2,..., V k ) (partition) των κορυφών του G ονομάζεται ο διαχωρισμός των κορυφών του γραφήματος σε σύνολα V i τέτοια ώστε V i V, V 1 V 2... V k = V i = 0...k και V i V j = 0 i, j = 0...k. Αντίστοιχα, διαμερισμός (E 1, E 2,..., E k ) των ακμών του ονομάζεται ο διαχωρισμός των ακμών του γραφήματος σε σύνολα E i τέτοια ώστε E i E, E 1 E 2... E k = E i = 0...k και E i E j = 0 i, j = 0...k. Με αφαίρεση της ακμής e από ένα γράφημα G = (V, E) παίρνουμε το γράφημα (V, E e) το οποίο συμβολίζουμε G e. Με αφαίρεση της κορυφής u από ένα γράφημα G = (V, E) παίρνουμε το γράφημα (V {u}, E {e target(e) = u or source(e) = u}) το οποίο συμβολίζουμε G u. Το γράφημα G = (V, E ) λέγεται υπογράφημα του G = (V, E) όταν V V και E E. Το G = (V, E ) λέγεται επαγόμενο υπογράφημα του G = (V, E) όταν V V και το E περιέχει ακριβώς τις ακμές του G που έχουν και τα δύο τους άκρα στο G. Εστω γράφημα G = (V, E) και υπογράφημά του G = (V, E ). Αν V = V τότε το G = (V, E ) ονομάζεται γεννητικό υπογράφημα του G. Εστω κατευθυνόμενο γράφημα G = (V, E). Το γράφημα G = (V, E ) με E = {(u, v) (v, u) E} ονομάζεται «προς τα πίσω» γράφημα του G. Κάθε διαδικασία που εφαρμόζεται πάνω στο G ονομάζεται «προς τα πίσω» διαδικασία του G. Εστω n ένας μη-αρνητικός ακέραιος και G = (V, E) ένα γράφημα. Μια διαδρομή (path) μήκους n από την κορυφή u στην κορυφή v είναι μία ακολουθία n ακμών e 1, e 2,..., e n G, τέτοια ώστε e 1 = (x 0, x 1 ), e 2 = (x 1, x 2 ),..., e n = (x n 1, x n ) και u = x 0, v = x n. Μια διαδρομή ονομάζεται απλή αν δεν περιλαμβάνει την ίδια ακμή περισσότερες από μια φορά. Μια διαδρομή ονομάζεται κυκλική αν αρχίζει και τελειώνει

2.2 Αναπαράσταση ενός γραφήματος 11 στην ίδια κορυφή. Ονομάζουμε διάμετρο ενός γραφήματος G το μέγεθος της μεγαλύτερης α- πλής διαδρομής στο G. Εστω γράφημα G = (V, E). Το γράφημα αυτό ονομάζεται συνεκτικό αν για κάθε ζευγάρι κορυφών του u, v υπάρχει διαδρομή στο γράφημα που να τις ενώνει. 2.2 Αναπαράσταση ενός γραφήματος Στην βιβλιογραφία έχουν προταθεί πολλοί τρόποι αναπαράστασης ενός γραφήματος. Καθένας έχει διαφορετικά χαρακτηριστικά, και η επιλογή ενός ε- ξαρτάται σε μεγάλο βαθμό από την εφαρμογή στην οποία θα χρησιμοποιηθεί. Στην παρούσα εργασία, το ενδιαφέρον μας βρίσκεται κυρίως σε αραιά δυναμικά δίκτυα, όπως τα δίκτυα μεταφορών, και πιο συγκεκριμένα, τα οδικά δίκτυα. Για τέτοιου είδους δίκτυα μας απασχολούν κυρίως αναπαραστάσεις που απαιτούν γραμμικό χώρο, καθώς τα δίκτυα όχι μόνο είναι αραιά, αλλά και εξαιρετικά μεγάλου μεγέθους. Κατά συνέπεια, εξετάζουμε κυρίως αναπαραστάσεις που είναι παραλλαγές της αναπαράστασης λίστας γειτνίασης που απαιτεί γραμμικό χώρο για την αποθήκευση των στοιχείων ενός γραφήματος. Ολες οι αναπαραστάσεις που περιγράφονται στην παρούσα εργασία είναι αναπαραστάσεις κατευθυνόμενων γραφημάτων. 2.2.1 Αναπαράσταση Λίστας Γειτνίασης Η λίστα γειτνίασης A(u) μιας κορυφής u σε ένα γράφημα G = (V, E) ορίζεται ως το σύνολο A(u) = {w (u, w) E}. Η αναπαράσταση λίστας γειτνίασης (adjacency list representation) αποθηκεύει την λίστα γειτνίασης κάθε κορυφής σαν μια συνδεδεμένη λίστα. Μια συνδεδεμένη λίστα είναι μια συλλογή κελιών που το καθένα περιέχει ένα ή περισσότερα πεδία. Η λίστα γειτνίασης μιας κορυφής u είναι μια συνδεδεμένη λίστα με A(u) κελιά και κάθε κελί αντιστοιχεί σε μια ακμή (u, w) E. Το κελί που αντιστοιχεί στην ακμή (u, w) περιέχει τόσα πεδία όση και η πληροφορία που θέλουμε να αποθηκεύσουμε για κάθε ακμή. Ενα από τα πεδία είναι η κορυφή w. Κάθε κελί περιέχει άλλο ένα πεδίο με ένα δείκτη προς το επόμενο κελί στην συνδεδεμένη λίστα. Αν ένα κελί είναι το τελευταίο στην συγκεκριμένη λίστα, αυτός ο δείκτης είναι ίσος με μηδέν. Αφού πρέπει να αποθηκεύσουμε n συνδεδεμένες λίστες, μία για κάθε κορυφή, πρέπει επίσης να αποθηκεύσουμε μια συνδεδεμένη λίστα με δείκτες που

12 Βασικές Εννοιες να δείχνουν στο πρώτο κελί κάθε λίστας γειτνίασης. Το πετυχαίνουμε ο- ρίζοντας μια συνδεδεμένη λίστα n στοιχείων, f irst, της οποίας κάθε στοιχείο f irst(u) περιέχει έναν δείκτη στο πρώτο κελί της λίστας γειτνίασης της αντίστοιχης κορυφής u. Αν η λίστα γειτνίασης μιας κορυφής u είναι κενή, θέτουμε f irst(u) = 0. Το Σχήμα 2.2 δείχνει την αναπαράσταση λίστας γειτνίασης του γραφήματος στο Σχήμα 2.1. u0 (u0,u2) (u0,u1) (u0,u4) u1 (u1,u3) (u1,u4) (u1,u0) (u1,u2) u4 u2 u2 (u2,u0) (u2,u3) (u2,u4) (u2,u1) u3 u3 (u3,u1) (u3,u2) u0 u1 u4 Nodes (u4,u1) (u4,u2) Edges (u4,u0) Σχήμα 2.1: Παράδειγμα ενός γραφήματος με 5 κορυφές και 8 ακμές (όλες οι ακμές είναι δικατευθυνόμενες) Σχήμα 2.2: Αναπαράσταση λίστας γειτνίασης Σε αυτή την εργασία μερικές φορές υποθέτουμε ότι όταν υπάρχει μια ακμή (u, w) σε ένα γράφημα, υπάρχει και η αντίστροφη ακμή (w, u). Σε τέτοιες περιπτώσεις, όταν ενημερώνουμε την πληροφορία που είναι αποθηκευμένη στην ακμή (u, w) πρέπει να ενημερώσουμε και την πληροφορία στην ακμή (w, u). Αφού η μία ακμή ανήκει στην λίστα γειτνίασης της κορυφής u και η άλλη στην αντίστοιχη λίστα της κορυφής w, για να εκτελέσουμε αποδοτικά μια λειτουργία και στις δύο ακμές πρέπει να ξέρουμε πώς από μια ακμή (u, w) θα βρούμε την αντίστροφή της, (w, u). Για αυτό το λόγο, σε κάθε ακμή αποθηκεύουμε ένα επιπλέον πεδίο που περιέχει ένα δείκτη στο κελί που περιέχει την αντίστροφη ακμή. 2.2.2 Αναπαράσταση γραφήματος Ευθύδρομου Άστρου και Αντίστροφου Αστρου Η αναπαράσταση ευθύδρομου άστρου (forward star representation) ενός γραφήματος είναι παρόμοια με την αναπαράσταση λίστας γειτνίασης με την έννοια ότι επίσης αποθηκεύει τις λίστες γειτνίασης των κορυφών του γραφήματος. Αλλά αντί να τις αποθηκεύει ως συνδεδεμένες λίστες, τις αποθηκεύει σε ένα

2.2 Αναπαράσταση ενός γραφήματος 13 μοναδικό πίνακα ακμών. Για να δημιουργήσουμε αυτή την αναπαράσταση, αρχικά αποδίδουμε ένα μοναδικό αυθαίρετο αριθμό σε κάθε κορυφή, καθώς και έναν συγκεκριμένο αριθμό σε κάθε ακμή ορίζοντας έτσι μια αρίθμηση των α- κμών. Αριθμούμε τις ακμές με συγκεκριμένη σειρά: αρχικά αριθμούμε τις ακμές που είναι εξερχόμενες της κορυφής u 0, μετά τις εξερχόμενες της κορυφής u 1, συνεχίζοντας για όλες τις κορυφές. Μεταξύ των εξερχόμενων ακμών μιας συγκεκριμένης κορυφής, η αρίθμηση είναι αυθαίρετη. Στη συνέχεια αποθηκεύουμε ακολουθιακά την πληροφορία κάθε ακμής στον πίνακα ακμών, με την ίδια σειρά με αυτή της αρίθμησης. Ταυτόχρονα διατηρούμε έναν δείκτη με κάθε κορυφή u i, συμβολίζοντάς τον με point(u i ) που δείχνει στην ακμή με τον μικρότερο αριθμό από τις εξερχόμενές του. Αν μια κορυφή δεν έχει εξερχόμενες ακμές, τότε θέτουμε point(u i ) = point(u i+1 ). Ετσι η αναπαράσταση ευθύδρομου άστρου αποθηκεύει της εξερχόμενες ακμές μιας κορυφής u i στις θέσεις point(u i ) έως point(u i+1 ) 1 στον πίνακα των ακμών. Το Σχήμα 2.3 δείχνει την αναπαράσταση ευθύδρομου άστρου του γραφήματος στο Σχήμα 2.1. Nodes 0 u0 1 u1 2 u2 3 u3 4 u4 Edges 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (u0,u2) (u0,u1) (u0,u4) (u1,u3) (u1,u4) (u1,u0) (u1,u2) (u2,u0) (u2,u3) (u2,u4) (u2,u1) (u3,u1) (u3,u2) (u4,u1) (u4,u2) (u4,u0) Σχήμα 2.3: Αναπαράσταση ευθύδρομου άστρου Η αναπαράσταση ευθύδρομου άστρου μας δίνει έναν αποδοτικό τρόπο να καθορίσουμε το σύνολο εξερχομένων ακμών οποιασδήποτε κορυφής. Για να καθορίσουμε ταυτόχρονα το σύνολο των εισερχόμενων ακμών μιας κορυφής, χρειαζόμαστε μια επιπλέον δομή δεδομένων, γνωστή ως αναπαράσταση αντίστροφου άστρου. Αυτή η αναπαράσταση ακολουθεί τον ίδιο ακριβώς τρόπο αποθήκευσης με την αναπαράσταση ευθύδρομου άστρου με την διαφορά ότι η νέα αρίθμηση των ακμών γίνεται πάνω στις εισερχόμενες ακμές κάθε κορυφής αντί των εξερχομένων. Ετσι, αρχικά αριθμούνται όλες οι εισερχόμενες ακμές της κορυφής u 0, μετά της u 1, συνεχίζοντας για όλες τις κορυφές. Παρόμοια, κάθε κορυφή u διατηρεί έναν δείκτη rpoint(u) που δείχνει στην πρώτη ακμή του συνόλου των εισερχομένων ακμών του. Η αναπαράσταση αυτή είναι ισοδύναμη με την αναπαράσταση ευθύδρομου άστρου του προς-τα-πίσω γραφήματος του αρχικού γραφήματος. Οπως είδαμε και στην παράγραφο της αναπαράστασης λίστας γειτνίασης, μερικές φορές όταν ενημερώνουμε την πληροφορία της ακμής (u, w), πρέπει

14 Βασικές Εννοιες να ενημερώσουμε και την πληροφορία της ακμής (w, u). Για αυτό τον λόγο αποθηκεύουμε σε ένα πεδίο κάθε ακμής (u, w) έναν δείκτη στην αντίστροφη ακμή της, (w, u). 2.2.3 Αποθήκευση παράλληλων ακμών Στην παρούσα εργασία υποθέτουμε ότι το γράφημα δεν περιέχει παράλληλες ακμές. Αυτό σημαίνει ότι δεν υπάρχουν δύο ακμές στο γράφημα που να έχουν την ίδια αρχική και τελική κορυφή. Εάν επιτρέψουμε παράλληλες ακμές, αντιμετωπίζουμε ορισμένα προβλήματα σημειολογίας, αφού ο συμβολισμός (u, w) δεν αναφέρεται σε μοναδική ακμή. Αυτή η δυσκολία ωστόσο είναι μόνο σημειολογική. Η αναπαράσταση λίστας γειτνίασης, οι αναπαραστάσεις ευθύδρομου άστρου και αντίστροφου άστρου καθώς και η αναπαράσταση γραφήματος πακεταρισμένης-μνήμης που θα προταθεί στη συνέχεια μπορούν να διαχειριστούν παράλληλες ακμές. Αν μια κορυφή έχει δύο εξερχόμενες ακμές με την ίδια τελική κορυφή αλλά ενδεχομένως διαφορετικό βάρος, η συνδεδεμένη λίστα ή ο πίνακας ακμών σε κάθε περίπτωση μπορεί να περιέχει δύο διαφορετικά κελιά που να αντιστοιχούν σε αυτές τις δύο ακμές. 2.2.4 Αναπαράσταση μη κατευθυνόμενων γραφημάτων Μπορούμε να αναπαραστήσουμε μη-κατευθυνόμενα γραφήματα με τις ίδιες α- ναπαραστάσεις που περιγράψαμε παραπάνω. Ωστόσο πρέπει να θυμόμαστε ότι όταν μια ακμή (u, w) ανήκει σε ένα μη-κατευθυνόμενο γράφημα, πρέπει να συμπεριλάβουμε και τα δύο ζεύγη (u, w) και (w, u) στις παραπάνω αναπαραστάσεις. Κατά συνέπεια, θα αποθηκεύσουμε κάθε ακμή (u, w) δύο φορές, μια στην λίστα γειτνίασης της κορυφής u και μια στην λίστα γειτνίασης της κορυφής w. Παρομοίως, όταν ενημερώνουμε την πληροφορία της μίας ακμής, πρέπει να ενημερώνουμε και την πληροφορία της άλλης. Βεβαίως, μπορούμε να το πετύχουμε αυτό αποδοτικά εάν διατηρούμε δείκτες μεταξύ των δύο στιγμιοτύπων κάθε ακμής. 2.3 Δέντρα Στην θεωρία γραφημάτων, ένα δέντρο είναι ένα άκυκλο συνεκτικό γράφημα. Για τα δέντρα ισχύει το παρακάτω θεώρημα. Θεώρημα 2.3.1. Εστω G = (V, E) ένα γράφημα. Τότε τα παρακάτω είναι ισοδύναμα: 1. Το γράφημα G είναι δέντρο.

2.3 Δέντρα 15 2. Οποιεσδήποτε δύο κορυφές του γραφήματος G συνδέονται με μια μοναδική απλή διαδρομή. 3. Το γράφημα G είναι συνεκτικό, αλλά αν διαγραφεί μια πλευρά, τότε γίνεται μη-συνεκτικό. 4. Το γράφημα G είναι συνεκτικό και m = n 1. 5. Το γράφημα G είναι άκυκλο και m = n 1. 6. Το γράφημα G είναι άκυκλο, αλλά αν προστεθεί μια πλευρά στο σύνολο E, τότε δημιουργείται κύκλος. 2.3.1 Δέντρα με ρίζα Ενα δέντρο με ρίζα είναι ένα δέντρο με μια επιλεγμένη κορυφή ως ρίζα. Σε ένα δέντρο με ρίζα υπάρχει μια ιεράρχηση κορυφών σε επίπεδα, όπου στο επίπεδο 0 τοποθετείται μόνο η ρίζα, και στα υπόλοιπα επίπεδα οι υπόλοιπες κορυφές ανάλογα με την απόστασή τους από την ρίζα. Ετσι σχηματίζεται μια σχέση γονέα-παιδιών: για κάθε κορυφή u V στη μοναδική διαδρομή από την ρίζα r προς μια διαφορετική κορυφή υ, η u έχει μια μοναδική προηγούμενη κορυφή που ονομάζεται γονέας της u και μια μοναδική επόμενη κορυφή που ονομάζεται παιδί της u. Μια κορυφή χωρίς παιδιά ονομάζεται φύλλο. Μια κορυφή με παιδιά ονομάζεται εσωτερική κορυφή του δέντρου Κάθε κορυφή u στην διαδρομή από την ρίζα r προς μια διαφορετική κορυφή υ λέγεται πρόγονος της υ. Αν μια κορυφή u είναι πρόγονος της υ τότε η υ ονομάζεται απόγονος της u. Ονομάζουμε ως επίπεδο μιας κορυφής υ τον αριθμό των πλευρών στην διαδρομή από την ρίζα προς την υ. Το ύψος ενός δέντρου με ρίζα είναι ίσο με το μέγιστο επίπεδο μιας κορυφής του δέντρου. 2.3.2 Δυαδικά δέντρα Ενα δέντρο με ρίζα στο οποίο κάθε εσωτερική κορυφή έχει το πολύ δύο παιδιά ονομάζεται δυαδικό δέντρο. Για ένα δυαδικό δέντρο T με n κορυφές και ύψος h ισχύουν τα παρακάτω: Λήμμα 2.3.2. Εστω δυαδικό δέντρο T με n κορυφές και ύψος h. Στο επίπεδο l του δέντρου υπάρχουν το πολύ 2 l κορυφές. Λήμμα 2.3.3. Εστω δυαδικό δέντρο T με n κορυφές και ύψος h. Ο αριθμός των κορυφών του είναι n 2 h+1 1.

16 Βασικές Εννοιες Λήμμα 2.3.4. Σε κάθε δυαδικό δέντρο T, n 0 = n 2 +1 όπου n 0 είναι ο αριθμός των φύλλων και n 2 ο αριθμός των κορυφών με δύο παιδιά. Λήμμα 2.3.5. Εστω δυαδικό δέντρο T με n κορυφές και ύψος h. Ο αριθμός των φύλλων του είναι n 0 2 h. Λήμμα 2.3.6. Εστω δυαδικό δέντρο T με n κορυφές και ύψος h. ισχύει για τα φύλλα του ότι n+1 2 n 0 n+1 2. Τότε Λήμμα 2.3.7. Εστω δυαδικό δέντρο T με n κορυφές και ύψος h. Το ύψος του είναι h log(n + 1) 1. 2.3.3 Πλήρη δυαδικά δέντρα - Δομή σωρού Ενα δυαδικό δέντρο ονομάζεται πλήρες ή δομή σωρού αν κάθε επίπεδο του δέντρου εκτός του τελευταίου είναι πλήρες, με το τελευταίο να είναι γεμάτο στα αριστερά αλλά να υπολείπεται κάποια φύλλα προς τα δεξιά. 2.3.4 Αναπαράσταση δένδρων Τα δυαδικά δέντρα μπορούν να αναπαρασταθούν με χρήση βασικών δομών δεδομένων σε πολλές γλώσσες προγραμματισμού. Η επιλογή μιας αναπαράστασης εξαρτάται από την εφαρμογή στην οποία θα χρησιμοποιηθεί και τις απαιτήσεις της. Παρακάτω αναφέρουμε τις δύο πιο κοινές αναπαραστάσεις δυαδικών δένδρων. Αναπαράσταση κορυφών και αναφορών Σε γλώσσες προγραμματισμού που παρέχουν υποστήριξη για δομές (records) και αναφορές (references), τα δυαδικά δέντρα συνήθως υλοποιούνται κατασκευάζοντας μια δομή για μια κορυφή του δέντρου που περιέχει ένα πεδίο για τα δεδομένα της κορυφής και δύο πεδία αναφορές στο αριστερό και δεξιό παιδί της. Μερικές φορές περιέχει και αναφορά στην μοναδική κορυφή γονέα της. Αν μια κορυφή έχει λιγότερα από δύο παιδιά, αυτές οι αναφορές παίρνουν μια ειδική μηδενική τιμή, ή δείχνουν σε μια βοηθητική κρυφή κορυφή. Αυτός ο τρόπος αναπαράστασης ενδείκνυται για όλα τα είδη δένδρων, λόγω της ευκολίας στην υλοποίησή του, της δυναμικής του φύσης και της ελάχιστης μνήμης που απαιτεί. Το μειονέκτημά του είναι ότι αν έχουμε δέντρα ειδικής μορφής, όπως πλήρη δυαδικά δέντρα, δεν παρέχει κάποιου είδους δόμηση στην μνήμη που θα είχε ως αποτέλεσμα την πιο γρήγορη προσπέλαση των κορυφών.

2.4 Διερεύνηση κορυφών του γραφήματος 17 Αναπαράσταση πινάκων Τα δυαδικά δέντρα μπορούν επίσης να αποθηκευθούν με σειρά πρώτα-κατάπλάτος σαν μια έμμεση δομή δεδομένων σε μονοδιάστατους πίνακες (array). Εάν τα δέντρα είναι πλήρη, αυτή η αναπαράσταση δεν σπαταλάει καθόλου χώρο. Σε αυτή την συμπαγή διάταξη, αν μια κορυφή βρίσκεται στην θέση i του πίνακα, τα παιδιά της βρίσκονται στις θέσεις 2i (για το δεξιό παιδί) και 2i + 1 (για το αριστερό παιδί), ενώ ο γονέας (αν υπάρχει) βρίσκεται στην θέση i/2 (υποθέτοντας ότι η ρίζα βρίσκεται στην θέση 1). Μια σχηματική αναπαράσταση φαίνεται στο Σχήμα 2.4. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Σχήμα 2.4: Αναπαράσταση πλήρους δυαδικού δέντρου κατά διάταξη πρώτακατά-βάθος. Οι κορυφές είναι αποθηκευμένες σε ένα πίνακα, κατά επίπεδα από αριστερά προς τα δεξιά. Η θέση κάθε κορυφής στον πίνακα φαίνεται στον αριθμό που της αντιστοιχεί. 2.4 Διερεύνηση κορυφών του γραφήματος Σε πολλές εφαρμογές που εκπροσωπούνται με γράφημα, πρέπει να γίνει επίσκεψη σε όλες τις κορυφές του γραφήματος και εκεί να εκτελεστεί κάποιο έργο που καθορίζεται από την εφαρμογή. Σκοπός είναι να προσπελάσουμε ολόκληρο το γράφημα, να επισκεφτούμε όλες τις κορυφές, με κάποιον τρόπο. Αλγόριθμοι τέτοιου είδους ονομάζονται αλγόριθμοι αναζήτησης (όπως ο αλγόριθμος 1). Οι δύο πιο συνηθισμένοι αλγόριθμοι είναι η Αναζήτηση Πρώτα Κατά Πλάτος (BFS) και η Αναζήτηση Πρώτα Κατά Βάθος (DFS) Ενας αλγόριθμος αναζήτησης λειτουργεί ως εξής. Εστω ένα γράφημα G = (V, E) και μια τυχαία αρχική κορυφή s V. Ξεκίνα μια αναζήτηση, αρχίζοντας από τον s, επισκέπτοντας τον s, και επανέλαβε το επόμενο βήμα έως ότου δεν υπάρχει πιά ακμή (u, w) τέτοια ώστε να έχουμε επισκεφτεί τον u και όχι τον w (ακμή διέλευσης):

18 Βασικές Εννοιες Algorithm 1 Αλγόριθμος Αναζήτησης INPUT: GRAPH G = (V, E) and vertex s V OUTPUT:Arrays pred and order unmark all vertices of V mark s; pred(s) = 0; next = 1; order(s) = next; LIST = {s}; while LIST do select vertex u from LIST ; if u is incident to admissible edge (u, w) then mark w; pred(w) = u; next = next + 1; order(w) = next; mark w; pred(w) = u; LIST = LIST {w}; else delete u from LIST ; end if end while Βήμα αναζήτησης: διάλεξε μια ακμή διέλευσης (u, w) (τέτοια ώστε να έχουμε επισκεφτεί τον u μα όχι τον w) και εξέτασέ την με ε- πίσκεψη στον ω. Εάν κάποιος ορίσει και την σειρά επίσκεψης των πιθανών ακμών τότε καταλήγει στους αλγόριθμους Αναζήτησης Πρώτα Κατά Βάθος (DFS) και Αναζήτησης Πρώτα Κατά Πλάτος (BFS). Αν διαλέξουμε ακμή (u, w) τέτοια ώστε ο u να είναι η κορυφή που έχουμε επισκεφτεί πιο πρόσφατα, τότε έχουμε τον αλγόριθμο Αναζήτησης Πρώτα Κατά Βάθος (DFS). Αν διαλέξουμε ακμή (u, w) τέτοια ώστε ο u να είναι η πιο παλιά κορυφή που έχουμε επισκεφτεί, τότε έχουμε τον αλγόριθμο Αναζήτησης Πρώτα Κατά Πλάτος (BFS). Αυτοί οι αλγόριθμοι, χρησιμοποιούνται για να εξερευνήσουμε το γράφημα, και για όποια διαδικασία χρειάζεται την προσπέλαση ολόκληρου του γραφήματος. Τέλος, κάτι που είναι σημαντικό, βλέπουμε πως εάν κρατήσουμε για κάθε κορυφή w, την κορυφή-γείτονά της u, ώς πατέρα της, τότε δημιουργείται ένα γεννητικό υποδέντρο του γραφήματος, το οποίο ονομάζεται Δέντρο Αναζήτησης του γραφήματος.

2.5 Το πρόβλημα Εύρεσης Συντομότερων Διαδρομών 19 2.5 Το πρόβλημα Εύρεσης Συντομότερων Διαδρομών Πολλές φορές έχει νόημα η αντιστοίχηση κάθε ακμής με μία τιμή η οποία συνήθως ονομάζεται κόστος ή βάρος. Σε αυτήν την περίπτωση το γράφημα ονομάζεται δίκτυο και συμβολίζεται συνήθως ως G = (V, E, wt) όπου wt : E R είναι η συνάρτηση κόστους των ακμών. Ορίζουμε το κόστος μιας διαδρομής P = (u 0, u 1 ), (u 1, u 2 ),..., (u n 1, u n ) = e 1, e 1,..., e 1 ως το άθροισμα των βαρών των ακμών που την απαρτίζουν wt(p ) = n i=1 wt(e i). Δεδομένου ενός κατευθυνόμενου γραφήματος G = (V, E, wt) με μη-αρνητικά βάρη στις ακμές του και δεδομένη μια από τις κορυφές του ως κορυφή πηγής(source) ορίζουμε: Το πρόβλημα εύρεσης της συντομότερης διαδρομής (ΕΣΔ) από μια αρχική κορυφή (single source shortest path SSSP) είναι το να βρούμε το κόστος της συντομότερης διαδρομής μεταξύ της αρχικής κορυφής και κάθε άλλης κορυφής του γραφήματος. Η απόσταση του κόμβου u από τον κόμβο s συμβολίζεται συνήθως ως d(s, u). Αν είναι σαφές ποιός είναι ο αρχικός κόμβος s μπορούμε να τον παραλείψουμε από το συμβολισμό, δηλαδή d(u) θα είναι η απόσταση του u από τον δεδομένο αρχικό κόμβο. Το κόστος της συντομότερης διαδρομής από τον κόμβο s στον u που διέρχεται μόνο από κόμβους που ανήκουν σε ένα σύνολο W V συμβολίζεται με d(s, u; W ) ή d(u; W ) αντίστοιχα. Πέρα από αυτό το βασικό πρόβλημα εύρεσης υπάρχουν και δύο παραλλαγές του. Η μία είναι το πρόβλημα εύρεσης συντομότερης διαδρομής μεταξύ ενός ζεύγους κόμβων (single-source single-sink shortest path) και το άλλο μεταξύ όλων των ζευγών κόμβων ενός γραφήματος (all-pairs shortest paths). 2.5.1 Ο απλός αλγόριθμος Dijkstra Ο αλγόριθμος Dijkstra είναι ένας αλγόριθμος που λύνει το πρόβλημα εύρεσης συντομότερης διαδρομής μεταξύ ενός κόμβου πηγής (source) και ενός άλλου κόμβου του γραφήματος (target) (αλγόριθμος 2). Για ένα δεδομένο ζευγάρι κόμβων s και t ενός γραφήματος G = (V, E), ο αλγόριθμος βρίσκει τη διαδρομή από το s στο t με το χαμηλότερο κόστος. Ο αλγόριθμος ανήκει σε μια κατηγορία αλγορίθμων που υπολογίζουν το ζητούμενο, θέτοντας ένα είδος «ετικέτας» σε κάθε κορυφή. Στην περίπτωση μας η «ετικέτα» μιας κορυφής u αντιπροσωπεύει την ελάχιστη απόσταση της u από τον s στο συγκεκριμένο βήμα του αλγορίθμου. Αρχικά ο s έχει απόσταση 0 και οι υπόλοιπες κορυφές απόσταση. Συμβολίζουμε την απόσταση μιας κορυφής u ως d(u). Ο αλγόριθμος κρατάει δύο σύνολα, το S το οποίο περιέχει τις κορυφές για τις οποίες έχουμε ήδη βρει τη συντομότερη διαδρομή, και το Q

20 Βασικές Εννοιες που περιέχει τις υπόλοιπες κορυφές. Ονομάζουμε χαλάρωση ακμών, την εξής διαδικασία: έστω u κορυφή S, με (γνωστή) ελάχιστη απόσταση από τον s, d(u). (u, w) E, αν d(w) > d(u) + wt(u, w) θέσε d(w) = d(u) + wt(u, w) και τον u γονέα του w. Ουσιαστικά, λέμε στον w ότι έχουμε βρεί μια συντομότερη διαδρομή μέσω του u(για τον οποίο είμαστε σίγουροι για την απόστασή του - ανήκει στο S), και του λέμε να ενημερώσει την «ετικέτα» του. Algorithm 2 Αλγόριθμος του Dijkstra INPUT: Directed Network G = (V, E), n = V, m = E, with nonnegative edge weights and vertex s V OUTPUT:Array d(.) of length n, where d(u) = δ(s, u), u V, and array pred(.) of length n, where pred(u) is the parent of vertex u in the shortest path tree rooted at s. METHOD; S = ; S = V ; for every u V do d(u) = ; end for d(s) = 0; pred(s) = 0; while S < n do (*vertex selection*) let u S be the vertex for which d(u) = min υ S {d(υ)}; S = S {u}; S = S {u}; (*distance update*) for each (u, w) E do if end if end for end while d(w) > d(u) + wt(u, w) then d(w) = d(u) + wt(u, w); pred(w) = u; Ο αλγόριθμος εκτελεί τα παρακάτω βήματα: διάλεξε την κορυφή u με την μικρότερη προσωρινή απόσταση μέσα από το Q. Εφόσον δεν υπάρχει κορυφή με μεγαλύτερη απόσταση στο Q,

2.5 Το πρόβλημα Εύρεσης Συντομότερων Διαδρομών 21 είμαστε σίγουροι πως έχουμε βρεί την ελάχιστη απόσταση για τον u και τον βάζουμε στο S. χαλάρωσε τις ακμές του u. Ενημέρωσε τους γειτονικούς κόμβους για την νέα διαδρομή που βρέθηκε. Ο αλγόριθμος τελειώνει αφού βρεί όλες τις συντομότερες αποστάσεις. Φυσικά δημιουργείται το δέντρο συντομότερων διαδρομών αν αναλογιστούμε ότι κάθε κορυφή έχει έναν γονέα. Η πολυπλοκότητα χρόνου του αλγορίθμου είναι O(m + n log n). 2.5.2 Ο αμφίδρομος αλγόριθμος Dijkstra Ο αλγόριθμος αυτός είναι η πιο απλή παραλλαγή του αλγορίθμου του Dijkstra. Εστω γράφημα G = (V, E) και ζευγάρι κορυφών s, t. Η κλασική αναζήτηση ξεκινάει από τον s μέχρι να βρεθεί η απόσταση του t. Η αμφίδρομη αναζήτηση εκτελεί δύο αναζητήσεις ταυτόχρονα: μια ευθύδρομη αναζήτηση ξεκινώντας από την αρχική κορυφή s και μια οπισθόδρομη αναζήτηση ξεκινώντας από την τελική κορυφή t. Κατά την οπισθόδρομη αναζήτηση ο αλγόριθμος εκτελείται στο προςτα-πίσω γράφημα του αρχικού γραφήματος, δηλαδή στο γράφημα με το ίδιο σύνολο κορυφών V και το αντίστροφο σύνολο ακμών E = {(u, v) (v, u) E}. Εστω df(u) οι ετικέτες απόστασης της ευθύδρομης αναζήτησης και db(u) οι ετικέτες απόστασης της οπισθόδρομης αναζήτησης αντίστοιχα. Ο αλγόριθμος μπορεί να τερματίσει όταν μια κορυφή έχει μονιμοποιηθεί και από τις δύο αναζητήσεις. Τότε, η συντομότερη διαδρομή καθορίζεται από την κορυφή u με ελάχιστη τιμή df(u) + db(u) και συντίθεται από την συντομότερη διαδρομή από την αρχική κορυφή s προς την κορυφή u (που έχει βρεθεί από την ευθύδρομη αναζήτηση), και από την συντομότερη διαδρομή από την κορυφή u στην τελική κορυφή t (που έχει βρεθεί από την οπισθόδρομη αναζήτηση). Παρατηρήστε ότι η κορυφή u δεν έχει κατά ανάγκη μονιμοποιηθεί και από τις δύο αναζητήσεις. Ενας βαθμός ελευθερίας στην δικατευθυνόμενη αναζήτηση είναι η επιλογή αν το προς-τα-εμπρός ή το προς-τα-πίσω βήμα θα εκτελεσθεί. Συνήθεις τακτικές είναι να επιλέγεται η κατεύθυνση με την μικρότερη ουρά προτεραιότητας, ή να επιλέγεται η κατεύθυνση με την μικρότερη απόσταση στην ουρά προτεραιότητα ή να εναλλάσσονται σε κάθε βήμα οι κατευθύνσεις. Η απόδοση του αλγορίθμου αυτού είναι σχεδόν δύο φορές καλύτερη από τον απλό Dijkstra, και η τροποποίηση του απλού Dijkstra σε αμφίδρομο αλγόριθμο Dijkstra είναι απλή και άμεση. Για αυτό, σε πολλές περιπτώσεις που μας επιτρέπεται, αντί να κάνουμε τροποποιήσεις πάνω στον απλό Dijkstra, κατασκευάζουμε τον αλγόριθμό μας βάση του αμφίδρομου αλγορίθμου Dijkstra.

22 Βασικές Εννοιες 2.5.3 Στοχοκατευθυνόμενη αναζήτηση και ο αλγόριθμος A Αυτή η τεχνική, που έχει της ρίζες της στην Τεχνητή Νοημοσύνη, αλλάζει την προτεραιότητα των ενεργών κορυφών ώστε να αλλάξει την σειρά με την οποία τις επεξεργάζεται. Πιο συγκεκριμένα, μια στοχοκατευθυνόμενη αναζήτηση προσθέτει στην προτεραιότητα d(u) ένα δυναμικό(potential): π : V R + 0 που εξαρτάται από την τελική κορυφή t της αναζήτησης. Η αλλαγμένη προτεραιότητα μιας κορυφής u V είναι τότε d(u) + π(u). Με ένα κατάλληλο δυναμικό, η αναζήτηση μπορεί να κατευθυνθεί πιο γρήγορα προς την τελική κορυφή, μειώνοντας τον χρόνο εκτέλεσης, ενώ ο αλγόριθμος επιστρέφει και πάλι την σωστή συντομότερη διαδρομή. Διαισθητικά, μπορεί κανείς να φανταστεί μια διαδρομή σε ένα δίκτυο ως ένα περίπατο σε μια φυσική τοποθεσία. Οταν προστίθεται ένα δυναμικό, μια περιοχή αποκτά μεγαλύτερο ύψος. Αν το δυναμικό είναι μικρό κοντά στην τελική κορυφή, δημιουργείται μια πεδιάδα γύρω από αυτήν. Επειδή ένας περίπατος είναι πιο εύκολος προς τα κάτω παρά προς τα πάνω, είναι πιο πιθανό να καταλήξει κανείς στην κορυφή πιο γρήγορα από ότι χωρίς το δυναμικό. Για την ορθότητα της αναζήτησης θα πρέπει να χρησιμοποιήσουμε μια διαφορετική διατύπωση. Ισοδύναμα με την αλλαγή της προτεραιότητας των κορυφών, μπορεί κανείς να αλλάξει τα κόστη των ακμών έτσι ώστε η αναζήτηση να κατευθύνεται πιο γρήγορα προς τον στόχο t. Σε αυτή την περίπτωση το κόστος wt των ακμών (u, w) E αντικαθίσταται από το επαγόμενο κόστος r(u, w) = wt(u, w) π(u) + π(w). Τότε, για δύο οποιεσδήποτε κορυφές x και y, το κόστος οποιασδήποτε x-y διαδρομής αλλάζει κατά την ίδια ποσότητα, π(y) π(x). Ετσι, μια διαδρομή είναι συντομότερη διαδρομή σύμφωνα με τα κόστη wt αν και μόνο αν είναι συντομότερη διαδρομή σύμφωνα με τα κόστη r και τα δύο προβλήματα είναι ισοδύναμα. Αν όλα τα τροποποιημένα κόστη ακμών είναι μη-αρνητικά τότε μπορούμε να εκτελέσουμε τον αλγόριθμο του Dijkstra στο γράφημα με τα τροποποιημένα κόστη και να πάρουμε την ίδια συντομότερη διαδρομή σύμφωνα με τα αρχικά κόστη. Ετσι, λέμε ότι μια συνάρτηση π είναι εφικτή, αν τα επαγόμενα κόστη είναι μη-αρνητικά για όλες τις ακμές. Συνήθως χρησιμοποιούνται συναρτήσεις δυναμικού που εκτιμούν την α- πόσταση προς την τελική κορυφή. Μάλιστα, μπορεί να δειχθεί ότι αν μια συνάρτηση δυναμικού είναι εφικτή, τότε αποτελεί ένα κάτω όριο στην απόσταση προς την κορυφή t αν π(t) 0. Παρατηρούμε ότι κάθε εφικτή συνάρτηση δυναμικού μπορεί να μετατραπεί σε μια ισοδύναμη συνάρτηση δυναμικού π (u) = π(u) π(t) που είναι ένα κάτω όριο της απόστασης προς την τελική κορυφή. Ετσι μπορούμε να υποθέσουμε δίχως βλάβη της γενικότητας ότι η συ-

2.5 Το πρόβλημα Εύρεσης Συντομότερων Διαδρομών 23 νάρτηση δυναμικού είναι πράγματι ένα κάτω όριο. Οσο αυστηρότερο το όριο, τόσο η αναζήτηση κατευθύνεται πιο γρήγορα προς τον στόχο. Στην πραγματικότητα, αν η συνάρτηση δυναμικού είναι η απόσταση προς την τελική κορυφή, τότε η στοχοκατευθυνόμενη αναζήτηση επισκέπτεται μόνο κορυφές πάνω στην συντομότερη διαδρομή. Ευκλείδειες αποστάσεις Υποθέτουμε ότι υπάρχει μια διάταξη L : V R 2 του γραφήματος όπου το κόστος μιας ακμής σχετίζεται κάπως με την Ευκλείδεια απόσταση των άκρων της. Τότε μια εφικτή συνάρτηση δυναμικού θα μπορούσε να υπολογισθεί από την Ευκλείδεια απόσταση L(u) L(t) προς την τελική κορυφή t. Σε περίπτωση που τα κόστη των ακμών είναι πράγματι Ευκλείδειες αποστάσεις, τότε η Ευκλείδεια απόσταση L(u) L(t) είναι ήδη μια εφικτή συνάρτηση potential λόγω της τριγωνικής ανισότητας. Με αυτή τη συνάρτηση, μια ακμή που δείχνει κατευθείαν προς την τελική κορυφή αποκτά τροποποιημένο κόστος ίσο με το μηδέν, ενώ μια ακμή που δείχνει προς την άλλη κατεύθυνση αποκτά το διπλάσιο κόστος. Αν τα κόστη των ακμών δεν είναι Ευκλείδειες αποστάσεις των άκρων τους, τότε μια εφικτή συνάρτηση δυναμικού είναι η παρακάτω. Ορίζουμε ως u max την μέγιστη ταχύτητα ακμής L(u) L(w) /wt(u, w) για κάθε ακμή (u, w) E. Τότε η συνάρτηση δυναμικού μπορεί να οριστεί ώς π(u) = L(u) L(t) /u max. Η μέγιστη ταχύτητα μπορεί να υπολογιστεί από ένα βήμα προεπεξεργασίας με μια γραμμική προσπέλαση όλων των ακμών. Τέλος, αριθμητικά προβλήματα μπορούν να επιλυθούν αν η μέγιστη ταχύτητα πολλαπλασιαστεί με 1 + ɛ για ένα μικρό ɛ > 0.

24 Βασικές Εννοιες

Κεφάλαιο 3 Ιεραρχία Μνήμης και Δομές Δεδομένων Cache Oblivious Στο κεφάλαιο αυτό εισάγουμε το μοντέλο που θα χρησιμοποιηθεί για την α- νάλυση των δομών γραφημάτων και των αντίστοιχων αλγορίθμων. Παράλληλα, παρουσιάζονται δύο δομές που παίζουν βασικό ρόλο στην σχεδίαση και κατασκευή της νέας δομής γραφημάτων, ένα δέντρο (δυαδικό δέντρο με διάταξη van Emde Boas) και έναν πίνακα διατεταγμένων στοιχείων (Πίνακας Πακεταρισμένης-μνήμης) που υποστηρίζουν λειτουργίες με βέλτιστες μεταφορές μνήμης. 3.1 Ιεραρχία μνήμης και δομές δεδομένων Cache- Oblivious Στις περισσότερες θεωρητικές αναλύσεις αλγορίθμων, το μοντέλο που χρησιμοποιείται για βασική ανάλυση είναι το Random Access Machine (RAM) μοντέλο: υποθέτουμε ότι έχουμε μια μεγάλη συστοιχία μνήμης (Κύρια Μνήμη) που υ- ποστηρίζει τυχαία προσπέλαση διευθύνσεων, και μετράμε τον αριθμό απλών αναγνώσεων και εγγραφών που απαιτούνται κατά την εκτέλεση του αλγορίθμου. Αυτό το μοντέλο ήταν σχετικά ακριβές μέχρι την δεκαετία του 1980, όταν οι επεξεργαστές ήταν αρκετά αργοί, και η Κύρια Μνήμη αρκετά μικρή ώστε η ανάγνωση και η διαγραφή από την Κύρια Μνήμη να μην δημιουργεί σημαντική επιβράδυνση. Σήμερα, ωστόσο, οι επεξεργαστές διαθέτουν βαθιές ιεραρχίες κρυφής μνήμης, τουλάχιστον μια κρυφή μνήμη Επιπέδου 1 και μια Επιπέδου 2, και μάλιστα αρκετά μεγάλου μεγέθους. Ετσι, αποτρέπουν την επικάλυψη του χρόνου εκτέλεσης του αλγορίθμου από τους χρόνους πρόσβασης της Κύριας

26 Ιεραρχία Μνήμης και Δομές Δεδομένων Cache Oblivious Μνήμης. Αλγόριθμοι και δομές δεδομένων που μπορούν να εκμεταλλευτούν αποδοτικά την κρυφή μνήμη μπορούν να αποδώσουν πολύ πιο γρήγορους χρόνους, και η ανάλυσή μας πρέπει να το λάβει υπόψιν. 3.1.1 Αλγόριθμοι και δομές δεδομένων Cache-oblivious Ενας αλγόριθμος cache-oblivious είναι ένας αλγόριθμος σχεδιασμένος έτσι ώστε να εκμεταλλεύεται την κρυφή μνήμη ενός επεξεργαστή χωρίς να γνωρίζει το μέγεθός της (ή το μέγεθος των πλαισίων πληροφορίας της). Ενας βέλτιστος αλγόριθμος cache-oblivious είναι ένας αλγόριθμος cache-oblivious ο οποίος χρησιμοποιεί την κρυφή μνήμη βέλτιστα (με την ασυμπτωτική έννοια). Ετσι, ένας αλγόριθμος cache-oblivious έχει σχεδιαστεί να αποδίδει καλά, χωρίς μετατροπή, σε πολλαπλά συστήματα με διαφορετικά μεγέθη κρυφής μνήμης, ή για μια ιεραρχία μνήμης με πολλαπλά επίπεδα κρυφής μνήμης διαφορετικών μεγεθών. Φυσικά, το ίδιο ισχύει και για δομές δεδομένων που παρέχουν λειτουργίες σχεδιασμένες να εκτελούνται με βέλτιστο cache-oblivious τρόπο. Η ιδέα και το όνομα των αλγορίθμων cache-oblivious δημοσιεύτηκε πρώτη φορά από τον Harald Prokop κατά την μεταπτυχιακή του διπλωματική εργασία [11, 17]. Συνήθως, ένας αλγόριθμος cache-oblivious λειτουργεί αναδρομικά χρησιμοποιώντας την μέθοδο του διαίρει-και-βασίλευε, όπου το πρόβλημα υποδιαιρείται διαρκώς σε όλο μικρότερα υποπροβλήματα. Τελικά, τα υποπροβλήματα φτάνουν σε μέγεθος που μπορεί να χωρέσει ολόκληρο στην κρυφή μνήμη, ανεξάρτητα από το μέγεθός της. Για παράδειγμα, ένα βέλτιστο γινόμενο μητρώων cacheoblivious μπορεί να υπολογιστεί εάν υποδιαιρέσουμε κάθε μητρώο σε τέσσερα υπομητρώα και υπολογίσουμε τα μερικά γινόμενά τους με τρόπο πρώτα-κατάβάθος. 3.1.2 Ιδεατό μοντέλο κρυφής μνήμης Η ανάλυση αλγορίθμων και δομών δεδομένων cache-oblivious συνήθως γίνεται χρησιμοποιώντας ένα ιδεατό μοντέλο κρυφής μνήμης, που ονομάζεται μοντέλο cache-oblivious. Το μοντέλο είναι πολύ πιο εύκολο για ανάλυση από τα χαρακτηριστικά μιας πραγματικής κρυφής μνήμης (που έχει πολύπλοκους τρόπους συσχέτισης, στρατηγικές απελευθέρωσης μνήμης, κλπ.) αλλά σε πολλές περιπτώσεις είναι αποδεδειγμένα κατά ένα σταθερό παράγοντα κοντά στην απόδοση μιας πιο ρεαλιστικής κρυφής μνήμης. Πιο συγκεκριμένα, το μοντέλο cache-oblivious είναι ένα θεωρητικό μοντέλο υπολογισμού παρόμοιο με το RAM μοντέλο. Κάθε διεύθυνση μνήμης μπορεί να προσπελαστεί σε χρόνο O(1), όπως και στην Κύρια Μνήμη ενός πραγματικού