Post on 02-Sep-2019
Κεφάλαιο 4
Αλγόριθµος του Dijkstra
1
Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.
4.4 Συντοµότερες Διαδροµές σε ένα Γράφηµα
shortest path from Princeton CS department to Einstein's house
το πρόβληµα της συντοµότερης διαδροµής (shortest path problem)
Ένας φοιτητής στην Ξάνθη� θέλει να µετακινηθεί από την πλατεία Αντίκα στην πλατεία
Μητροπόλεως� έχει στη διάθεσή του χάρτη µε τις αποστάσεις γειτονικών κόµβων του
3
� έχει στη διάθεσή του χάρτη µε τις αποστάσεις γειτονικών κόµβων του οδικού δικτύου της παλιάς πόλης
Μπορούµε να τον βοηθήσουµε;
Συντοµότερη (;) διαδροµή από την πλατεία Αντίκα στην πλατεία Μητροπόλεως
4
συντοµότερες διαδροµές µε κοινή αφετηρία (single-source shortest paths)
Ένας αναποφάσιστος µοτοσικλετιστής � θέλει να βρει επιλέξει σε ποια παραλία ή θέρετρο της Ανατολικής
Μακεδονίας ή της Θράκης θα πάει� έχει στη διάθεσή του χάρτη µε τις αποστάσεις γειτονικών κόµβων του
5
� έχει στη διάθεσή του χάρτη µε τις αποστάσεις γειτονικών κόµβων του οδικού δικτύου
� χρειάζεται την ελάχιστη απόσταση (συντοµότερη διαδροµή) από την Ξάνθη προς κάθε πιθανό προορισµό
Μπορούµε να τον βοηθήσουµε;
πολυπλοκότητα του προβλήµατος
Συντοµότερη διαδροµή από µία κορυφή s προς µία κορυφή t: Το πρόβληµα επιλύεται σε πολυωνυµικό χρόνο
� Και το πρόβληµα τις εύρεσης συντοµότερων διαδροµών από µία κορυφή s προς κάθε άλλη κορυφή επιλύεται και αυτό πολυωνυµικά (µπορείτε να σκεφτείτε µια απλή απόδειξη ;)
� Και το πρόβληµα τις εύρεσης συντοµότερων διαδροµών για όλα τα ζεύγη κορυφών του γραφήµατος (αφετηρία – τερµατισµός) επιλύεται και αυτό
6
κορυφών του γραφήµατος (αφετηρία – τερµατισµός) επιλύεται και αυτό πολυωνυµικά (µπορείτε να σκεφτείτε µια απλή απόδειξη ;)
ΑΝΤΙΘΕΤΑ το πρόβληµα του περιοδεύοντος πωλητή (traveling salesman problem) αν και φαίνεται να µοιάζει µε το πρόβληµα συντοµότερων διαδροµών είναι NP-Complete πρόβληµα και πιθανότατα δεν επιλύεται σε πολυωνυµικό χρόνο.
αλγόριθµος του Dijkstra
Ο αλγόριθµος του Dijkstra επιλύει αποδοτικά το πρόβληµα των
συντοµότερων διαδροµών από µία κοινή αφετηρία σε κατευθυνόµενα
γραφήµατα µε µη-αρνητικά βάρη στις ακµές.
Είναι ένας από τους πιο κλασικούς και ευρύτατα χρησιµοποιούµενους
αλγορίθµους
7
Το πρόβληµα των συντοµότερων διαδροµών (shortest path problem)
Περιγραφή του προβλήµατος
� Κατευθυνόµενο γράφηµα G = (V, E).
� Αφετηρία s, τερµατισµός t.
� Μήκος le = το µήκος της ακµής e.
Πρόβληµα συντοµότερης διαδροµής (shortest path problem): εύρεση του
συντοµότερου κατευθυνόµενου µονοπατιού από το s στο t.
8
Κόστος του µονοπατιούs-2-3-5-t
= 9 + 23 + 2 + 16= 48.
s
3
t
2
6
7
4
5
23
18
2
9
14
15 5
30
20
44
16
11
6
19
6
κόστος ενός µονοπατιού = το άθροισµα των βαρών των ακµών του µονοπατιού
Αλγόριθµος του Dijkstra
Αλγόριθµος του Dijkstra.
� Διατηρεί ένα σύνολο S από κόµβους που έχουν εξερευνηθεί για τους
οποίους έχει βρεθεί η ελάχιστη απόσταση d(u) από το s στον u.
� Αρχικοποίησε = { s }, d(s) = 0.
� Επέλεγε συνεχώς έναν κόµβο v που δεν έχει εξερευνηθεί και οποίος
ελαχιστοποιεί ,)(min)(:),(
eSuvue
udv l+=∈=
π
συντοµότερη διαδροµή προς έναν κόµβο
9
πρόσθεσε τον v στο S, και θέσε d(v) = π(v).
s
v
u
d(u)
S
le
συντοµότερη διαδροµή προς έναν κόµβο u σε εξερευνηµένο µέρος, και επιπλέον µια µεµονωµένη ακµή edge (u, v)
Αλγόριθµος του Dijkstra
Αλγόριθµος του Dijkstra.
� Διατηρεί ένα σύνολο S από κόµβους που έχουν εξερευνηθεί για τους
οποίους έχει βρεθεί η ελάχιστη απόσταση d(u) από το s στον u.
� Αρχικοποίησε = { s }, d(s) = 0.
� Επέλεγε συνεχώς έναν κόµβο v που δεν έχει εξερευνηθεί και οποίος
ελαχιστοποιεί ,)(min)(:),(
eSuvue
udv l+=∈=
π
συντοµότερη διαδροµή προς έναν κόµβο
10
πρόσθεσε τον v στο S, και θέσε d(v) = π(v).
s
v
u
d(u)
S
le
συντοµότερη διαδροµή προς έναν κόµβο u σε εξερευνηµένο µέρος, και επιπλέον µια µεµονωµένη ακµή edge (u, v)
Αλγόριθµος του Dijkstra: Απόδειξη Ορθότητας
Αναλλοίωτη συνθήκη (Invariant). Για κάθε κόµβο u ∈ S, το d(u) είναι το µήκος του
συντοµότερου µονοπατιού s-u.
Απόδειξη. (µε επαγωγή στο |S|)
Βάση της επαγωγής: |S| = 1 ισχύει προφανώς.
Επαγωγική υπόθεση: Υποθέτουµε ότι ισχύει για |S| = k ≥ 1.
� Έστω v ο επόµενος κόµβος που προστίθεται στο S, και έστω u-v η ακµή που επιλέχθηκε.
� Η συντοµότερη διαδροµή s-u συν την ακµή (u, v) είναι ένα µονοπάτι s-v path µήκους π(v).
� Έστω P ένα οποιοδήποτε µονοπάτι s-v. Θα δούµε ότι δεν µπορεί να είναι πιο σύντοµο από
το π(v).
11
το π(v).
� Έστω x-y η πρώτη ακµή στο P η οποία βγαίνει από το S,
και έστω P' ένα µονοπάτι µέχρι το x.
� Το µονοπάτι P έχει ήδη υπερβολικό µήκος όταν βγαίνει από το σύνολο S.
l (P) ≥ l (P') + l (x,y) ≥ d(x) + l (x, y) ≥ π(y) ≥ π(v)
µη-αρνητικά βάρη
επαγωγική υπόθεση
ορισµός του π(y)
ο Dijkstra επιλέγει το v αντί του y
S
s
y
v
x
P
u
P'
Αλγόριθµος του Dijkstra: Υλοποίηση
Για κάθε κόµβο που δεν έχει εξερευνηθεί ακόµα, διατηρούµε ρητά το
� Ο επόµενος κόµβος που επιλέγεται για εξερεύνηση = ο κόµβος µε το ελάχιστο π(v).
� Όταν εξερευνούµε τον κόµβο v, για κάθε ακµή e = (v, w) που ξεκινά από τον v,
ενηµερώνουµε
Αποδοτική υλοποίηση. Διατηρούµε µια ουρά προτεραιότητας µε κόµβους που δεν έχουν
π (v) = mine = (u,v) : u∈ S
d (u) + le .
π (w) = min { π (w), π (v)+ le }.
12
Αποδοτική υλοποίηση. Διατηρούµε µια ουρά προτεραιότητας µε κόµβους που δεν έχουν
εξερευνηθεί, µε βάση την προτεραιότητα π(v).
† Οι χρόνοι για τις µεµονωµένες λειτουργίες είναι amortized
PQ Operation
Insert
ExtractMin
ChangeKey
Binary heap
log n
log n
log n
Fib heap †
1
log n
1
Array
n
n
1
IsEmpty 1 11
Priority Queue
Total m log n m + n log nn2
Dijkstra
n
n
m
n
d-way Heap
d log d n
d log d n
log d n
1
m log m/n n
Επιπλέον Διαφάνειες
Edsger W. Dijkstra
The question of whether computers can think is like the question of whether submarines can swim.
Do only what only you can do.
In their capacity as a tool, computers will be but a ripple on the surface of our culture. In their capacity as intellectual challenge, they are without precedent in the cultural history of mankind.
14
cultural history of mankind.
The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.
APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past: it creates a new generation of coding bums.
Παράδειγµα Αλγορίθµου Dijkstra
15
Αλγόριθµος του Dijkstra
Find shortest path from s to t.
s
32 24
9
16
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
Αλγόριθµος του Dijkstra
s
32 24
9
∞∞∞∞∞∞∞∞
0
S = { }
PQ = { s, 2, 3, 4, 5, 6, 7, t }
17
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
∞∞∞∞∞∞∞∞
∞∞∞∞
∞∞∞∞
∞∞∞∞
distance label
Αλγόριθµος του Dijkstra
s
32 24
9
∞∞∞∞∞∞∞∞
0
S = { }
PQ = { s, 2, 3, 4, 5, 6, 7, t }
delmin
18
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
∞∞∞∞∞∞∞∞
∞∞∞∞
∞∞∞∞
∞∞∞∞
distance label
Αλγόριθµος του Dijkstra
s
32 24
9
9∞∞∞∞
0
S = { s }
PQ = { 2, 3, 4, 5, 6, 7, t }
decrease key
∞∞∞∞X
19
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞∞∞∞
∞∞∞∞
14
∞∞∞∞
distance label ∞∞∞∞
∞∞∞∞X
X
Αλγόριθµος του Dijkstra
s
32 24
9
9∞∞∞∞
0
S = { s }
PQ = { 2, 3, 4, 5, 6, 7, t }
∞X
delmin
20
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞∞∞∞
∞∞∞∞
14
∞∞∞∞
distance label ∞∞∞∞
∞X
X
Αλγόριθµος του Dijkstra
s
32 24
9
9∞∞∞∞
0
S = { s, 2 }
PQ = { 3, 4, 5, 6, 7, t }
∞X
21
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞∞∞∞
∞∞∞∞
14
∞∞∞∞
∞∞∞∞
∞X
X
Αλγόριθµος του Dijkstra
s
32 24
9
9∞
0
S = { s, 2 }
PQ = { 3, 4, 5, 6, 7, t }
∞X
decrease key
X 33
22
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞∞∞∞
∞∞∞∞
14
∞∞∞∞
∞∞∞∞
∞X
X
Αλγόριθµος του Dijkstra
s
32 24
9
9∞
0
S = { s, 2 }
PQ = { 3, 4, 5, 6, 7, t }
∞XX 33
delmin
23
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞∞∞∞
∞∞∞∞
14
∞∞∞∞
∞∞∞∞
∞X
X
delmin
Αλγόριθµος του Dijkstra
s
32 24
9
9∞
0
S = { s, 2, 6 }
PQ = { 3, 4, 5, 7, t }
∞XX 33X
32
24
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞∞∞∞
∞
14
∞
∞∞∞∞
∞X
X
44X
Αλγόριθµος του Dijkstra
s
32 24
9
9
0
S = { s, 2, 6 }
PQ = { 3, 4, 5, 7, t }
∞X∞X 33X
32
25
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞∞∞∞
∞
14
∞
∞∞∞∞
∞X
X
44X
delmin
Αλγόριθµος του Dijkstra
s
329
9
0
S = { s, 2, 6, 7 }
PQ = { 3, 4, 5, t }
∞X
24
∞X 33X
32
26
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 X
Αλγόριθµος του Dijkstra
s
32 24
9
9
0
S = { s, 2, 6, 7 }
PQ = { 3, 4, 5, t }
∞X
delmin
∞X 33X
32
27
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 X
Αλγόριθµος του Dijkstra
s
32 24
9
9
0
S = { s, 2, 3, 6, 7 }
PQ = { 4, 5, t }
∞X∞X 33X
32
28
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 XX51
X 34
Αλγόριθµος του Dijkstra
s
329
9
0
S = { s, 2, 3, 6, 7 }
PQ = { 4, 5, t }
∞X∞X 33X
32
24
29
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 XX51
X 34
delmin
Αλγόριθµος του Dijkstra
s
329
9
0
S = { s, 2, 3, 5, 6, 7 }
PQ = { 4, t }
∞X
24
∞X 33X
32
30
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 XX51
X 34
X50
X45
Αλγόριθµος του Dijkstra
s
329
9
0
S = { s, 2, 3, 5, 6, 7 }
PQ = { 4, t }
∞X
24
∞X 33X
32
31
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 XX51
X 34
X50
X45
delmin
Αλγόριθµος του Dijkstra
s
329
9
0
S = { s, 2, 3, 4, 5, 6, 7 }
PQ = { t }
∞X
24
∞X 33X
32
32
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 XX51
X 34
X50
X45
Αλγόριθµος του Dijkstra
s
329
9
0
S = { s, 2, 3, 4, 5, 6, 7 }
PQ = { t }
∞X∞X 33X
32
24
33
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 XX51
X 34
X50
X45
delmin
Αλγόριθµος του Dijkstra
s
32 24
9
9
0
S = { s, 2, 3, 4, 5, 6, 7, t }
PQ = { }
∞X∞X 33X
32
34
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 XX51
X 34
X50
X45
Αλγόριθµος του Dijkstra
s
32 24
9
9
0
S = { s, 2, 3, 4, 5, 6, 7, t }
PQ = { }
∞X∞X 33X
32
35
s
t
6
7
4
5
18
214
155
30
20
44
16
11
6
19
6
15 ∞
∞
14
∞
∞
∞X
X
44X
35X
59 XX51
X 34
X50
X45
παράδειγµα εκτέλεσης του
Δοµές Δεδοµένων και Αλγόριθµοι
οµοαφετηριακές ελαφρύτατες διαδροµές
36
παράδειγµα εκτέλεσης του αλγορίθµου του Dijkstra
Συντοµότερα Μονοπάτια (Shortest Paths)
0
12
4
3
11
4
5
3
25 2 3 0
2
4
3
11
4
5
3
5 2 3 0
2
4
3
11
4
5
3
25 2 3
1 15
3
8
4
5
3
0 0 0
∅
∅
∅ ∅
∅∅
Δοµές Δεδοµένων και Αλγόριθµοι
οµοαφετηριακές ελαφρύτατες διαδροµές
37
3, 4 5, 2 4, 1 5, 2 8, 3
0
2
4
3
11
4
5
3
25 2 3
15 7
4
3
5, 2 7, 3
0
2
4
3
11
4
5
3
25 2 3
15 6
43
6, 3
0
2
4
3
11
4
5
3
25 2 3
15 6
43
0 0 0
Τα βήµατα σε πίνακα
0
12
4
3
11
4
5
3
25 2 3
0
∅ ∅
∅∅
1 2 3 4
(∞,-) (5,0) (∞,-) (3,0)
Δοµές Δεδοµένων και Αλγόριθµοι
οµοαφετηριακές ελαφρύτατες διαδροµές
38
(∞,-) (5,0) (∞,-) (3,0)
Μ=4 (4,4) (5,0) (8,4) {3,0}
Μ=1 {4,4} (5,0) (7,1)
Μ=2 {5,0} (6,2)
Μ=3 {6,2}
0
12
4
3
11
4
5
3
3, 4 5, 2
25 2 3 0
2
4
3
11
4
5
3
5 2 3 0
2
4
3
11
4
5
3
25 2 3
1 1
4, 1 5, 2
5
3
8
4
5
8, 3
3
0
2 3
4
5
3
25 2 3
15 7
0
2 3
4
52
5 2 3
15 6
0
2 3
4
52
5 2 3
15 6
0
0 0 0
0 0
∅
∅
∅ ∅
∅∅
Δοµές Δεδοµένων και Αλγόριθµοι
οµοαφετηριακές ελαφρύτατες διαδροµές
39
4 113 4
3
5, 2
7, 3
4 113
43
6, 3
4 113
5 2 3
43
1 2 3 4
(∞,-) (5,0) (∞,-) (3,0)
Μ=4 (4,4) (5,0) (8,4) {3,0}
Μ=1 {4,4} (5,0) (7,1)
Μ=2 {5,0} (6,2)
Μ=3 {6,2}
πηγές/αναφορές
Κεφάλαιο 4, Σχεδίαση Αλγορίθµων, J. Kleinberg and E. Tardos, Ελληνική
έκδοση από τις Εκδ. Κλειδάριθµος
Κεφάλαιο 6, Ενότητες 6.8, 6.9. και 6.10, Σχεδίαση Αλγορίθµων, J.
Kleinberg and E. Tardos, Ελληνική έκδοση από τις Εκδ. Κλειδάριθµος
Κεφάλαια 24, Εισαγωγή στους αλγόριθµους, T. Cormen, C. Leiserson, R.
Rivest and C. Stein, Ελληνική έκδοση από τις Πανεπιστηµιακές Εκδ. Rivest and C. Stein, Ελληνική έκδοση από τις Πανεπιστηµιακές Εκδ.
Κρήτης
Αλγόριθµοι - Εισαγωγικά θέµατα και παραδείγµατα, Θ. Παπαθεοδώρου,
Εκδόσεις Πανεπιστηµίου Πατρών
Αλγόριθµοι, Π.Μποζάνη, Εκδ. Τζιόλα, Κεφάλαιο 5
40