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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Θεωρία Γραφημάτων Θεμελιώσεις-Αλγόριθμοι-Εφαρμογές

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

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

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

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

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

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

Δρομολόγηση μιας οντότητας ανάμεσα σε δύο σημεία ενός δικτύου έτσι ώστε να ελαχιστοποιήσουμε ένα κόστος, μια διάρκεια, κτλ.

Δρομολόγηση μιας οντότητας ανάμεσα σε δύο σημεία ενός δικτύου έτσι ώστε να ελαχιστοποιήσουμε ένα κόστος, μια διάρκεια, κτλ.

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

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

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

Αλγόριθμοι και πολυπλοκότητα: 4 η σειρά ασκήσεων ΣΗΜΜΥ - Ε.Μ.Π.

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

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

Τ.Ε.Ι. Πελοπόννησου. Σχολή Τεχνολογικών Εφαρμογών Τμήμα Μηχανικών Πληροφορικής Τ.Ε. ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Δίκτυα και Δρομολόγηση Πακέτων

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

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

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

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

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

Μάθημα 21: Ουρές (Queues)

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

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

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

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

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

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

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

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

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

Αλγόριθµοι Τύπου Μείωσης Προβλήµατος

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

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

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

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

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

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

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

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

Transcript:

Σχεδίαση & Ανάλυση Αλγορίθμων Ενότητα 4.2 Διαδρομές σε Γραφήματα Σταύρος Δ. Νικολόπουλος Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros

Πρόβλημα Οδικό Δίκτυο

Πρόβλημα Ελάχιστες Διαδρομές από κάποια πόλη

Πρόβλημα 120 km 15 km Ελάχιστες Διαδρομές από την πόλη S S 12 km

Πρόβλημα X 2 6 80 7 120 Ελάχιστες Διαδρομές από την πόλη S 4 8 15 75 5 5 9 12 S d(s,x) = 18

Πρόβλημα X 75 2 4 5 6 80 5 7 8 9 12 15 S 120 Ελάχιστες Διαδρομές από την πόλη S d(s,x) = 18 Y d(s,y) = 12

Πρόβλημα X 75 2 4 5 6 80 5 7 8 9 12 Z 15 S 120 Ελάχιστες Διαδρομές από την πόλη S d(s,x) = 18 Y d(s,y) = 12 d(s,z) = 100

Ελάχιστες Διαδρομές Απλού Ζεύγους Ορισμοί

Ελάχιστες Διαδρομές Απλού Ζεύγους Ορισμοί

Ελάχιστες Διαδρομές Απλού Ζεύγους Παράδειγμα για Συζήτηση

Ελάχιστες Διαδρομές Απλού Ζεύγους Δένδρα Ελάχιστων Αποστάσεων

Ελάχιστες Διαδρομές - Ιδιότητες Βασική Παρατήρηση P ελάχιστη διαδρομή x Q ελάχιστη διαδρομή y y z? P Q είναι ελάχιστη x z x y z 2 2 4

Ελάχιστες Διαδρομές - Ιδιότητες Shortest Path Property Έστω ότι η ελάχιστη διαδρομή x z x z y η οποία αποτελείται από την διαδρομή P: x ακολουθούμενη από την Q: y z y Τότε: P είναι ελάχιστη διαδρομή x Q είναι ελάχιστη διαδρομή y y z

Ελάχιστες Διαδρομές - Ιδιότητες Λήμμα 1 (Υποδιαδρομές από ε.δ είναι ε.δ) Έστω G = (V, E) εμβαρο γράφημα και έστω P = (v 1, v 2,, v n ) μια ε.δ v 1 v n. Έστω Q = (v p, v p+1,, v q ) μια υποδιαδρομή v P v q της ε.δ P. Τότε`η Q είναι ελάχιστη διαδρομή v P v q. v 1 P 1 Q P 2 v p v q v n Q Εάν υπήρχε Q συντομότερη της Q, τότε P δεν θα ήταν ε.δ.

Ελάχιστες Διαδρομές - Ιδιότητες Πόρισμα 1 Έστω ότι η ελάχιστη διαδρομή P=(s,, v) διαμερίζεται Τότε, P P: s u v d(s, v) = d(s, u) + w(u, v) Απόδειξη: Από Λήμμα 1, η διαδρομή P είναι ελάχιστη από το κόμβο s στο κόμβο u. Επομένως, d(s, v) = w(p) = w(p ) + w(u, v) = d(s, u) + w(u, v)

Ελάχιστες Διαδρομές - Ιδιότητες Triangle Property Έστω G = (V, E) ένα εμβαρο γράφημα και έστω s V Τότε, για κάθε ακμή (u, v) E ισχύει: d(s, v) d(s, u) + w(u, v) s 20 u 10 v 8 x 12

Ελάχιστες Διαδρομές Απλού Ζεύγους Αλγοριθμικές Σκέψεις!!! s BFS-tree s d(s,s)=0 a b BFS d(s,a)=1 a d(s,b)=1 b c d e d d(s,d)=2 c d(s,c)=2 d(s,e)=3 e

Ελάχιστες Διαδρομές Απλού Ζεύγους Αλγοριθμικές Σκέψεις!!! s s 5 a d 1 2 1 3 2 c 2 1 b e a d c b e

Ελάχιστες Διαδρομές Απλού Ζεύγους Αλγοριθμικές Σκέψεις!!! s a d 1 2 5 1 3 2 c 2 1 b e BFS d(s,a)=1 d()=2 d()=3 d()=4 d()=5 a d d(s,d)=5 BFS-tree s d()=2 d()=6 d(s,s)=0 c d()=1 d()=2 d()=3 b d(s,b)=2 d(s,c)=4 e d(s,e)=5

Ελάχιστες Διαδρομές Απλού Ζεύγους Αλγόριθμος «Αφύπνισης» d(s,s)= 0 s d(s,a)= 1 a b 2 5 6 5 1 d 1 2 3 2 c 2 4 1 e 5 Ρύθμισε ένα ρολόι για τον κόμβο s να χτυπήσει την χρονική στιγμή 0 Επανέλαβε έως ότου χτυπήσουν όλα τα ρολόγια! Έστω ότι το επόμενο ρολόι χτυπά την χρονική στιγμή t για τον κόμβο u, τότε: Η απόσταση του u από τον s είναι d(s, u)=t Για κάθε γείτονα v του u στο G: Εάν δεν αφύπνιση για τον v ή κάποια χρονική στιγμή t > t + w(u,v) τότε ρύθμισε την αφύπνιση του v ίση με t + w(u,v), άλλως μη κάνεις τίποτε!

Ελάχιστες Διαδρομές Απλού Ζεύγους Θα παρουσιάσουμε 2 γνωστούς Αλγορίθμους για το πρόβλημα υπολογισμού των Ελάχιστων Διαδρομών ενός έμβαρου γραφήματος G=(V,E) από ένα κόμβο S. 1. Αλγόριθμος Dijkstra 2. Αλγόριθμος Bellman-Ford

Ελάχιστες Διαδρομές Απλού Ζεύγους Βασικές Ιδιότητες!!! 1. Αλγόριθμος Dijkstra Τα βάρη των ακμών είναι μη-αρνητικοί αριθμοί 2. Αλγόριθμος Bellman-Ford Επιτρέπει αρνητικά βάρη. Εντοπίζει κύκλους αρνητικού βάρους (κόστους)

Ελάχιστες Διαδρομές & Update Αλγοριθμική Ρύθμιση της «Αφύπνισης» d(s, v) = d(v) ή dist(v) Update(u,v,w): if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) prev(v) u d(u) = 5 d(v) = 9 7 d(u) = 5 d(v) = 6 u 2 v u 2 v

Ελάχιστες Διαδρομές - Dijkstra Βασική Ιδέα!!! 1. Αλγόριθμος Dijkstra Επέκταση του Δένδρου Ελάχιστων Αποστάσεων κατά ένα κόμβο!!!!!!! x y s S u v V-S

Ελάχιστες Διαδρομές - Dijkstra 1. Αλγόριθμος Dijkstra Initialize(G,s) 1. για κάθε κόμβο v V: d(v) prev(v) NIL 3 u 1 2. d(s) 0 0 s 2 2 v 8 w

Ελάχιστες Διαδρομές - Dijkstra 1. Αλγόριθμος Dijkstra Dijkstra(G,w,s) 1. 2. 3. Initialize(G,s) S ; Q V = V-S while Q : u extract-min(q); S S {u} για κάθε ακμή (u,v) E: Update(u,v,w) 4. return d(), prev() 0 s 3 8 if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) prev(v) u 2 3 u w 6 2 1 v 4

Ελάχιστες Διαδρομές - Dijkstra Παράδειγμα

Ελάχιστες Διαδρομές - Dijkstra Παράδειγμα

Ελάχιστες Διαδρομές - Dijkstra Θεώρημα 1 Έστω G = (V, E) εμβαρο γράφημα με μη-αρνητικά βάρη, s V, και έστω (S, V-S) μια διαμέριση του V. Έστω s S και d(s, u) οι ελάχιστες αποστάσεις u S. Εάν (u, v) είναι η ακμή που ελαχιστοποιεί την ποσότητα d(s, u) + w(u, v) μεταξύ όλων των ακμών (x, y) με x S και y V-S, τότε P = (s,, u, v) είναι ε.δ s v. x y s S u v V-S

Ελάχιστες Διαδρομές - Dijkstra Απόδειξη y s S u e v V-S Έστω e = (u, v) και έστω (s,, u) η ελάχιστη διαδρομή από τον s στον u. Για την διαδρομή P = (s,, u, v) από τον s στον v ισχύει: w(p) = d(s,u) + w(e) (1)

Ελάχιστες Διαδρομές - Dijkstra Απόδειξη x y s S u e v V-S Έστω Q = (s,, x, y,, v) μια ελάχιστη διαδρομή από τον s στον v, και έστω y ο πρώτος κόμβος της διαδρομής Q : y V-S. Θα δείξουμε ότι w(p) w(q).

Ελάχιστες Διαδρομές - Dijkstra Απόδειξη x y s S u e v V-S Από Eq.(1) και από την επιλογή της ακμής e = (u, v), έχουμε: w(p) = d(s,u) + w(e) d(s, x) + w(x, y) (2)

Ελάχιστες Διαδρομές - Dijkstra Απόδειξη x y s S u e v V-S Η διαδρομή (s,, x) είναι ελάχιστη με τιμή d(s, x). Από Shortest Path Property, επειδή (s,, x, y) είναι τμήμα (υποδιαδρομή) της ε.δ Q = (s,, x, y,, v) και οι ακμές έχουν μη-αρνητικά βάρη, έχουμε: d(s, x) + w(x, y) w(q) (3)

Ελάχιστες Διαδρομές - Dijkstra Απόδειξη x y s S u e v V-S Από Eq.(2) και Eq.(3), παίρνουμε: w(p) w(q)

Ελάχιστες Διαδρομές - Dijkstra Θεώρημα 2 (Ορθότητα Αλγορίθμου Dijkstra) Έστω G = (V, E) εμβαρο γράφημα με μη-αρνητικά βάρη και έστω s V. Ο αλγόριθμος του Dijkstra υπολογίζει τις ε.δ και τις ε.α d(s, v) από τον κόμβο s V προς κάθε κόμβο v V του G που είναι προσπελάσιμος από τον s. Απόδειξη. Με επαγωγή στην ακολουθία των κόμβων όπως αυτή δημιουργείται από την πρόσθεσή τους στο δένδρο ελάχιστων-διαδρομών. Χρήση Θεωρήματος 1.

Ελάχιστες Διαδρομές - Dijkstra Πολυπλοκότητα Dijkstra Δομικά παρόμοιος με τον αλγόριθμο BFS Πιο αργός από BFS (ουρά προτεραιότητας vs ουράς) Απαιτεί n λειτουργίες insert στην ουρά, και επομένως: n extract-min n+m insert/updata Υλοποίηση ουράς με Heap O((n+m)logn)

Ελάχιστες Διαδρομές - Bellman-Ford Βασική Ιδέα!!! 2. Αλγόριθμος Bellman-Ford!!!!!! s 3 4 a b -2

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Ο αλγόριθμος Dijkstra λειτουργεί διότι η ε.δ s v πρέπει να περάσει αποκλειστικά μέσω κόμβων που είναι πιο κοντά στον s. Αυτό ΔΕΝ ισχύει όταν τα ακμικά βάρη του G μπορεί να είναι αρνητικά. Η ε.δ s a = (s, b, a) περνά μέσω του b που είναι πιο μακριά στον s. s 3 4 a b -2

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Ο αλγόριθμος του Dijkstra δεν λειτουργεί σωστά!!! Θα δώσει λανθασμένα : d(s, a) = 3 Ενώ ισχύει: d(s, a) = 2 s 3 4 a b -2 Τι πρέπει να αλλάξουμε στον Dijkstra?

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Μια κρίσιμη παρατήρηση είναι ότι, κατά τη διάρκεια λειτουργίας του Dijkstra, ισχύει: a 3 d(.) είναι είτε υπερεκτιμημένες s -2 είτε σωστές!!! Αρχικοποιούνται d(.)= και αλλάζουν μόνο: Update(u,v,w): if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) 4 b

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Μια κρίσιμη παρατήρηση είναι ότι, κατά τη διάρκεια λειτουργίας του Dijkstra, ισχύει: a 3 d(.) είναι είτε υπερεκτιμημένες s -2 είτε σωστές!!! Αρχικοποιούνται d(.)= και αλλάζουν μόνο: Update(u,v,w): d(v) min{d(v), d(u) + w(u,v)} 4 b

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Update(u,v,w): d(v) min{d(v), d(u) + w(u,v)} (1) Δίνει τη σωστή τιμή στην d(v) (τιμή ε.δ) όταν ο κόμβος u είναι προτελευταίος στην ε.δ s v (2) Δεν θα δώσει ποτέ στην d(v) τιμή μικρότερη από την τιμή της ε.δ s v

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις (1) Δίνει τη σωστή τιμή στην d(v) (τιμή ε.δ) όταν ο κόμβος u είναι προτελευταίος στην ε.δ s v (2) Δεν θα δώσει ποτέ στην d(v) τιμή μικρότερη από την τιμή της ε.δ s v Όταν η d(v) πάρει σωστή τιμή (την τιμή της ε.δ s v), από εκεί και μετά, όσες φορές και να εφαρμόσουμε την Update(u,v,w), η τιμή της d(v) δεν αλλάζει!!!

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Μπορούμε να θεωρήσουμε τον αλγόριθμο του Dijkstra απλώς ως μια ακολουθία εκτελέσεων της Update() H ακολουθία εκτελέσεων Update() του αλγόριθμου του Dijkstra δεν λειτουργεί σωστά με αρνητικά βάρη!!! Ερώτημα!!! Υπάρχει κάποια άλλη ακολουθία εκτελέσεων της Update() που λειτουργεί σωστά???

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Εάν υπάρχει μια τέτοια ακολουθία εκτελέσεων της Update(), τι ιδιότητες πρέπει να έχει? Έστω s v μια ε.δ u 1 s u 2 u 3 u k v Μια τέτοια διαδρομή σε ένα γράφημα τάξης n έχει το πολύ n-1 ακμές (βλέπετε γιατί?)

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις u 1 s u 2 u 3 u k v Εάν η ακολουθία εκτελέσεων Update() περιλαμβάνει τις ακμές (s,u 1 ),(u 1,u 2 ),(u 2,u 3 ),,(u k,v) με αυτή τη σειρά, τότε λόγω τις (1) η τιμή d(v) θα υπολογιστεί σωστά! (1) Δίνει τη σωστή τιμή στην d(v) (τιμή ε.δ) όταν ο κόμβος u είναι προτελευταίος στην ε.δ s v

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις u 1 s u 2 u 3 u k v Λόγω της (2), στον υπολογισμό της τιμής d(v), δεν παίζει ρόλο ποιες άλλες ενημερώσεις Update() έγιναν σε αυτές τις ακμές (s,u 1 ), (u 1,u 2 ), (u 2,u 3 ),,(u k,v) ή τι συμβαίνει στο υπόλοιπο γράφημα! (2) Δεν θα δώσει ποτέ στην d(v) τιμή μικρότερη από την τιμή της ε.δ s v

Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Όμως!!! u 1 s u 2 u 3 u k v ΔΕΝ γνωρίζουμε εκ των προτέρων όλες τις ε.δ του G και, επομένως, ΔΕΝ μπορούμε να είμαστε βέβαιοι ότι ενημερώνουμε, με Update(), τις σωστές ακμές με τη σωστή σειρά!!!

Ελάχιστες Διαδρομές - Bellman-Ford Ορίστε μια Λύση!!!! u 1 s u 2 u 3 u k v Ενημέρωσε, με Update(), ΟΛΛΕΣ τις ακμές n-1 φορές! Η διαδικασία αυτή είναι, απλά, ο γνωστός αλγόριθμος των Bellman-Ford

Ελάχιστες Διαδρομές - Bellman-Ford 1. Αλγόριθμος Bellman-Ford Initialize(G,s) 1. για κάθε κόμβο v V: 2. d(s) 0 d(v) prev(v) NIL 0 s 3 4 u -2 w 2 1 v

Ελάχιστες Διαδρομές - Bellman-Ford 1. Αλγόριθμος Bellman-Ford 2 u Bellman-Ford(G,w,s) 3 1 1. Initialize(G,s) 2. επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: 0 s 4-2 w 4 2 v 3 Update(u,v,w) 3. return d(.)

Ελάχιστες Διαδρομές - Bellman-Ford Παραδείγματα 0 s 4 u -3 1 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v y V = {s, u, v, x, y} Ε = {(y,x),(u,x),(y,v),(s,u),(x,v),(s,v)} -2

Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 1 0 s 4 u 4-3 1 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 3-2 y 1 η Επανάληψη S1: (y,x), (u,x), (y,v), (s,u), (x,v), (s,v)

Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 1 0 s 4 4 u -3 1 x 2 5 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 3 2-2 y 2 η Επανάληψη S1: (y,x), (u,x), (y,v), (s,u), (x,v), (s,v)

Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 1 0 s 4 4 u -3 1 5 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 2-2 y 3 η Επανάληψη S1: (y,x), (u,x), (y,v), (s,u), (x,v), (s,v)

Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 1 0 s 4 4 u -3 1 5 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 2-2 y 4 η Επανάληψη Καμία Αλλαγή Γιατί??? S1: (y,x), (u,x), (y,v), (s,u), (x,v), (s,v)

Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 2 0 s 4 u 4-3 1 x 2 5 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 3 2-2 y 1 η Επανάληψη S1: (s,u), (u,x), (y,x), (s,v), (x,v), (y,v)

Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 2 0 s 4 4 u -3 1 5 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 2-2 y 2 η Επανάληψη Καμία Αλλαγή Γιατί??? S1: (s,u), (u,x), (y,x), (s,v), (x,v), (y,v)

Ελάχιστες Διαδρομές - Bellman-Ford Παρατήρηση!!! u 0 s x n = 5 m = 6 Update στις 6 ακμές 4 φορές v y 0 s u v x y

Ελάχιστες Διαδρομές - Bellman-Ford Παρατήρηση!!! 2. επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) Διάμετρος = k G = (V,E)

Ελάχιστες Διαδρομές - Bellman-Ford Αρνητικοί Κύκλοι 2? 3 u 1 3 u 1 0 s 4-2 w 2 v 3 0 s 4-4 w 2 v? 4? Εάν υπάρχει αρνητικός κύκλος δεν έχει νόημα να αναζητούμε ελάχιστες διαδρομές!!!

Ελάχιστες Διαδρομές - Bellman-Ford 1. Αλγόριθμος Bellman-Ford Bellman-Ford(G,w,s) 1. Initialize(G,s) 2. επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) 0 s 3 4-4? u w? 2 1 v? 3. για κάθε ακμή (u,v) E: if d(v) > d(u) + w(u,v) then return FALSE 4. return d(.)

Ελάχιστες Διαδρομές - Bellman-Ford Πολυπλοκότητα Bellman-Ford Βήμα 1: Βήμα 2:

Ελάχιστες Διαδρομές - Bellman-Ford Πολυπλοκότητα Bellman-Ford Βήμα 3: Συνολική Πολυπλοκότητα: Ο(n m)

Ελάχιστες Διαδρομές σε DAG Ελάχιστες Διαδρομές σε DAG Υπάρχουν δύο κλάσεις γραφημάτων οι οποίες αποκλείουν την εμφάνιση αρνητικών κύκλων: Γραφήματα χωρίς αρνητικές ακμές Γραφήματα χωρίς κύκλους

Ελάχιστες Διαδρομές σε DAG Ελάχιστες Διαδρομές σε DAG Οι ελάχιστες διαδρομές σε ένα κατευθυνόμενο άκυκλο γράφημα G (DAG), τάξης n και μεγέθους m, από ένα κόμβο s, υπολογίζονται σε χρόνο O(n+m) Ο αλγόριθμος εκμεταλλεύεται την τοπολογική ταξινόμηση του DAG.

Ελάχιστες Διαδρομές σε DAG Dag-Shortest-Paths(G,w,s) 1. Initialize(G,s) 2. Topological-Sorting(G) 3. για κάθε κόμβο u V σε τοπολογική σειρά: για κάθε ακμή (u,v) E: Update(u,v,w) 4. return d(.)

Ελάχιστες Διαδρομές σε DAG Παράδειγμα r 2 5 1 3 6 9-5 s u v x 6-2 8 t Αρχικό DAG

Ελάχιστες Διαδρομές σε DAG Παράδειγμα r 2 5 1 6 9 0 3-5 s u v x 6-2 8 t Αρχικό DAG Επιλογή κόμβου αφετηρίας: s

Ελάχιστες Διαδρομές σε DAG Βήμα 1 r 2 5 1 6 9 0 3-5 s u v x 6-2 8 t 3. while Q : u extract-min(q); S S {u} για κάθε ακμή (u,v) E: Update(u,v,w)

Ελάχιστες Διαδρομές σε DAG Βήμα 1 r 2 5 1 6 9 0 3-5 s u v x 6-2 8 t Update(s,u, 3) Update(s,v, 2)

Ελάχιστες Διαδρομές σε DAG Βήμα 1 r 2 5 1 6 9 0 3 2 3-5 s u v x 6-2 8 t

Ελάχιστες Διαδρομές σε DAG Βήμα 2 r 2 5 1 6 9 0 3 2 3-5 s u v x 6-2 8 t 3. while Q : u extract-min(q); S S {u} για κάθε ακμή (u,v) E: Update(u,v,w)

Ελάχιστες Διαδρομές σε DAG Βήμα 2 r 2 5 1 6 9 0 3 2 3-5 s u v x 6-2 8 t

Ελάχιστες Διαδρομές σε DAG Βήμα 2 r 2 5 1 6 9 0 3 2 3-5 s u v x 6-2 8 t Update(u,v, 6) Update(u,x,-2) Update(u,t, 8)

Ελάχιστες Διαδρομές σε DAG Βήμα 2 r 2 5 2 1 1 6 9 0 3 3-5 s u v x 6-2 8 11 t Update(u,v, 6) Update(u,x,-2) Update(u,t, 8)

Ελάχιστες Διαδρομές σε DAG Βήμα 3 r 2 5 2 1 1 6 9 0 3 3-5 s u v x 6-2 8 11 t

Ελάχιστες Διαδρομές σε DAG Βήμα 3 r 2 5 2 1 6 9 0 3 1 3-5 s u v x 6-2 8 11 t Update(v,x,-5) Update(v,t, 5)

Ελάχιστες Διαδρομές σε DAG Βήμα 3 r 2 5 2 1-3 6 9 0 3 3-5 s u v x 6-2 8 7 t Update(v,x,-5) Update(v,t, 5)

Ελάχιστες Διαδρομές σε DAG Βήμα 4 r 2 5 1-3 7 6 9 0 3 2 3-5 s u v x 6-2 8 t

Ελάχιστες Διαδρομές σε DAG Βήμα 4 r 2 5 1-3 7 6 9 0 3 2 3-5 s u v x 6-2 8 t

Ελάχιστες Διαδρομές σε DAG Βήμα 4 r 2 5 1-3 7 6 9 0 3 2 3-5 s u v x 6-2 8 t Update(x,t, 9)

Ελάχιστες Διαδρομές σε DAG Βήμα 4 r 2 5 1-3 6 6 9 0 3 2 3-5 s u v x 6-2 8 t Update(x,t, 9)

Ελάχιστες Διαδρομές σε DAG Βήμα 5 r 2 5 1-3 6 6 9 0 3 2 3-5 s u v x 6-2 8 t Όλες οι ελάχιστες διαδρομές από τον κόμβο σε χρόνο O(n+m) s

Ελάχιστες Διαδρομές Παρατηρήσεις Dijkstra u extract-min(q); για κάθε ακμή (u,v) E: Update(u,v,w) Bellman-Ford επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v)

Ελάχιστες Διαδρομές Παρατηρήσεις Dijkstra u extract-min(q); για κάθε ακμή (u,v) E: Update(u,v,w) Bellman-Ford επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) prev(v) u

Ελάχιστες Διαδρομές Παρατηρήσεις Dijkstra u extract-min(q); για κάθε ακμή (u,v) E: Update(u,v,w) Bellman-Ford επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) prev(v) u f(v) characteristic(u)

Ελάχιστες Διαδρομές Θα ξαναδούμε αλγορίθμους υπολογισμού ελάχιστων Διαδρομών!!! Δυναμικός Προγραμματισμός Δυναμικός Σχεδιασμός

Τέλος Ενότητας Ευχαριστώ για τη Συμμετοχή σας!!! Σταύρος Δ. Νικολόπουλος Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros