Βραχύτερα Μονοπάτια σε Γράφους (CLR, κεφάλαιο 25)



Σχετικά έγγραφα
Γράφοι (συνέχεια) Ο αλγόριθµος Dijkstra για εύρεση βραχυτέρων µονοπατιών Ta µονοπάτια Euler

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

Άσκηση 1. Ψευδοκώδικας Kruskal. Παρακάτω βλέπουμε την εφαρμογή του στο παρακάτω συνδεδεμένο γράφημα.

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

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

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

Διδάσκων: Παναγιώτης Ανδρέου

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

Αλγόριθµοι Ροής σε Γράφους (CLR, κεφάλαιο 27)

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

Βραχύτερα Μονοπάτια σε Γράφους (CLR, κεφάλαιο 25)

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

Σχεδίαση & Ανάλυση Αλγορίθμων

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

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

Κατ οίκον Εργασία 4 Σκελετοί Λύσεων

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ231: Δομές Δεδομένων και Αλγόριθμοι. Εαρινό Εξάμηνο Φροντιστήριο 10 ΛΥΣΕΙΣ

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

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

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

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

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

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

(CLR, κεφάλαιο 32) Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα: Παραστάσεις πολυωνύµων Πολυωνυµική Παρεµβολή ιακριτός Μετασχηµατισµός Fourier

Άπληστοι Αλγόριθµοι (CLR, κεφάλαιο 17)

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

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

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

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

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

ΕΠΛ 232: Αλγόριθµοι και Πολυπλοκότητα. Κατ οίκον Εργασία 2A Σκελετοί Λύσεων

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

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

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

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

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

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

4η Γραπτή Ασκηση Αλγόριθμοι και Πολυπλοκότητα CoReLab ΣΗΜΜΥ 7 Φεβρουαρίου 2017 CoReLab (ΣΗΜΜΥ) 4η Γραπτή Ασκηση 7 Φεβρουαρίου / 38

Αλγόριθµοι Οπισθοδρόµησης

4η Γραπτή Ασκηση Αλγόριθμοι και Πολυπλοκότητα CoReLab ΣΗΜΜΥ 3/2/2019 CoReLab (ΣΗΜΜΥ) 4η Γραπτή Ασκηση 3/2/ / 37

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

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 2: Εφαρμογές Δικτυωτής Ανάλυσης (1 ο Μέρος)

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

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 9: Άπληστοι Αλγόριθμοι. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

ΘΕΩΡΙΑ ΑΡΙΘΜΩΝ Ασκησεις - Φυλλαδιο 3

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

Γράφοι. κόµβοι) και ένα σύνολο από γραµµές (που λέγονται ακµές) οι οποίες

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

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

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

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

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

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

Γράφοι. Ένας γράφος ή αλλιώς γράφηµα αποτελείται απο. Εφαρµογές: Τηλεπικοινωνιακά και Οδικά ίκτυα, Ηλεκτρονικά Κυκλώµατα, Β.. κ.ά.

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

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

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

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

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

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

Μάθηµα Θεωρίας Αριθµών Ε.Μ.Ε

Συντομότερα Μονοπάτια για Όλα τα Ζεύγη Κορυφών

ΣΗΜΕΙΩΣΕΙΣ. η τιμή της συνάρτησης είναι μεγαλύτερη από την τιμή της σε κάθε γειτονικό σημείο του x. . Γενικά έχουμε τον ακόλουθο ορισμό:

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

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

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

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

Αλγόριθμοι και πολυπλοκότητα Τα συντομότερα μονοπάτια(shortest Paths)

Outline 1 Άσκηση 1: Εφαρμογές BFS DFS 2 Άσκηση 2: Μια Συνάρτηση Κόστους σε Κατευθυνόμενα Γραφήματα 3 Άσκηση 3: Ανάλυση Ασφάλειας 4 Άσκηση 4: Το Σύνολο

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

Θέματα Μεταγλωττιστών

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

Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα:

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

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

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

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

Γ. Κορίλη Αλγόριθµοι ροµολόγησης

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

Αλγόριθμοι Eλάχιστα μονοπάτια

ιακριτά Μαθηµατικά και Μαθηµατική Λογική ΠΛΗ20 Ε ρ γ α σ ί α 3η Θεωρία Γραφηµάτων

όπου D(f ) = (, 0) (0, + ) = R {0}. Είναι Σχήµα 10: Η γραφική παράσταση της συνάρτησης f (x) = 1/x.

Θεωρία Γράφων Αλγόριθμοι BFS, Prim, Dijkstra, Bellman-Ford

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

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

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

1 Το πρόβλημα της συντομότερης διαδρομής

< 1 για κάθε k N, τότε η σειρά a k συγκλίνει. +, τότε η η σειρά a k αποκλίνει.

ΑΛΓΟΡΙΘΜΟΙ ΚΑΙ ΠΟΛΥΠΛΟΚΟΤΗΤΑ Φεβρουάριος 2005 Σύνολο μονάδων: 91

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

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1

Σημειωματάριο Δευτέρας 4 Δεκ. 2017

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

Chapter 7, 8 : Completeness

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

Θεωρία και Αλγόριθμοι Γράφων

Διδάσκων: Παναγιώτης Ανδρέου

Transcript:

Βραχύτερα Μονοπάτια σε Γράφους (CLR, κεφάλαιο 25) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ο αλγόριθµος των BellmanFord Ο αλγόριθµος του Dijkstra ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 61

Βραχύτερα Μονοπάτια σε Γράφους Γενίκευση της αναζήτησης κατά βάθος ή πλάτος σε γράφους µε βάρη. Με δεδοµένο ένα κατευθυνόµενο γράφο µε βάρη G=(V,E) και µια συνάρτηση βαρών w: E R, θέλουµε να βρούµε µονοπάτια µε το ελάχιστο δυνατό βάρος. Υπενθύµιση: Το βάρος w(p) ενός µονοπατιού p δίνεται ως εξής: Aν τότε p = v o v k i... v w( p ) = = w( vi 1 1 1,v i k ) Ορισµός: Βραχύτερο µονοπάτι µεταξύ ενός συνόλου από µονοπάτια είναι το µονοπάτι µε το ελάχιστο βάρος. ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 62

Ηδοµή της βέλτιστης λύσης Λήµµα 1 Έστω κατευθυνόµενος γράφος µε βάρη G=(V,E) και έστω p = u v1... v k v το βραχύτερο µονοπάτι µεταξύ των κόµβων u και v. Τότε κάθε υποµονοπάτι του p είναι βραχύτερο. Απόδειξη u v i v j v... Ας υποθέσουµε ότι το πιο πάνω είναι το βραχύτερο µονοπάτι µεταξύ των κόµβων u και v και ότι το υποµονοπάτι v i v j δεν είναι βραχύτερο ανάµεσα στα µονοπάτια που συνδέουν τους κόµβους p και s. Τότε αν αντικαταστήσουµε το βραχύτερο τέτοιο υποµονοπάτι στο αρχικό µονοπάτι θα παίρναµε ένα βραχύτερο µονοπάτι µεταξύ των κόµβων u και v. Αντίφαση! ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 63

H δοµή της βέλτιστης λύσης Συµβολισµός: Θα γράφουµε δ(u,v) για το βάρος του βραχύτερου µονοπατιού από την κορυφή u στην κορυφή v. Λήµµα 2 (Tριγωνική ανισότητα) Για κάθε τριάδα κορυφών u, v, x, δ(u,v) δ(u,x) + δ(x,v) Απόδειξη Τo ελάχιστο µονοπάτι από τον u στον v u δεν είναι µακρύτερο από οποιοδήποτε άλλο µονοπάτι από τον u στο v εν προκειµένω, το µονοπάτι που παίρνει πρώτα το ελάχιστο µονοπάτι από τον u στον κόµβο x και στη συνέχεια από τον x στον v. x v Τι συµβαίνει σε γράφους µε αρνητικά βάρη; Τι συµβαίνει αν υπάρχει κύκλος µε αρνητικό βάρος; ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 64

Αλγόριθµος BellmanFord O αλγόριθµος βρίσκει τα βάρη των ελάχιστων µονοπατιών από µια δεδοµένη πηγή s προς κάθε κορυφή v V. for all v V d[v] = ; d[s]=0; for (i=1; i< V ; i++) for all edges (u,v) E if (d[v] > d[u]+w(u,v)) d[v]= d[u] + w(u,v); for all edges (u,v) E if (d[v] > d[u]+ w(u,v)) NO SOLUTION ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 65

Εξήγηση του αλγόριθµου 1. Στην πρώτη φάση του αλγόριθµου αποδίδονται οι αρχικές τιµές στα d. 2. Για V 1 φορές γίνεται χαλάρωση της κάθε ακµής, δηλαδή µικραίνει η απόσταση της κάθε ακµής από την πηγή s. 3. Τελικά γίνεται έλεγχος κατά πόσο οι τιµές που έχουν δοθεί είναι πράγµατι λύσεις (αυτό συµβαίνει εφόσον δεν υπάρχει κύκλος µε αρνητικό κόστος). Χρόνος Εκτέλεσης: Ο( V E ) ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 66

Παράδειγµα Α 4 1 3 Β 1 2 2 Ε 3 Έστω ότι ακµές τυγχάνουν επεξεργασία µε την εξής σειρά: (Α,Β), (Α,Γ), (Β,Γ), (Β, ), (,Γ), (Ε, ), (Β,Ε). Γ 5 φάση/κορυφή Α Β Γ Ε αρχικές τιµές 0 χαλάρωση 1 0 1 4 2 1 1 χαλάρωση 2 0 1 2 2 1 Οι τιµές για τα d που παίρνουµε σε κάθε φάση χαλάρωσης, καθώς και η ταχύτητα σύγκλισης (αριθµός χαλαρώσεων) είναι συνάρτηση της σειράς επεξεργασίας των ακµών. ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 67

Ορθότητα του Αλγόριθµου είχνουµε ότι d[v] =δ(s,v) µετά από V 1 χαλαρώσεις. Αρχικά έχουµε το πιο κάτω λήµµα. Λήµµα 3 Πάντοτε d[v] δ(s,v). Απόδειξη: Αρχικά αληθής. Υποθέτουµε (για να φθάσουµε σε αντίφαση) ότι υπάρχουν κορυφές για τις οποίες δεν ισχύει η πρόταση του λήµµατος. Έστω v η κορυφή για την οποία συµβαίνει για πρώτη φορά ότι d[v]< δ(s,v). Έστω u η κορυφή που προκάλεσε αλλαγή της d[v]: d[v] = d[u] + w(u,v). Τότε d[v] < δ(s,v) δ(s,u) + δ(u,v) δ(s,u) + w(u,v) d[u] + w(u,v) το οποίο αποτελεί αντίφαση στο ότι d[v] = d[u] + w(u,v). ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 68

Ορθότητα του Αλγόριθµου Θεώρηµα 1 Ο αλγόριθµος BellmanFord είναι ορθός, δηλ. µετά από V 1 χαλαρώσεις όλες οι τιµές του d είναι σωστές (εφόσον τα ελάχιστα µονοπάτια υπάρχουν). Απόδειξη Έστω vµια κορυφή, και θεωρήστε το ελάχιστο µονοπάτι από την πηγή s στη v(υποθέτοντας ότι δεν περνά κύκλος αρνητικού κόστους από κάποια κορυφή πάνω σε κάποιο µονοπάτι από την s στη v): s v... v v 1 k Αρχικά, d[s]=0, το οποίο είναι ορθό και δεν µεταβάλλεται στη συνέχεια (ο κώδικάς µπορεί µόνο να µειώσει το d, ενώ από το Λήµµα 3, πάντοτε d[s] δ(s,s) = 0.) Μετά από την πρώτη χαλάρωση (πρώτο πέρασµα µέσα από τις ακµές), η τιµή d[v 1 ] είναι ορθή και δεν µεταβάλλεται στη συνέχεια, διότι: ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 69

Ορθότητα του Αλγόριθµου Όπως ήδη δείξαµε, η τιµήτηςd[s] είναι ορθή και, από τη δοµήτης βέλτιστης λύσης, η ελάχιστη απόσταση από το s στο v 1 είναι ίση µε w(s, v 1 ). Tο πρώτο πέρασµα θέτει d[v 1 ] = d[s] + w(s, v 1 ) που είναι η σωστή απάντηση, και η τιµή αυτή δεν µεταβάλλεται στη συνέχεια, γιατί, γράφοντας d [v 1 ] για τη τιµή που παίρνει η d[v 1 ] σε οποιαδήποτε επόµενη στιγµή της εκτέλεσης, τότε d [v 1 ] δ(s, v 1 ) d [v 1 ] d[v 1 ] = δ(s, v 1 ) Παρόµοια, ισχύει ότι, µετά από τη δεύτερη χαλάρωση, η τιµή d[v 2 ] είναι ορθή και δεν µεταβάλλεται στη συνέχεια ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 610

Ανάλυση Ο αλγόριθµος τερµατίζει µετά από V 1 χαλαρώσεις διότι Αν δεν υπάρχουν κύκλοι µε αρνητικό κόστος, κάθε ελάχιστο µονοπάτι είναι απλό και το µακρύτερο απλό µονοπάτι έχει µήκος V 1. Έτσι αν δεν υπάρχει κύκλος αρνητικού κόστους, τότε όλα τα d συγκλίνουν στη σωστή τους τιµή µετά από V 1 χαλαρώσεις. Ισοδύναµα, αν µια τιµή d αποτύχει να συγκλίνει µετά από V 1 χαλαρώσεις, τότε υπάρχει κύκλος αρνητικού βάρους. Επίσης ισχύει το αντίστροφο: αν υπάρχει κύκλος αρνητικού βάρους πάνω σε κάποιο µονοπάτι από την s στη v, τότε η d[v] αποτυγχάνει να συγκλίνει στη σωστή τιµή µετά από V 1 χαλαρώσεις. ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 611

Αλγόριθµος του Dijkstra ουλεύει όταν όλα τα βάρη είναι µηαρνητικά. Έστω ότι θέλουµε να βρούµε τα βραχύτερα µονοπάτια από κάποιο κόµβο s προς όλους τους υπόλοιπους κόµβους σε κάποιο γράφο G. Ο αλγόριθµος αυτός διατηρεί ένα πίνακα S από κορυφές όπου αποθηκεύει τις κορυφές του G, για τις οποίες το µήκος του βραχύτερου µονοπατιού έχει υπολογισθεί. Eπίσης διατηρεί ένα πίνακα d όπου για κάθε κόµβο Β του γράφου φυλάει την ανά πάσα στιγµή µικρότερη απόσταση του κόµβου B από τον κόµβο s την οποία γνωρίζει. Αρχικά S= και d [ V ] =. Ο αλγόριθµος επανεληµένα διαλέγει την κοντινότερη κορυφή B προς τον s, που δεν έχει µέχρι στιγµής επεξεργασθεί (δηλαδή Β VS), και ελέγχει αν για οποιοδήποτε γείτονα Γ της Β χρήση της ακµής (Β,Γ) µπορεί να δηµιουργήσει βραχύτερο µονοπάτι προς την Γ. ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 612

Αλγόριθµος του Dijkstra Χρησιµοποιεί ουρά προτεραιότητας, Q, για αποθήκευση κορυφών, όπου η προτεραιότητα δίνεται από το d[v]. S είναι το σύνολο των κορυφών i για τα οποία d[i]=δ(s,i). heap Q; for all v V d[v]=; d[s]=0; S= ; Q=V; while (Q ){ u=deletemin(q); S=S {u}; για κάθε γείτονα v του u if d[v]>d[u]+w(u,v) d[v]=d[u]+w(u,v); } ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 613

Παρατηρήσεις 1. Η χαλάρωση είναι η ίδια µε τη χαλάρωση στον αλγόριθµο Bellman Ford. 2. Kάθε χαλάρωση ισοδυναµεί µε µείωση κλειδιού στη δοµή δεδοµένων που υλοποιεί την ουρά προτεραιότητας. 3. Οµοιότητα µε τον αλγόριθµο του Prim; ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 614

Παράδειγµα A 8 5 B Γ 9 6 1 Ε 1 1 1 4 Ζ S d(a) d(b) d(γ) d( ) d(ε) d(ζ) S= 0 S={A} 0 8 9 6 S={A,E} 0 7 7 6 10 S={A,E,B} 0 7 12 7 6 8 S={A,E,B, } 0 7 12 7 6 8 S={A,E,B,,Ζ} 0 7 9 7 6 8 S={A,E,B,,Ζ, Γ} 0 7 9 7 6 8 ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 615

Αλγόριθµος του Dijkstra Εύρεση ΒΜ Αν εκτός από το µήκος του µονοπατιού µας ενδιαφέρει και το ακριβές µονοπάτι (οι κόµβοι του) τότε θα πρέπει σε ένα πίνακα, έστω P, να φυλάγουµε και κορυφές ως εξής: κάθε φορά που χρήση µιας κορυφής Χ διευκολύνει την εύρεση βραχύτερου µονοπατιού προς µια κορυφή Υ, τότε φυλάσουµε το όνοµα της κορυφής: P[Y] = X. Σε αυτή την περίπτωση, πως µπορούµε µε τον τερµατισµό του αλγόριθµου να κατασκευάσουµε από τον πίνακα P το µέγιστο µονοπάτι από τον κόµβο εκκίνησης προς κάποιον άλλο κόµβο Χ; ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 616

Αλγόριθµος του Dijkstra µε εύρεση ΒΜ heap Q; for all v V d[v]=; P[v]= ; d[s]=0; S= ; Q=V; while (Q ){ u=deletemin(q); S=S {u}; για κάθε γείτονα v του u if d[v]>d[u]+w(u,v) d[v]=d[u]+w(u,v); P[v] = u; } ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 617

Παράδειγµα A 8 5 B Γ 9 6 1 Ε 1 1 1 4 Ζ S P(A) P(B) P(Γ) P( ) P(Ε) P(Ζ) S= S={A} Α Α Α S={A,E} Ε Ε Α Ε S={A,E,B} E B E A B S={A,E,B, } E B E A B S={A,E,B,,Ζ} E Z E A B S={A,E,B,,Ζ, Γ} E Z E A B ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 618

Απόδειξη ορθότητας Θεώρηµα 2 Όταν µια κορυφή u µπαίνει στο S, τότε d[u] = δ(s,u). Απόδειξη Υποθέτουµε, για να φτάσουµε σε αντίφαση, ότι η u είναι η πρώτη κορυφή η οποία, κατά την εκτέλεση του αλγόριθµου, µπαίνοντας στο S έχει d[u] µεγαλύτερο (προσέξτε Λήµµα 4) από το βάρος του βραχύτερου µονοπατιού µεταξύ της u και της s. Έστω y η `πρώτη κορυφή στο VS που ανήκει στο βραχύτερο µονοπάτι από την s στη u. s S x y u V Aφού η xµπήκε στο S πριν από την u, d[x]=δ(s,x). Επίσης, µε την εισαγωγή του x στο S, ετέθει d[y]=d[x]+w(x,y), το οποίο είναι το κόστος του υποµονοπατιού στο σχήµα. ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 619

Απόδειξη ορθότητας Αφού το µονοπάτι από τo s στο u, είναι βραχύτερο, τότε από τη δοµή βέλτιστης λύσης συνεπάγεται ότι το υποµονοπάτι s x y από το s στο y είναι επίσης βραχύτερο. Άρα d[y] = δ(s,y). Έτσι: d[u] > δ(s,u) (αρχική υπόθεση) = δ(s,y) + δ(y,u) (δοµή βέλτιστης λύσης) = d[y] + δ(y,u) (d[y] = δ(s,y)) d[y] (τα κόστα είναι 0) Αφού d[u]>d[y], ο αλγόριθµος θα διάλεγε και θα εισήγαγε τη y στο S και όχι τη u. Αντίφαση! Λήµµα 4 Καθ όλη τη διάρκεια του αλγόριθµου d[u] δ(s,u). Η απόδειξη είναι παρόµοια µε αυτή του Λήµµατος 3. Χρόνος Εκτέλεσης: V log V + E ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 620

Αλγόριθµος του Dijkstra Υλοποίηση heap Q; for all v V d[v]=; P[v]= ; Insert(Q, (v,d[v])); d[s]=0; DecreaseKey(Q,s,0); Μείωσε την τιµή του ζεύγους που αφορά το στοιχείο s στη σωρό Q έτσι ώστε να γίνει (s,0) S= ; while (!IsEmpty(Q)){ u=deletemin(q); S=S {u}; για κάθε v γείτονα του u if d[v]>d[u]+w(u,v) d[v]=d[u]+w(u,v); DecreaseKey(Q,v, d[v]); P[v] = u; } ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 621