Εισαγωγή στο Σχεδιασμό και την Ανάλυση Αλγορίθμων

Σχετικά έγγραφα
Εισαγωγή στους Αλγορίθμους Φροντιστήριο 7

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ελάχιστο Γεννητικό Δένδρο. Παράδειγμα - Αλγόριθμος Prim. Γιατί δουλεύουν αυτοί οι αλγόριθμοι;

f(t) = (1 t)a + tb. f(n) =

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

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

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

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

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

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε:

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014

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

d(v) = 3 S. q(g \ S) S

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

Τεχνητή Νοημοσύνη. 4η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

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

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

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

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

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

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 1 Για τις ερωτήσεις 1-4 θεωρήσατε τον ακόλουθο γράφο. Ποιές από τις παρακάτω προτάσεις αληθεύουν και ποιές όχι;

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

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

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

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

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 2: Μαθηματικό Υπόβαθρο

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

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

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

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

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

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

Διάλεξη 4: Θεωρία Γραφημάτων Γραφέας: Σ. Κ. Διδάσκων: Σταύρος Κολλιόπουλος συνεκτικά γραφήματα (συνέχεια) Πρόταση 4.1 Δύο μπλοκ ενός

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

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

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

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

q(g \ S ) = q(g \ S) S + d = S.

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

Σειρά Προβλημάτων 1 Λύσεις

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

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

Κεφάλαιο 3. Γραφήματα. ver. 21/12/2014. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

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

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

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 Άσκηση 5 6 Προγραμματιστική Άσκηση 1 7 Προγραμματιστική Άσκηση 2 (CoReLab - NTUA) Αλγόριθμοι - 3

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

Μη γράφετε στο πίσω μέρος της σελίδας

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

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

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

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

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

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

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

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

Ελάχιστα Γεννητορικά ένδρα

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

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

Διάλεξη 4: Απόδειξη: Για την κατεύθυνση, παρατηρούμε ότι διαγράφοντας μια κορυφή δεν μπορούμε να διαχωρίσουμε τα u και v. Αποδεικνύουμε

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

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

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

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

Χρήστος Ι. Σχοινάς Αν. Καθηγητής ΔΠΘ. Συμπληρωματικές σημειώσεις για το μάθημα: «Επιχειρησιακή Έρευνα ΙΙ»

Κεφάλαιο 13 Αντισταθμιστική Ανάλυση

Outline. 6 Edit Distance

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

Transcript:

Τσουκνίδας Ιωάννης Τσαπέτη Μαρία Εισαγωγή στο Σχεδιασμό και την Ανάλυση Αλγορίθμων Σημειώσεις σύμφωνα με τις παραδόσεις του Λευτέρη Μ. Κυρούση Τμήμα Μαθηματικών Πανεπιστήμιο Αθηνών Αθήνα, 2012

ii

Περιεχόμενα 1 Εισαγωγή στο σχεδιασμό αλγορίθμων 1 1.1 Μάθημα 1..................................... 1 1.1.1 Μαθηματικά προαπαιτούμενα..................... 1 1.1.2 Είδη συναρτήσεων........................... 1 1.1.3 Αλγόριθμος............................... 2 1.1.4 Παραδείγματα αλγορίθμων...................... 2 1.1.5 Τετραγωνικός & Κυβικός χρόνος................... 4 2 Εισαγωγή στη θεωρία γραφημάτων 5 2.1 Μάθημα 2..................................... 5 2.1.1 Δένδρα με ρίζα............................. 7 2.1.2 Δομές Δεδομένων............................ 9 2.2 Μάθημα 3.................................... 9 2.2.1 Ουρές προτεραιότητας......................... 9 2.2.2 Αναπαράσταση γραφημάτων...................... 12 2.2.3 Εξερεύνηση κατά πλάτος........................ 14 2.3 Μάθημα 4.................................... 15 2.3.1 Εξερεύνηση Γραφημάτων....................... 15 3 Άπληστοι αλγόριθμοι 21 3.1 Μάθημα 5.................................... 21 3.2 Μάθημα 6.................................... 26 3.2.1 Χρονοπρογραμματισμός (Scheduling)................ 27 3.2.2 Διαδρομές & Βελτιστοποίηση..................... 28 3.3 Μάθημα 7.................................... 29 3.3.1 Ελάχιστος Δενδροπαράγοντας (Γεννήτικο δένδρο)-spanning tree. 32 iii

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

Κεφάλαιο 1 Εισαγωγή στο σχεδιασμό αλγορίθμων 1.1 Μάθημα 1. Πέμπτη 15.3.2012 1.1.1 Μαθηματικά προαπαιτούμενα (σελ. 65-67. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) Στο μάθημα αυτό ασχολούμαστε κυρίως με συναρτήσεις 1 της μορφής f : N R +. Μας ενδιαφέρει ιδιαίτερα η ασυμπτωτική συμπεριφορά των συναρτήσεων, δηλαδή η συμπεριφορά των συναρτήσεων f(n) για μεγάλες τιμές του n N. Θα ισχύει ότι: f(n) = Og(n) αν υπάρχει c > 0 τέτοιο ώστε f(n) c g(n) τελικά. f(n) = Ωg(n) αν υπάρχει c > 0 τέτοιο ώστε f(n) c g(n) τελικά. f(n) = Θg(n) αν ισχύει ταυτόχρονα ότι: f(n) = Og(n) και f(n) = Ωg(n) Παράδειγμα 1.1.1. Ισχύει ότι 3n 2 = O(n 2 ) και n + 3 10 = Θ(n) 1.1.2 Είδη συναρτήσεων (σελ. 69-71. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) Μας ενδιαφέρουν τα εξής είδη συναρτήσεων: 1. Πολυωνυμικές συναρτήσεις: Είναι της μορφής f(n) = n δ, δ R +. 2. Εκθετικές συναρτήσεις: Είναι της μορφής f(n) = c nδ, c > 1, δ > 0. 1 δηλαδή ακολουθίες θετικών αριθμών. 1

Κεφάλαιο 1. Εισαγωγή στο σχεδιασμό αλγορίθμων Σημείωση. Αν c < 1 τότε η f λέγεται υποεκθετική. 3. Λογαριθμικές: Είναι συναρτήσεις της μορφής f(x) = log b x 1.1.3 Αλγόριθμος Ένας σωστά δομημένος αλγόριθμος θα πρέπει να πληρεί κάποιες, διαισθητικά ορισμένες, υποθέσεις: Θα πρέπει να είναι πεπερασμένος. Να δέχεται δεδομένα εισόδου (input) και Να παράγει δεδομένα εξόδου (output). Στο μάθημα αυτό ασχολούμαστε με συνδυαστικούς αλγορίθμους και με την υπολογιστική πολυπλοκότητα 2 (η οποία ορίζεται σαν μία συνάρτηση f : N R + ). Η υπολογιστική πολυπλοκότητα μπορεί να υπολογιστεί (κυρίως) με βάση: Είτε τη χειρότερη δυνατή περίπτωση, είτε τη μέση περίπτωση. Λόγω ευκολίας ασχολούμαστε γενικά με τη χειρότερη δυνατή περίπτωση. Οι πολυωνυμικοί αλγόριθμοι (ή αποδοτικοί ή ρεαλιστικοί) είναι οι πιο αποδοτικοί αλγόριθμοι. 1.1.4 Παραδείγματα αλγορίθμων Σημείωση. Ένας δεδομένος πίνακας ενός αλγόριθμου μπορεί να είναι: Μονοδιάστατος: A[1], A[2]...(όπου μέσα σε αγκύλες ο αριθμός του στοιχείου) Διδιάστατος: A[i, j] Τριδιάστατος: A[i, j, k] κ.ο.κ Άσκηση 1. Εύρεση μέγιστου στοιχείου 3. Έστω μονοδιάστατος πίνακας A[i] αποτελούμενος από αριθμούς. Να βρεθεί το μέγιστο στοιχείο του. Υπόδειξη. Ένας αλγόριθμος σε ψευδοκώδικα για την εύρεση του μέγιστου στοιχείου είναι όπως ο παρακάτω: Η πολυπλοκότητα του παραπάνω αλγορίθμου είναι O(n) γιατί κάθε βήμα της διέλευσης από τα δεδομένα εισόδου διαρκεί σταθερό χρόνο. Άσκηση 2. Συγχώνευση ταξινομημένων πινάκων: Δίνονται δύο ταξινομημένοι πίνακες 2 τον αριθμό των βημάτων που απαιτούνται για την εκτέλεση του αλγόριθμου 3 σελ. 78-79 στο Σχεδιασμός αλγορίθμων, Kleinberg-Tardos. 2

Κεφάλαιο 1. Εισαγωγή στο σχεδιασμό αλγορίθμων Algorithm 1 Υπολογισμός μέγιστου στοιχείου max(τσέπης)=a[1] for i = 2 to n do if A[i] > max(τσέπης) then Θέσε max(τσέπης) = A[i] end if end for (από εδώ και στο εξής θα εννοούνται μονοδιάστατοι) και ζητείται ένας νέος ταξινομημένος πίνακας που να περιέχει την ξένη ένωση των δύο πινάκων εισόδου. Υπόδειξη. Μία τυχαία επιλογή πινάκων είναι η εξής: A= 1 2 3 4 5 6 1 1 2 3 8 9 B= 1 2 3 4 5 4 4 5 6 7 Οπότε ο ζητούμενος πίνακας είναι ο 1 2 3 4 5 6 7 8 9 10 11 1 1 2 3 4 4 5 6 7 8 9 Ο ανάλογος αλγόριθμος σε φυσική γλώσσα υψηλού επιπέδου είναι ο εξής: 1. Διατηρούμε ένα δείκτη current σε κάθε λίστα και του δίνουμε αρχική τιμή 1. 2. While και οι δύο λίστες δεν είναι κενές: 3. Έστω a i και b j τα στοιχεία που δείχνει το current. Εξάγουμε το min{a i, b j } 4. Αυξάνουμε κατά ένα την τιμή του current στον πίνακα απο τον οποίο επιλέξαμε το min. 5. EndWhile 6. Αν αδειάσει μία λίστα προσαρτούμε τα στοιχεία της άλλης στην λίστα εξόδου. Για να υπολογίσουμε την πολυπλοκότητα χρεώνουμε το κόστος στο βήμα μετακίνησης ενός στοιχείου στον υπο κατασκευή πίνακα. Άρα η πολυπλοκότητα είναι O(n+m) όπου n, m τα μήκη των αρχικών πινάκων. Αν n = m τότε θα εκτελεστούν n επαναλήψεις οπότε η πολυπλοκότητα θα είναι O(n). Ο καινούριος πίνακας έχει n + m στοιχεία,. επομένως ο αλγόριθμος θα έχει τρέξει n + m φορές. Ένας εναλλακτικός αλγόριθμος για το παραπάνω πρόβλημα είναι ο εξής: 1. Απο τον πρώτο πίνακα A[i] συγκρίνουμε το πρώτο στοιχείο με κάθε στοιχείο του πίνακα B[j] και το τοποθετούμε εκεί που πρέπει. 2. Επαναλαμβάνουμε τη διαδικασία για κάθε στοιχείο του A οπότε θα έχουμε n επαναλήψεις. Σημείωση. Η πολυπλοκότητα του παραπάνω είναι O(nm). 3

1.1.5 Τετραγωνικός & Κυβικός χρόνος (σελ. 81, 82. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) Κεφάλαιο 1. Εισαγωγή στο σχεδιασμό αλγορίθμων Παράδειγμα 1.1.2. Έστω n σημεία στο επίπεδο τα οποία χαρακτηρίζονται απο συντεταγμένες (x, y). Να βρεθεί το ζεύγος των σημείων που απέχουν τη μικρότερη απόσταση. Ένας αλγόριθμος που θα σύγκρινε τα σημεία ανά δύο μεταξύ τους (αλγόριθμος ωμής βίας) θα χρειαζόταν ( ) n n(n 1) = = n2 n = O(n 2 ) 2 2 2 Ο χρόνος O(n 2 ) ονομάζεται τετραγωνικός χρόνος εκτέλεσης. Παράδειγμα 1.1.3. (σελ. 82. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) Έστω τώρα S 1, S 2,... S m τυχαία σύνολα τα οποία είναι υποσύνολα του {1... n} και προσπαθούμε να βρούμε ποιά ζεύγη S i, S j έχουν την ιδιότητα S i S j =. Το μέγεθος των δεδομένων εισόδου είναι το άθροισμα S 1 + S 2 + + S m = n (όπου με εννοείται ο πληθάριθμος του συνόλου). Ένας αλγόριθμος που περιγράφει τη διαδικασία εύρεσης των ζητούμενων ζευγών είναι ο εξής: 1. Εξετάζουμε ένα προς ένα όλα τα ζεύγη συνόλων S i, S j. 2. Για κάθε ζεύγος συνόλων S i, S j και κάθε στοιχείο p S i εξετάζουμε αν p S j. 3. Δίνουμε απάντηση αν S i S j ανάλογα με το βήμα 2. Σημείωση. Η πολυπλοκότητα του παραπάνω αλγορίθμου είναι O(n 3 ). Άσκηση 3. Να συγκεκριμενοποιηθούν: 1. Το πλήθος των συνόλων. 2. Ο πληθάριθμος του κάθε συνόλου ώστε ο παραπάνω αλγόριθμος να χρειάζεται Ω(n 3 ) βήματα (δηλαδή τουλάχιστον n 3 βήματα εκτέλεσης). 4

Κεφάλαιο 2 Εισαγωγή στη θεωρία γραφημάτων 2.1 Μάθημα 2. Πέμπτη 22.3.2012 Παράδειγμα 2.1.1 (Αλγόριθμος Πολυπλοκότητας O(n 3 )). Το παράδειγμα αυτό έρχεται σε συνέχεια του παραδείγματος 1.1.3 και είναι η περίπτωση όπου m n (στο βιβλίο είναι m = n). Δεδομένα εισόδου: S 1,..., S n {1, 2..., n} Δεδομένα εξόδου: Τα ζεύγη των συνόλων που είναι ξένα μεταξύ τους. Ερώτηση. Τι είναι μέγεθος δεδομένων; Απάντηση. Τα δεδομένα παρίστανται στην είσοδο του αλγορίθμου κατά έναν εύλογο γενικώς αποδεκτό τρόπο. Στο προηγούμενο πρόβλημα το μέγεθος των δεδομένων εισόδου είναι n. υποθέτουμε οτι m n (στο βιβλίο m = n). Στη συγκεκριμένη περίπτωση το μέγεθος των δεδομένων εισόδου είναι Επιπλέον S 1 + S 2 + + S m = N (2.1) Η πολυπλοκότητα σε αυτή την περίπτωση είναι O(N 2 ) (αυτό προκύπτει αν χρεώνουμε κάθε βήμα του αλγορίθμου στα ζεύγη των υπό εξέταση στοιχείων). Εφαρμογή:. τα 1,2 Για S 1 = {1, 2, 3}, S 2 = {4} και S 3 = {1, 2, 5} με S 1, S 2, S 3 {1, 2, 3, 4, 5} οπότε. ) θα έχουμε S 1 + S 2 + S 3 = 7 και ( 7 2 = 21 Για κάθε ζεύγος ο αλγόριθμος θα παίρνει. τα στοιχεία του πρώτου ζεύγους και θα τα συγκρίνει με τα στοιχεία του δεύτερου. Για τη διδασκαλία της θεωρίας γραφημάτων έγινε κατ εξαίρεση χρήση του βιβλίου Εισαγωγή στους αλγορίθμους, από το παράρτημα. του οποίου είναι και οι παραπομπές. Σε αυτό το κεφάλαιο κάνουμε ένα στοιχειώδες πέρασμα από τη θεωρία γραφημάτων. Οι ορισμοί είναι όλοι απλοποιημένοι και ενδέχεται να διαφοροποιούνται από σύγγραμμα 5 προσμετρώνται δύο φορές

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων σε σύγγραμμα. Θα μπορούσαμε απλουστευτικά να πούμε ότι γράφημα είναι μία συλλογή από τελείες και γραμμές. Οι τελείες θα λέγονται κορυφές ή κόμβους του γραφήματος και οι γραμμές θα λέγονται ακμές. Ένα γράφημα θα συμβολίζεται με G(V, E) όπου με V θα εννοούμε το σύνολο των κορυφών του και με E το σύνολο των ακμών του. Το V έχει γενικά τη μορφή V = {A 1, A 2... A n } (όπου A i σημεία του εκάστοτε χώρου) και το E είναι E = {{u, v} u V και v V, u v}. Παρατήρηση. Αν στις ακμές δώσουμε κατεύθυνση (δηλάδη E = {(u, v) u V και v V, u v}) τότε το γράφημα λέγεται κατευθυνόμενο. 1 (σελ. Π-24. Εισαγωγή στους αλγορίθμους, Cormen, Leiserson, Rivest, Stein). Δίνουμε παρακάτω μία σειρά ορισμών που θα μας χρειαστούν στη συνέχεια: Ορισμός 2.1.1 (Διαδρομή σελ. Π-25). Μία πεπερασμένη ακολουθία απο κορυφές στην οποία κάθε ζεύγος διαδοχικών κορυφών αποτελεί ακμή ονομάζεται διαδρομή. Ορισμός 2.1.2 (Κύκλος σελ. Π-25). Μία ακολουθία στην οποία το πρώτο και το τελευταίο στοιχείο ταυτίζονται και όλα τα στοιχεία συνδέονται μεταξύ τους με ακμές ονομάζεται κύκλος. Ορισμός 2.1.3 (Συνεκτικό σελ. Π-25-το ονομάζει συνδεδεμένο ). Το γράφημα του οποίου όλες οι κορυφές συνδέονται ανά δύο με κάποια ακμή. Ορισμός 2.1.4 (Συνεκτική συνιστώσα σελ. Π-25-το ονομάζει συνδεδεμένες συνιστώσες ). Το maximal σύνολο κορυφών που οποιαδήποτε δύο στοιχεία του συνδέονται με μία διαδρομή. Ορισμός 2.1.5 (επαγώμενο γράφημα σελ. Π-26). Άν G(V, E) είναι ένα γράφημα και V V τότε το επαγόμενο γράφημα του G είναι το G (V.E ) όπου E = {{u, v} u, v V } Ορισμός 2.1.6 (υπογράφημα σελ. Π-26). Αν G(V, E) ένα γράφημα και V V, E E τότε το G (V, E ) ονομάζεται υπογράφημα του G. 1 στη βιβλιογραφία συχνά αναφέρονται και σαν κατευθυντά γραφήματα 6

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Παράδειγμα 2.1.2. Στο παραπάνω γράφημα έχουμε V = {V 1, V 2, V 3 }, E = {V 1, V 2 } και το G = (V, E ) είναι υπογράφημα του G αλλά όχι και επαγόμενο γράφημα. Πρόταση 2.1.1 (άσκηση Β. 4-3 σελ. Π-28). Έστω G = (V, E) ένα συνεκτικό γράφημα. Τότε θα ισχύει ότι E V 1. Ορισμός 2.1.7 (Δένδρο, σελ.π-28,29). Ένα άκυκλο, συνεκτικό γράφημα ονομάζεται δένδρο. Θεώρημα 2.1.2 (σελ. Π-29). Έστω G = (V, E). Τα παρακάτω είναι ισοδύναμα: Το G είναι δένδρο. Οποιοιδήποτε κόμβοι του G συνδέονται μεταξύ τους μέσω μίας και μόνο μίας διαδρομής. Το G είναι συνεκτικό αλλά, αν αφαιρεθεί μία οποιαδήποτε ακμή απο το E τότε χάνει τη συνεκτικότητα του. Το G είναι συνεκτικό και ισχύει ότι E = V 1 Το G είναι άκυκλο και ισχύει ότι E = V 1 To G είναι άκυκλο αλλά αν του προσθέσουμε μία ακμή τότε θα πάψει να είναι άκυκλο. Οι αποδείξεις των ισοδυναμιών μπορούν να βρεθούν στο βιβλίο Εισαγωγη στους αλγορίθμους. 2.1.1 Δένδρα με ρίζα To μήκος της ρίζας μέχρι την κορυφή x ονομάζεται βάθος της x. 7

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Τα r, x 1 ονομάζονται πρόγονοι του x. Το x 1 ονομάζεται γονεϊκός κόμβος του x. Το x ονομάζεται παιδί του x 1. Τα x, y ονομάζονται αδελφοί κόμβοι. Εσωτερικοί ονομάζονται οι κόμβοι που έχουν παιδιά. Ύψος λέμε τη μεγαλύτερη απόσταση του x από φύλλο που είναι απόγονος του. Βαθμός κόμβου είναι ο αριθμός των απογόνων ενός κόμβου. Δυαδικό ονομάζεται το δένδρο που έχει το πολύ δύο παιδιά σε κάθε κόμβο. Ένα δυαδικό δένδρο με ρίζα ύψους h καλείται ισοσταθμισμένο αν και μόνο αν ικανοποιούνται οι παρακάτω δύο συνθήκες: 1. Κάθε κόμβος με βάθος γνησίως μικρότερο του h 1 έχει ακριβώς δύο τέκνα. 2. Τα φύλλα βάθους h είναι συγκεντρωμένα αριστερά Ερώτηση. Έστω τ ένα ισοσταθμισμένο δένδρο ύψους h. Πόσους κόμβους έχει? (άνω & κάτω φράγμα). Απάντηση. Σχεδιάζοντας ένα δένδρο θα είχαμε το αντίστοιχο σχήμα: 8

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Όπου n ο αριθμός των κόμβων και h το ύψος του δένδρου. Κάθε κόμβος έχει 2 παιδιά. Οπότε η ρίζα θα έχει 2 παιδιά, τα δύο επόμενα παιδιά θα γεννήσουν 2 2 = 4 παιδιά και τα επόμενα 4 παιδιά θα γεννήσουν 2 3 = 8 και συνεχίζοντας θα έχουμε στο n 1 επίπεδο, 2 n 1 κόμβους άρα για το: άνω φράγμα: 1 + 2 + 2 2 + + 2 h = 2 h+1 1 κάτω φράγμα: 1 + 2 + 2 2 + + 2 h 1 + 1 = 2 h Άρα 2 h n 2 h+1 1 2 h n < 2 h+1 h logn < h + 1 h = [log n] (2.2) Άρα σε ένα ισοσταθμισμένο δένδρο το ύψος h ισούται με [log n] όπου n ο αριθμός των κόμβων του δένδρου. 2.1.2 Δομές Δεδομένων (σελ. 87,88,89. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) Σε αυτό το κεφάλαιο θα μελετήσουμε τη χρήση δομών δεδομένων για να υλοποιήσουμε ουρές προτεραιότητας. Έστω S ένα σύνολο τότε για κάθε v S οι επιθυμητές πράξεις είναι η πρόσθεση στοιχείων, η αφαίρεση, ο εντοπισμός στοιχείου με το μικρότερο δυνατό κλειδί. Θα χρησιμοποιήσουμε ισοσταθμισμένα δένδρα με ιδιότητα ουράς. 2.2 Μάθημα 3. Παρασκευή 30.4.2012 2.2.1 Ουρές προτεραιότητας (σελ. 87. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) 9

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Σημείωση. Αυτό το μάθημα είναι μία ευγενική χορηγία του μέλους Λις από το φορουμ και της Ιφιγένειας! Ορισμός 2.2.1 (ουρά προτεραιότητας). Έστω ένα πεπερασμένο σύνολο S. Για κάθε στοιχείο v S υπάρχει μία τιμή key(v) η οποία υποδηλώνει την προτεραιότητα του στοιχείου v. Όσο πιο μικρό είναι το κλειδί, τόσο πιο μεγάλη η προτεραιότητα. Οι ουρές προτεραιότητας υποστηρίζουν την προσθήκη (insert), τη διαγραφή (delete/extract) και την εύρεση του στοιχείου με το μικρότερο κλειδί (find min). Το επόμενο πράγμα που θα χρειαστούμε είναι η δομή του σωρού. Για να εξηγήσουμε τη χρησιμότητα του σωρού θα δώσουμε ένα παράδειγμα από το βιβλίο Σχεδιασμός αλγόριθμων, (σελ.89). Έστω μία λίστα με n στοιχεία και έστω ότι ξεχωριστά από τη λίστα διατηρούμε ένα δείκτη min ο οποίος αποθηκεύει το μικρότερο στοιχείο. Όταν θέλουμε αφαιρούμε το μικρότερο στοιχείο. Μετά την αφαίρεση όμως, θα πρέπει να αλλάξουμε την τιμή του min ελέγχοντας όλα τα άλλα στοιχεία (λειτουργία που απαιτεί O(n) χρόνο εκτέλεσης). Ο χρόνος αυτός δε θα χρειαζόταν αν εργαζόμασταν με ταξινομημένους πίνακες. Αντίστοιχα όμως σε έναν ταξινομημένο πίνακα, αν θέλαμε να προσθέσουμε ένα στοιχείο θα έπρεπε να ελέγξουμε το κλειδί του και να το συγκρίνουμε με όλα τα άλλα για να το καταχωρίσουμε. Οπότε, είτε δουλεύαμε με ταξινομημένους πίνακες, είτε με λίστες, σε κάποια περίπτωση θα χρειαζόμασταν χρόνο O(n) είτε για την εισαγωγή, είτε για την αφαίρεση στοιχείου. Έδώ εισάγεται η έννοια του σωρού, ο οποίος συνδυάζει τα πλεονεκτήματα μιας λίστας και ενός ταξινομημένου πίνακα. Μπορούμε να φανταζόμαστε τον σωρό σαν ένα ισοσταθμισμένο δένδρο: Εικόνα 2.1: Σωρός με τη μορφή ισοσταθμισμένου δένδρου Ας υποθέσουμε τώρα ότι θέλουμε να τοποθετήσουμε το 3 στον παραπάνω σωρό. Ο πιο γρήγορος τρόπος είναι να τοποθετήσω το 3 στο τέλος, σαν φύλλο και να ελέγξω αν ικανοποιούνται οι ιδιότητες του σωρού με τη μέθοδο της φυσαλίδας, προωθώντας δηλαδή το 3 μέχρι τη σωστή θέση. Αυτό αν το σχεδιάζαμε θα έμοιαζε κάπως έτσι: 10

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Εικόνα 2.2: Εισαγωγή στοιχείου Εικόνα 2.3: Αναδιατάξεις Αν θέλαμε να περιγράψουμε την παραπάνω διαδικασία θα λέγαμε ότι: Εισάγουμε το στοιχείο 3 (γράφημα 1.2) Συγκρίνω το 3 με το 11 και αφού 3 11 το προωθώ. Συγκρίνω το 3 με το 5 και αφού 3 5, προωθώ. Ας υποθέσουμε τώρα ότι θέλουμε να εξάγουμε (extract) το 3 από το σωρό. Τότε o πιο γρήγορος τρόπος είναι να προωθήσουμε το κάτω δεξιά φύλλο, να ελέγξουμε την ιδιότητα και να ξαναπροωθήσουμε. Πριν προχωρήσουμε στις χρήσεις ενός σωρού θα εμβαθύνουμε λίγο περισσοτερο στην αναπαράσταση του. Αν το μήκος του σωρού είναι N τότε ο σωρός μπορεί να αναπαρασταθεί σε έναν πίνακα H με δείκτη i οποίος θα παίρνει τιμές i = 1,..., N: H= i 1 2 N Οι κόμβοι του σωρού αντιστοιχούν στις θέσεις του πίνακα, οπότε στη θέση H[1] θα είναι η ρίζα και για τον τυχαίο κόμβο i τα παιδιά είναι στις θέσεις: LeftChild(i) = 2i και Rightchild(i) = 2i + 1 Για να βοηθήσουμε στην κατανόηση της αναπαράστασης με τη μορφή πίνακα, θα αναπαραστήσουμε το γράφημα της εικόνας 2.1 με τη μορφή πίνακα: H= 1 4 5 10 9 7 11 11 13 14 12 16 15 17 X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Παρατηρήστε ότι τα παιδιά της ρίζας είναι τα: LeftChild(1) = 2 1 = 2 δηλαδή το στοιχείο H(2) = 4 και RightChild(1) = 2 1 + 1 = 3 δηλαδή το στοιχείο H(3) = 5 ενώ τα παιδιά του 7 δηλαδή του στοιχείου H(6) του πίνακα είναι τα εξής: LeftChild(6) = 2 6 = 12 δηλαδή το στοιχείο H(12) = 16 και RightChild(6) = 2 6 + 1 = 13 δηλαδή το στοιχείο H(13) = 15 Ο πατέρας ενός στοιχείου με δείκτη i του πίνακα δίνεται από τη σχέση: P arent(i) = i/2 όπου με x συμβολίζουμε το ακέραιο μέρος του x. Δίνουμε τώρα τον ορισμό του σχεδόν σωρού. 11

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Ορισμός 2.2.2. Έστω H ένας πίνακας και το v είναι το στοιχείο της θέσης i (δηλαδή H(i) = v). Θα λέμε ότι ο H είναι σχεδόν σωρός 2 αν υπάρχει a > key(v) ώστε: αν στο v αποδωθεί το κλειδί a τότε θα ισχύει η ιδιότητα του σωρού. Ας φανταστούμε τώρα ότι έχουμε εισάγει ένα στοιχείο σε έναν σωρό. Η εισαγωγή του στοιχείου σαν φύλλο ενδεχομένως χάλασε την ιδιότητα του σωρού αφού το κλειδί του παιδιού μπορεί να είναι μικρότερο απο το κλειδί του γονέα. Για να διορθώσουμε τον σωρο χρησιμοποιούμε τον παρακάτω αλγόριθμο: Algorithm 2 Heapify-up(H,i) if i>1 then Έστω j = i/2 if keyh[i] < keyh[j] then αντάλλαξε H[i], H[j] Heapify-up(H,j) end if end if Η Heapify-up διορθώνει τον σωρό σε χρόνο O(log n) αν υποθέσουμε ότι ο H είναι σχεδόν σωρός και το κλειδί H[n] είναι πολύ μικρό. Έστω τώρα S σύνολο με n στοιχεία. Για να ταξινομηθεί το S σε σωρό απαιτείται Ο(n log n) χρόνος με διαδοχικά find, ExtractMin, Heapsort. Άσκηση 4. Nα γραφεί ο αλγόριθμος Heapify-down. 2.2.2 Αναπαράσταση γραφημάτων (σελ. 118. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) Η αναπαράσταση ενός γραφήματος μπορεί να γίνει με δύο τρόπους. Είτε με πίνακα γειτνίασης 3 είτε με λίστα γειτνίασης. Έστω ένα γράφημα G = (V, E) και n = V (ο αριθμός των κόμβων), m = E (ο αριθμός των ακμών). Ο πίνακας γειτνίασης του γραφήματος είναι ένας πίνακας A διάστασης n n όπου το στοιχείο A[u, v] έχει τιμή 1 αν το γράφημα περιέχει την ( ακμή ) (u, v) και 0 αν δεν την περιέχει. Ο αριθμός των ακμών m είναι το πολύ n αφού γενικά εργαζόμαστε θεωρώντας το πολύ μία ακμή μεταξύ δύο κόμβων. 2 Αντίστοιχα ο αριθμός των ακμών είναι τουλάχιστον 0. Άρα, 0 m ( ) n 2 = n(n 1) 2 = O(n 2 ) Άρα m =O(n 2 ), δηλαδή ένας πίνακας γειτνίασης απαιτεί χώρο O(n 2 ). Αν είναι m = Θ(n 2 ) τότε λέμε ότι το γράφημα είναι πυκνό, ενώ αν m =O(n) τότε λέμε ότι το γράφημα είναι αραιό. Γενικά θα ασχοληθούμε με αραιά γραφήματα. 2 σελ. 93 του βιβλίου 3 μήτρα γειτνίασης στο βιβλίο 12

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Τα στοιχεία της διαγωνίου του πίνακα είναι. μηδενικά αφού έχουμε απαγορεύσει την ύπαρξη βρόγχων. Εφόσον εργαζόμαστε με μη κατευθυνόμενα. γραφήματα, ο πίνακας θα είναι συμμετρικός ως προς την κύρια διαγώνιο. Ο πίνακας γειτνίασης δεν ενδείκνυται γιατί είναι πολύ μεγάλος: καταλαμβάνει O(n 2 ) χώρο ενώ, όπως θα δούμε παρακάτω, η λίστα γειτνίασης χρειάζεται μόνο O(m) χώρο (αφού θα ασχοληθούμε αραιά γραφήματα, δηλαδή με γραφήματα με λιγότερες απο n 2 ακμές). Η λίστα γειτνίασης είναι μία εγγραφή στην οποία, για κάθε κόμβο v έχουμε μία λίστα Adj[v] η οποία περιλαμβάνει όλες τις κορυφές που είναι γειτονικές με την v. Η λίστα γειτνίασης χρειάζεται Ο(n) χώρο γιατί: καταρχάς χρειαζόμαστε έναν πίνακα δεικτών μήκους n. Έπειτα χρειαζόμαστε χώρο για όλες τις λίστες, όπου, παρά το ότι τα μήκη των λιστών μπορεί να διαφέρουν απο κόμβο σε κόμβο θα ισχύει ότι κάθε ακμή e = (v, w) θα εμφανίζεται μόνο σε δύο από τις λίστες: στη λίστα του κόμβου v και στη λίστα του κόμβου w. Έτσι το συνολικό μήκος για όλες τις λίστες είναι O(n). Παράδειγμα 2.2.1. Έστω το παρακάτω γράφημα: Εικόνα 2.4: Με πίνακα γειτνίασης θα χρειαστώ 7 7 = 49 στοιχεία. Με λίστα θέλω: V 1 V 2 V 3 V 2 V 1 V 4 V 3 V 7 V 8 V 1 V 4 V 4 V 2 V 3 V 5 V 6 V 3 V 6 V 5 V 8 V 7 V 3 V 8 V 3 V 5 V 6 Oπότε ο χώρος που καταλαμβάνεται περιέχει 18 στοιχεία. Ορίζουμε d(v) να είναι ο βαθμός μιας κορυφής δηλαδή, το πλήθος των κορυφών που γειτνιάζουν με την V. Τότε το μήκος της λίστας( στη θέση ) Adj[v] είναι d(v) οπότε το συνολικό μήκος για όλους τους κόμβους είναι Ο d(v) όπου d(v) = 2m v V v V 13

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Σημείωση. Η απόδειξη του παραπάνω υπάρχει στο Σχεδιασμός αλγορίθμων στη σελίδα 120 (και είναι αρκετά μικρή). 2.2.3 Εξερεύνηση κατά πλάτος (σελ. 121. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) Ορίζουμε τώρα την εξερεύνηση κατά πλάτος σε μία λίστα γειτνίασης. Εικόνα 2.5: Οι κόκκινες ακμές μας δίνουν την ελάχιστη διαδρομή για 2 κορυφές. Επίσης οι κόκκινες γραμμές είναι ένα δένδρο του οποίου οι κορυφές καλύπτουν όλες τις κορυφές του αρχικού γραφήμματος. Ερώτηση. Πως λειτουργεί ο παρακάτω αλγόριθμος; Απάντηση. Ο αλγόριθμος μας εξετάζει τους γειτονικούς κόμβους από αυτόν στον οποίο είμαστε. Για να το κάνει αυτό αποδοτικά, θα πρέπει να θυμάται αν έχουμε ήδη εξετάσει έναν κόμβο σε προηγούμενη αναζήτηση. Για το λόγο αυτό έχουμε τον πίνακα Discovered[v] ο οποίος αρχικά είναι false για όλα τα στοιχεία, αφού δεν έχουμε εξετάσει κανέναν κόμβο. Ο αλγόριθμος κατασκευάζει επίπεδα κόμβων L 1, L 2... για αυτό δίνει αρχική τιμή s (αφετηρία) στο L[0]. Αμέσως μετά κατασκευάζει το επόμενο επίπεδο L[1], απο το L[0], το οποίο αποτελείται από τους κόμβους v που πρόσκυνται στην αφετηρία. Αμέσως μετά αυξάνεται κατά 1 το i και επαναλαμβάνει την ίδια λειτουργία, μόνο που τώρα, και για όλες τις επόμενες επαναλήψεις, θα εξετάζει (με το if Discovered[v]=False) μήπως έχουμε ξαναπεράσει από αυτή την κορυφή ώστε να την αγνοήσει. Δίνουμε τώρα και την ακριβή μόρφή του αλγόριθμου αναζήτησης κατά πλάτος: 14

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Algorithm 3 BFS(s) Πες Discovered[s]=True και Discovered[v]=false {για όλους τους κόμβους v} L[0] = {s} i = 0{μετρητής επιπέδου} T = while L[i] do Δώσε αρχική τιμή στο L[i + 1] for κάθε κόμβο u L[i] do θεώρησε τις κορυφές v που γειτνιάζουν με την u. if Discovered[v]=False then Discovered[v]=True Πρόσθεσε {u, v} στο δένδρο T Πρόσθεσε to v στην L[i + 1] end if end for i=i+1 end while 2.3 Μάθημα 4. Παρασκευή 5.4.2012 2.3.1 Εξερεύνηση Γραφημάτων Η εξερεύνηση γραφημάτων 4 μπορεί να γίνει με δύο τρόπους. Είτε κατά πλάτος, είτε σε βάθος. Κατά πλάτος, ορίζουμε καταρχάς το επίπεδο L 0 = {s} για να δείξουμε ότι ξεκινάμε από αυτόν τον κόμβο. Το επίπεδο 1 αποτελείται από τους κόμβους που είναι γειτονικοί με τον s. Έστω τώρα, ότι έχουμε δεδομένο το επίπεδο L i. Για να κατασκευάσουμε το L i+1 θεωρούμε τα στοιχεία του L i το ένα μετά το άλλο και για κάθε ένα απο αυτά προσθέτουμε στο L i+1 όλους τους γείτονες του που δεν εμφανίζονται σε προηγούμενο επίπεδο. Οι ακμές που οδηγούν σε νεοκαλυπτόμενες κορυφές αποτελούν δένδρο (spaning tree). Παράδειγμα 2.3.1. Θεωρούμε το παρακάτω γράφημα: 4 Διάτρεξη γραφήματος στο βιβλίο, σελ. 109 15

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Εικόνα 2.6: Παράδειγμα 1.4.1 Οπότε τα επίπεδα διαμορφώνονται ως εξής: L 0 = {V 5 } οι γείτονες του V 5 είναι τα V 3, V 6 L 1 = {V 3, V 6 } οι γείτονες των V 3, V 6 είναι τα V 4, V 2, V 7 L 2 = {V 4, V 2, V 7 } οι γείτονες των V 4, V 2, V 7 είναι τα V 1, V 2, V 9, V 8 αλλά το V 2 έχει ήδη αναφερθεί, οπότε παραλλείπεται. Η αναζήτηση (εξερεύνηση) κατά πλάτος 5 ενός γραφήματος έχει την παρακάτω μορφή: Σημείωση. S(u, R) όπου S από τη λέξη search, u: η ρίζα και R: οι ήδη εξερευνημένοι κόμβοι. Algorithm 4 S(u,R) Πρόσθεσε το u στο R for όλα τα v R do while υπάρχει {v, ω} με ω / R do Πρόσθεσε το w στο R end while end for Παράδειγμα 2.3.2. Στο παρακάτω παράδειγμα, η εκτέλεση του αλγόριθμου S(u, R) θα έδινε: 5 σελ. 113 στο βιβλίο 16

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Εικόνα 2.7: Παράδειγμα 1.4.2 S(V 7, R) R = {V 7 } R = {V 7, V 1, V 6 } R = {V 7, V 1, V 6, V 5, V 2 } R = {V 7, V 1, V 6, V 5, V 2, V 3, V 4, V 9, V 8 } Η αναζήτηση κατά βάθος έχει την εξής μορφή: Εικόνα 2.8: Παράδειγμα 1.4.3 Όπου: V 1 V 8 {V 7 V 8 } V 6 {V 1 V 5 } V 9 {V 8 V 9 } V 2 {V 6 V 2 } V 4 {V 7 V 4 } V 3 {V 2 V 3 } V 5 {V 7 V 5 } V 7 {V 3 V 7 } 17

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Στην αναζήτηση κατά βάθος οδηγούμαστε. σε γειτονικές κορυφές με πολύ αργό ρυθμό, άρα δεν είναι ο καλύτερος τρόπος για να βρίσκουμε κοντινές αποστάσεις. Ο αλγόριθμος τώρα, για την αναζήτηση κατά βάθος είναι ο εξής: Algorithm 5 DFS(u): Depth First Search H u είναι εξερευνημένη και την προσθέτουμε στο R{Όπου u η ρίζα} for όλα τα {u, v} do if V ένας όχι εξερευνημένος κόμβος τότε να εξερευνηθεί: then DFS(V ) end if end for Στους αλγορίθμους που αναφέραμε (BFS, DFS), πολλές φορές χρειάστηκε η καταχώριση στοιχείου σε κάποια δομή δεδομένων και ο έλεγχος έπειτα των στοιχείων της δομής. Η δομή που χρησιμοποιούμε έχει τη μορφή λίστας. Το ζήτημα το οποίο προκύπτει έχει να κάνει με τη σειρά με την οποία θα εξεταστούν τα στοιχεία της λίστας. Οι επιλογές που έχουμε για την λίστα είναι δύο: Με στοίβα ή με ουρά Η ουρά (queue) είναι ένα σύνολο από το οποίο εξάγουμε στοιχεία με τον εξής τρόπο: το στοιχείο που μπαίνει πρώτο είναι και το πρώτο που εξάγεται απο τη λίστα (FIFO- First In, First Out). Η στοίβα (stack) είναι ένα σύνολο το οποίο λειτουργεί ως εξής: το στοιχείο που εισάγεται τελευταίο είναι και το πρώτο που εξάγεται (LIFO-Last In, First Out). Οι λειτουργίες μιας στοίβας είναι δύο: Push: Εντολή η οποία προσθέτει στοιχείο στην κορυφή της στοίβας. Pop: Εντολή η οποία εξάγει το στοιχείο της κορυφής. Στη δομή της ουράς (FIFO) υπάρχουν πάλι δύο εντολές: Add: Πρόσθεσε το στοιχείο στο τέλος της ουράς. Remove: Αφαίρεσε το πρώτο στοιχείο της ουράς. Ουσιαστικά, ο αλγόριθμος αναζήτησης κατά βάθος (DFS) λειτουργεί με στοίβα, ενώ ο αλγόριθμος αναζήτησης κατά πλάτος (BFS) με ουρά. Δίνουμε τώρα την κανονική μορφή του αλγόριθμου αναζήτησης κατά βάθος: 18

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων Algorithm 6 DFS(u): Depth First Search Όρισε S ως στοίβα με μόνο ένα στοιχείο s (push s) while το S δεν είναι κενό do pop u από την S if ο κόμβος u δεν έχει εξερευνηθεί then κάνε τον εξερευνημένο for κάθε ακμή uv που πρόσκειται στον u do Push v end for end if end while Παράδειγμα 2.3.3. Στην εικόνα 1.8, ο αλγόριθμος DFS θα έκανε τα εξής: οπότε θα συνέχιζε μέχρι η στοίβα να άδειαζε. Άσκηση 5. Έστω ένα δυαδικό δένδρο με ρίζα και έστω ϕ ο αριθμος των φύλλων, δ ο αριθμός των κόμβων με δύο παιδιά. Να δείξετε ότι ισχύει η σχέση: ϕ = δ + 1 (2.3) Υπόδειξη. Έστω ένα δένδρο με έναν κόμβο. Τότε είναι δ = 0 και ϕ = 1. Έστω τώρα T ένα δυαδικό δένδρο με n + 1 κόμβους. Θέλουμε να αποδείξουμε ότι ϕ T = δ T + 1. Η επαγωγική υπόθεση λέει ότι κάθε δένδρο S με n κόμβους έχει ϕ s = δ s + 1 φύλλα. Αφαιρούμε ένα φύλλο από το T και έστω T το δένδρο που προκύπτει. Με βάση την επαγωγική υπόθεση θα έχουμε ϕ T = δ T + 1 (2.4) Ως προς την αφαίρεση φύλλου έχουμε τις εξής, δύο περιπτώσεις: 1. Το φύλλο δεν έχει αδελφό. Τότε ϕ T = ϕ T και δ T = δ T 2. Το φύλλο δεν έχει αδελφό. Τότε ϕ T = ϕ T 1 και δ T = δ T 1 Χρησιμοποιώντας την επαγωγική υπόθεση καταλήγω στο συμπέρασμα. 19

Κεφάλαιο 2. Εισαγωγή στη θεωρία γραφημάτων 20

Κεφάλαιο 3 Άπληστοι αλγόριθμοι 3.1 Μάθημα 5. Πέμπτη 3.5.2012 Η πρόοδος θα γίνει το Σάββατο 12/5. Στις 10/5 (Πέμπτη) θα γίνει κανονικά το μάθημα, στις 11/5 (Παρασκευή) και ώρα 13:00. με 15:00, θα γίνει φροντιστήριο ασκήσεων Η εξερεύνηση γραφήματος μπορεί να γίνει με δύο τρόπους: είτε κατά πλάτος, είτε κατά βάθος. Η αναζήτηση κατά πλάτος χρησιμοποιεί ουρά (FIFO) για την αποθήκευση δεδομένων, ενώ η αναζήτηση κατά βάθος χρησιμοποιεί στοίβα (LIFO). Ερώτηση. Πως χρησιμοποιώ τις 2 δομές για υλοποίηση αλγορίθμων; Έστω ότι έχουμε S κορυφές εκκίνησης και R μία ουρά ή μία στοίβα. Οι αλγόριθμοι είναι οι εξής: Algorithm 7 DFS(u): Depth First Search Πρόσθεσε την s στο R while το R δεν είναι κενό do τράβηξε ένα στοιχείο u από το R if ο κόμβος u δεν έχει εξερευνηθεί then σημάδεψε τον ως εξερευνημένο Πρόσθεσε όλους τους γείτονες του u στο R end if end while Άσκηση 6. Έστω G = (V, E) ένα συνεκτικό γράφημα και s V κορυφή εκκίνησης. Έστω T π και T β οι δύο δενδροπαράγοντες που δημιουργούν οι κατά πλάτος και κατά βάθος εξερεύνηση αντίστοιχα. Να αποδειχθεί ότι αν T π = T β τότε G = T π = T β (το αρχικό γράφημα είναι δένδρο). 21

Κεφάλαιο 3. Άπληστοι αλγόριθμοι Υπόδειξη. (σελ. 141, ασκ. 6 στο βιβλίο) Καταρχάς η επαγωγή δεν είναι καλή λύση γιατί αν αφαιρέσω μία κορυφή από τις n + 1 δε γνωρίζω πως θα μετασχηματιστούν οι δύο αναζητήσεις. Με απαγωγή σε άτοπο: Έστω ότι το G είχε κύκλο. Σχεδιάζω το δένδρο με αναζήτηση και κατά βάθος και κατά πλάτος: Εικόνα 3.1: Άσκηση 6 Παρατηρήστε ότι η σειρά επίσκεψης είναι διαφορετική. Επίσης, αφού υποθέσαμε ότι είναι κύκλος θα πρέπει να προσθέσουμε μία ακμή. Διακρίνουμε τις εξής δύο περιπτώσεις: Η ακμή να ενώνει κορυφή η οποία δεν είναι πρόγονος της άλλης κορυφής ή η ακμή να ενώνει κορυφή που να μην είναι πρόγονος της άλλης κορυφής. Πιο επεξηγηματικά, Στην πρώτη περίπτωση, υπάρχει ακμή e 1 = (β i, β j ) E και η e δεν είναι ακμή του T π, T β και επίσης, ούτε η β i είναι πρόγονος της β j, ούτε η β j είναι πρόγονος της β i. Στη δεύτερη περίπτωση, είτε η β i είναι πρόγονος της β j, είτε η β j είναι πρόγονος της β j. Για την πρώτη περίπτωση, έστω κατάσταση όπως στο παραπάνω δένδρο, δηλαδή η (β 2, β 9 ) είναι ακμή του G η οποία δεν ανήκει στο δένδρο. Τότε θα είχαμε επισκεφτεί την β 9 πριν από την β 8, το οποίο είναι άτοπο. Η δεύτερη περίπτωση αφήνεται για εξάσκηση. Προχωράμε τώρα σε ένα σημαντικό κεφάλαιο του μαθήματος, τους άπληστους αλγορίθμους. Σαν μία εισαγωγή στο κεφάλαιο αυτό παραθέτουμε ένα μέρος άπο το βιβλίο Σχεδιασμός Αλγορίθμων, των Kleinberg, Tardos από τη σελίδα 147: Είναι δύσκολο, αν όχι αδύνατο, να ορίσουμε με ακρίβεια τι εννοούμε με τον όρο άπληστος αλγόριθμος (greedy algorithm). Ένας αλγόριθμος είναι άπληστος όταν δομεί μία λύση με μικρά βήματα, παίρνοντας μυωπικές αποφάσεις σε κάθε βήμα για τη βελτιστοποίηση κάποιου υποκείμενου κριτηρίου. Συχνά μπορεί κανείς να σχεδιάσει πολλούς, διαφορετικούς, άπληστους αλγορίθμους για το ίδιο πρόβλημα, όπου καθένας από αυτούς τοπικά και αυξητικά θα βελτιστοποιεί κάποιο διαφορετικό μέτρο στο δρόμο του προς τη λύση. Σε έναν άπληστο αλγόριθμο υπάρχουν δύο απαραίτητες προϋποθέσεις, οι οποίες τον χαρακτηρίζουν: 22

Κεφάλαιο 3. Άπληστοι αλγόριθμοι Απαγορεύεται η δρομολόγηση δύο επικαλυπτόμενων, χρονικά, αιτημάτων. Ο στόχος είναι η ικανοποίηση όσο το δυνατόν μεγαλύτερου αριθμού αιτημάτων. Εικόνα 3.2: παράδειγμα επικαλυπτόμενων αιτημάτων Θα δρομολογήσω το 2ο και το 3ο αίτημα γιατί δεν είναι επικαλυπτόμενα και άρα ικανοποιώ πιο πολλά αιτήματα. Παραθέτουμε τώρα τη γενική μορφή ενός άπληστου αλγορίθμου, όπως μπορεί κανείς να τη βρεί στο βιβλίο, στη σελίδα 150. Algorithm 8 General form of a greedy algorithm Με R συμβολίζουμε το σύνολο όλων των αιτημάτων και με A το σύνολο των ικανοποιημένων αιτημάτων. while το R δεν είναι κενό do Διάλεξε ένα αίτημα (ΠΟΤΕ?) i από το R Ικανοποίησε το i Αφαίρεσε από το R όλα όσα επικαλύπτονται μεταξύ τους Πρόσθεσε το i στο A end while Ο αλγόριθμος αυτός προφανώς είναι ορθός, αφού αφαιρώ τα επικαλυπτόμενα αιτήματα. Δε θα ικανοποιήσει όμως το μεγαλύτερο αριθμό αιτημάτων: Δεν έχω προσδιορίσει το ΠΟΤΕ. Πρέπει να σκεφτώ κάποιο κριτήριο επιλογής. Θα ακολουθήσω μια αρχή πλεονεξίας. Οι προσεγγίσεις ικανοποίησης αιτημάτων είναι τρεις (τα ονόματα δεν υπάρχουν στη βιβλιογραφία): Η δημοκρατική λύση: Επιλέγω πάντα το αίτημα i το οποίο έχει το μικρότερο s(i) (όπως στο παραπάνω παράδειγμα-αυτός δεν είναι ο βέλτιστος τρόπος). Η επιχειρηματική λύση: Επιλέγω με βάση τη διάρκεια f(i) s(i). αυτός ο τρόπος είναι βέλτιστος. Για παράδειγμα: Ούτε όμως Εικόνα 3.3: αν επιλέξω το βραχύτερο αίτημα, θα έχω τελικά ικανοποιήσει μόνο ένα αίτημα 23

Κεφάλαιο 3. Άπληστοι αλγόριθμοι Η σοσιαλιστική λύση: Προηγούνται τα αιτήματα με τις λιγότερες δυνατές διενέξεις (αυτά που είναι τις λιγότερες φορές επικαλυπτόμενα με άλλα αιτήματα). Ούτε αυτός είναι ο βέλτιστος τρόπος. Για παράδειγμα: Εικόνα 3.4: χρησιμοποιώ το (1) το οποίο έχει 2 διενέξεις και έπειτα τα (2) και (3), ενώ θα μπορούσα να επιλέξω τα 4 πάνω αιτήματα και να έχω ικανοποιήσει 4 αιτήματα Αν δρομολογήσω την προτεραιότητα ενός αιτήματος με βάση την ημερομηνία λήξης (f(i)) τότε θα αποδείξω ότι έχω τη βέλτιστη δρομολόγηση. Επιλέγω δίνοντας προτεραιότητα στα αιτήματα με το μικρότερο δυνατό f(i). (Η απόδειξη ότι οδηγεί σε βέλτιστη λύση θα γίνει πιο μετά). Καταρχάς ο αλγόριθμος θα έχει την εξής μορφή: Algorithm 9 General form of a greedy algorithm Με R συμβολίζουμε το σύνολο όλων των αιτημάτων και με A το σύνολο των ικανοποιημένων αιτημάτων. Αρχικά A = while το R δεν είναι κενό do Διάλεξε το αίτημα στο R με το μικρότερο δυνατό f(i) Ικανοποίησε το i Αφαίρεσε από το R όλα όσα επικαλύπτονται μεταξύ τους Πρόσθεσε το i στο A end while Η πολυπλοκότητα του παραπάνω αλγορίθμου είναι O(n log n) μιας και είναι μία ταξινόμηση n αντικειμένων με βάση μία έννοια μεγέθους. Ταξινομώ τα αιτήματα i με αύξουσα σειρά ανάλογα με το f(i) (ημερομηνία λήξης ενός αιτήματος). Επίσης, δημιουργώ έναν πίνακα s[1,... n] ο οποίος στο δείκτη i αποδίδει το s(i) (όπου i τώρα είναι ο δείκτης ταξινόμησης). Η συνολική πολυπλοκότητα είναι O(n log n) + O(n) = O(n log n) Απόδειξη. Έστω f(n) = O(n log n) και g(n) = O(n), οπότε πλέον θέλω να δείξω ότι f(n) + g(n) = O(n log n) (3.1) Από την υπόθεση, υπάρχει σταθερά c > 0 και N N τέτοια ώστε: για κάθε n N με n > N να ισχύει f(n) cn log n (3.2) Επίσης, από την υπόθεση, υπάρχει σταθερά c > 0 και N N τέτοια ώστε: για κάθε n N με n > N να ισχύει g(n) c n log n (3.3) 24

Κεφάλαιο 3. Άπληστοι αλγόριθμοι Οπότε τώρα θέλω να δείξω ότι υπάρχει c > 0 και N N με n > N ώστε f(n) + g(n) c n log n (3.4) Παίρνω N = max{n, N, 1} (το ένα το πήρα γιατί log 1 = 0) οπότε θα έχω: f(n) + g(n) cn log n + c n cn log n + c log n (c + c )n log n (3.5) άρα c = c + c (3.6) Δίνουμε τώρα την ακριβή διατύπωση και την απόδειξη του θεωρήματος που αναφέρθηκε πιο πάνω. Θεώρημα 3.1.1. Ο προγραμματισμός 1 των αιτημάτων με βάση το χρόνο λήξης δημιουργεί ένα βέλτιστο προγραμματισμό. Λήμμα 3.1.2. Έστω i 1,..., i k ένας προγραμματισμός των αιτημάτων με βάση τον αλγόριθμο που περιγράψαμε και έστω j 1,... j m ένας άλλος προγραμματισμός αιτημάτων. Τότε θα έχω: f(i r ) f(j r ) για κάθε r = 1,... k. (3.7) Απόδειξη. Με επαγωγή στο r. Για r = 1 έχω f(r 1 ) f(j 1 ) αφού ο αλγόριθμος επιλέγει το αίτημα με το μικρότερο χρόνο λήξης (f(i)). Για το επαγωγικό βήμα υποθέτω ότι f(i r 1 ) f(j r 1 ) και πρέπει να δείξω ότι f(i r ) f(j r ). Έστω ότι είναι f(j r ) < f(i r ) Έχω ότι f(j r 1 s(j r )) διότι τα j r 1, j r δεν επικαλύπτονται. f(i r 1 ) f(j r 1 ) απο την επαγωγική υπόθεση f(i r ) > f(j r ) (3.8) ΑΤΟΠΟ! Διότι τότε ο αλγόριθμος που περιγράψαμε θα επέλεγε j r αντί για i r. Άρα για κάθε r = 1,..., k ισχύει ότι f(i r ) f(j r ). 1 (σελ. 153. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) 25

Κεφάλαιο 3. Άπληστοι αλγόριθμοι Δίνουμε τώρα την απόδειξη του θεωρήματος: Απόδειξη. Απομένει να δείξω ότι k m. Έστω ότι είναι k < m. Από το προηγούμενο λήμμα ξέρω ότι f(i k ) f(j k ) f(j k ) s(j m ) Διότι δεν υπάρχουν επικαλύψεις μεταξύ των j άρα καταλήγω σε άτοπο, γιατί στο βήμα k υπάρχουν ακόμη μη ικανοποιημένα αιτήματα. Αιτήματα με διάρκεια t i και προθεσμία d i. Δηλαδή, d i s i + t i (3.9) όπου d i : η προθεσμία, s i : ο χρόνος εκτέλεσης και t i : η διάρκεια. Στόχος: να δρομολογηθούν όλα. Θα προσπαθήσω να ελαχιστοποιήσω τη μεγαλύτερη δυνατή καθυστέρηση. Η καθυστέρηση του αιτήματος i συμβολίζεται με l i (latency) και είναι: επίσης L είναι η μέγιστη καθυστέρηση: l i = s i + t i d i (3.10) Το πρόβλημα που θέσαμε πιο πριν αναδιατυπώνεται ως εξής: L = max i=1,...,n l i (3.11) Να ελαχιστοποιηθεί το L. Στον παραπάνω τύπο l i = s i +t i d i τα t i, d i είναι δεδομένα και το s i πρέπει να καθοριστεί από τον αλγόριθμο. Παράδειγμα 3.1.1. Αν το πρώτο αίτημα έχει: t i = 5, d i = 5 (δηλαδή μετα το ξεκίνημα ο αλγόριθμος έχει 5 λεπτά καθυστέρηση) και το δεύτερο: t 2 = 3, d 2 = 3000 τότε: θα είχα μεγάλη καθυστέρηση λόγω d 2, άρα δεν είναι σωστό να βάλω πρώτο το αίτημα με τη μικρότερη διάρκεια. Αν βάλω πρώτη τη μικρότερη διαφορά d i t i επίσης δεν θα είναι καλή κίνηση (αφήνετε για εξάσκηση η επεξήγηση). Θα δείξουμε ότι παίρνοντας μόνο προθεσμίες καταλήγω σε βέλτιστη λύση. Δίνουμε τώρα τον αλγόριθμο για αυτή την ταξινόμηση: Algorithm 10 σελ. 160 στο βιβλίο Ταξινόμησε κατά αύξουσα σειρά ως προς τα d i Έστω d i d n Αρχικά f = s Εξέτασε τις εργασίες i,... n Εκχώρησε στο i το διάστημα s i = f μέχρι να είναι f i = s i + t i Θέσε f = f + t i 3.2 Μάθημα 6. Πέμπτη 10.5.2012 26

3.2.1 Χρονοπρογραμματισμός (Scheduling) Κεφάλαιο 3. Άπληστοι αλγόριθμοι Από το προηγούμενο μάθημα έχουμε αναφέρει ένας προγραμματισμός εργασιών με βάση τις προθεσμίες οδηγεί σε βέλτιστη λύση. Η απόδειξη αυτού του ισχυρισμού χρησιμοποιεί ένα επιχείρημα ανταλλαγής. Δίνουμε δύο λήμματα και μία πρόταση ώστε να φτάσουμε στην απόδειξη του ισχυρισμού μας. Καταρχάς, είναι προφανές ότι ένας βέλτιστος προγραμματισμός δεν έχει χρόνο αδράνειας. Λήμμα 3.2.1 (σελ. 161. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos). Σε έναν προγραμματισμό ο οποίος: 1. δεν έχει χρόνο αδράνειας και 2. δεν υπάρχουν εργασίες i, j τέτοιες ώστε η i να προηγείται της j και η προθεσμία d i > d j, ισχύει ότι ο μέγιστος χρόνος καθυστέρησης είναι πάντα ο ίδιος. Σημείωση. Δύο τέτοιοι προγραμματισμοί θα διαφέρουν μόνο ως προς τη σειρά εκτέλεσης δύο εργασιών με ίδια προθεσμία. Απόδειξη. Έστω δύο διαφορετικοί προγραμματισμοί και έστω δύο εργασίες i, j με την ίδια προθεσμία d. Υποθέτουμε ότι ο πρώτος προγραμματισμός βάζει την i πρώτη και ο δεύτερος βάζει την j πρώτη. Eπίσης, χωρίς βλάβη της γενικότητας μπορούμε να υποθέσουμε ότι οι i, j είναι διαδοχικές και στους δύο προγραμματισμούς. Ισχύει ότι και στους δύο προγραμματισμούς η μέγιστη καθυστέρηση είναι: t B d, αν υπάρχει καθυστέρηση, δηλαδή αν d < t B 0, αν δεν υπάρχει καθυστέρηση, δηλαδή αν d t B. Απομένει, με χρήση του επιχειρήματος ανταλλαγής, να αποδείξω ότι ένας χρονοπρογραμματισμός που ακολουθεί τις προθεσμίες οδηγεί σε βέλτιστη λύση. Απόδειξη. Έστω προγραμματισμός και δύο εργασίες του i, j, διαδοχικές και η i προηγείται της j, ενώ d j < d i. Η ιδέα του επιχειρήματος ανταλλαγής είναι να αντιστρέψουμε τις δύο εργασίες και να αποδείξουμε ότι η μέγιστη καθυστέρηση δε μεγαλώνει μετά την 27

Κεφάλαιο 3. Άπληστοι αλγόριθμοι αντιστροφή. Έχω ότι max(t B d j, t A + t i d i ) (το οποίο είναι η μέγιστη καθυστέρηση στον π), είναι μεγαλύτερο ή ίσο από το max(t B d i, t A +t j d j ) (το οποίο είναι η μέγιστη καθυστέρηση στον π ). Έχουμε δηλαδή ότι max(t B d j, t A + t i d i ) max(t B d i, t A + t j d j ) t B d j max(t B d i, t A + t j d j ) }{{} δε μπορώ να αποφανθώ για το ποιό είναι Αλλά δε με απασχολεί καθώς η ανισότητα ισχύει και για τα δύο: { } t B d j t B d i t B d j t A + t j d j 3.2.2 Διαδρομές & Βελτιστοποίηση (σελ. 171. Σχεδιασμός αλγορίθμων, Kleinberg-Tardos) Σε ένα γράφημα ένα βασικό πρόβλημα είναι η αναζήτηση της ταχύτερης μετάβασης από έναν κάμβο σε κάποιον άλλο. Τέτοια προβλήματα συναντώνται πάρα πολύ συχνά στη μοντελοποίηση δικτύων της καθημέρινης ζωής, ακόμα και όταν προσπαθεί να βρει κάποιος τον συντομότερο τρόπο μετάβασης από μια τοποθεσία σε μία άλλη. Το ζήτημα παρουσιάζει έντονο αλγοριθμικό ενδιαφέρον. Το 1959, ο Ολλανδός Edsger W. Dijkstra πρότεινε έναν πλεονεκτικό αλγόριθμο εύρεσης συντομότερων διαδρομών σε ένα γράφημα. Σε ένα βεβαρυμένα κατευθυνόμενο γράφημα με μία διακεκριμένη κορυφή s (start), ο αλγόριθμος Dijkstra υπολογίζει την απόσταση της s από όλες τις άλλες κορυφές (προφανώς υποθέτουμε ότι υπάρχει διαδρομή από την s προς όλες τις άλλες κορυφές). Καταρχάς, με βάση τον αλγόριθμο Dijkstra, θα βρούμε τις αποστάσεις μεταξύ των κορυφών. Έστω S το σύνολο των κορυφών που σε κάθε φάση ξέρουμε την ελάχιστη απόσταση τους από την αρχική κορυφή, s. Οπότε αρχικά θα είναι S = {s} και S = V τελικά. Σε κάθε φάση θα προστίθεται στο S μία κορυφή. 28

Κεφάλαιο 3. Άπληστοι αλγόριθμοι Algorithm 11 Αλγόριθμος του Dijkstra Είναι δεδομένα τα G, l. Έστω S το σύνολο των εξερευνημένων κόμβων. Για κάθε u S αποθηκεύουμε μια απόσταση d(u). Αρχικά S = {s} και d(s) = 0 while S V do Διάλεξε έναν κόμβο v S με τουλάχιστον μία ακμή από το S για τον οποίο το d (v) = min e=(u,v):v S d(u) + l είναι όσο το δυνατόν μικρότερο. Πρόσθεσε το v στο S και όρισε d(v) = d (v) end while Δίνουμε μία εφαρμογή του αλγορίθμου τώρα: Αρχικά είναι S = {s}, d(s) = 0 και είναι υπό εξέταση οι v 1, v 2, v 4. 1. S = {s, v 1 }, d(v 1 ) = 1. 2. Υπο εξέταση: v 3, v 2, v 4. s v 2 : 2 s v 1 : 1 + 4 s v 4 : 5 3. Υπό εξέταση: v 4, v 4, v 3 (η v 4 υπάρχει δύο φορές γιατί συγγενεύει με τη v 2 αλλά και την s). s v 4 : 5 s v 2 v 4 : 2 + 6 = 8 s v 1 v 3 : 1 + 4 Άρα επιλέγω το v 4 οπότε S = {s, v 1, v 2, v 4 }. 3.3 Μάθημα 7. Πέμπτη 17.05.2012 Μιλάμε για τον αλγόριθμο του Dijkstra και ξεκινάμε με ένα παράδειγμα από το βιβλίο των Cormen, Leiserson, Rivest, Stein. 29

Κεφάλαιο 3. Άπληστοι αλγόριθμοι Παράδειγμα 3.3.1. 1. 2. d(a) = 0 d (b) = 4 d (f) = d (i) = d (c) = d (g) = d (e) = d (d) = d (h) = 8 S : {a, b} d (c) = 12 d (f) = d (i) = d(a) = 0 d (c) = 12 d (g) = d (e) = d(b) = 4 d (d) = d (h) = 8 Εξετάζουμε για αλλαγή του d μόνο τις κορυδές. που συνορεύουν με την τελευταία που προστέθηκε στο S. 3. S : {a, b, h} d(a) = 0 d (c) = 12 d (d) = d(b) = 4 d (i) = 15 d (f) = d(h) = 8 d (g) = 9 d (e) = 4. S = {a, b, h, g} d(a) = 0 d(h) = 8 d (c) = 12 d (d) = d(b) = 4 d(g) = 9 d (f) = 11 d (e) = d (i) = 15 Θεωρητική γραφή Προσθέτουμε στο S το w για το οποίο επιτυγχάνεται το ελάχιστο d (w) = min d(u)+ e=(u,w):u S c(u, w ). Χρονική πολυπλοκότητα. n είναι το πλήθος κορυφών και m το πλήθος των ακμών Απλοίκή ανάλυση: n φάσεις όπου η κάθε μία διαρκεί το πολύ m βήματα άρα πολυπλοκότητα O(m m). Δυσκολότερη ανάλυση: 1. Διατηρούμε ουρά προτεραιότητας με κλειδιά τις τιμές d (w) για w V S 2. Αφαιρούμε το ελάχιστο στοιχείο της ουράς προτεραιότητας, χρόνος O(log n). 3. Η παραπάνω διαδικασία θα επαναληφθεί m φορές. Επομένως η συνολική πολυπλοκότητα του αλγορίθμου θα είναι O(m log n). Τώρα εξηγούμε ξανά πως λειτουργεί ο αλγόριθμος Dijkstra. 30

Κεφάλαιο 3. Άπληστοι αλγόριθμοι Για κάθε στοιχείο το V S: Προσθέτοντας το κόστος της ss και της s g η κορυφή για την οποία το κόστος γίνεται μικρότερο προστίθεται στο S. 2 Απόδειξη ορθότητας Dijkstra Απόσταση της w από την s κατά Dijkstra: d(u) + e. Έστω μία άλλη διαδρομή από το s στο w, αυτή μέσω του p. Αρκεί να αποδείξω ότι το κόστος του μέρους της διαδρομής p από το s στο w είναι μεγαλύτερο ή ίσιο από το d(u) + e. Έχω ότι d(u) + e d(u ) + c(u, w ) a κόστος της p από το s στο w a λόγω του s 3.3.1 Ελάχιστος Δενδροπαράγοντας (Γεννήτικο δένδρο)-spanning tree Μη κατευθυνόμενο γεννητικό δένδρο: Υπογράφημα που είναι δένδρο και του οποίου οι κορυφές εξαντλούν όλες τις κορυφές του αρχικού γραφήματος. αρχή. 2 d είναι η θεωρούμενη σε κάθε βήμα ως ελάχιστη απόσταση μιας εξωτερικής V S κορυφής από την 31

Κεφάλαιο 3. Άπληστοι αλγόριθμοι Θέλουμε να βρούμε ένα γεννητικό δένδρο του οποίου το άθροισμα των βαρών να είναι το ελάχιστο δυνατό. Κάποιες πλεονεκτικές προσεγγίσεις που βρίσκουν σωστά ένα ελάχιστο γεννητικό δένδρο: 1. ΔΙατάσσουμε τις ακμές κατά φθίνον βάρος και τις αφαιρούμε, τη μία μετά την άλλη, για την κάθε μία η αφαίρεση υλοποιηται μόονο αν δε χαλάει η συνεκτικότητα. 2. Κατασκευάζουμε το S ξεκινώντας από μία αρχή s αλλά σε κάθε βήμα προσθέτουμε την ακμή με το ελάχιστο κόστος μεταξύ αυτών που συνδέουν τα στοιχεία του s με το V S. 3. Διατάσσουμε τις ακμές κατά αύξον βάρος και τις προσθέτουμε τη μία μετά την άλλη εκτός αν δημιουργείται κύκλος. Απόδειξη των 2,3 (Kruskal, Prim) Απλοποιητική παραδοχή: όλα τα βάρη είναι διαφορετικά μεταξύ τους. (η συνέχεια στο επόμενο μάθημα.) 32