Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Αναζήτηση (Εξερεύνηση) Πρώτα σε Πλάτος

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Αναζήτηση (Εξερεύνηση) Πρώτα σε Πλάτος"— Μεταγράφημα παρουσίασης:

1 Αναζήτηση (Εξερεύνηση) Πρώτα σε Πλάτος
Ο αλγόριθµος της Αναζήτησης (Εξερεύνησης) Πρώτα σε Πλάτος διερευνά τις ακµές του G, προσπαθώντας να ανακαλύψει / επισκεφθεί όλες τις κορυφές που είναι προσπελάσιµες από την s Λειτουργεί τόσο σε κατευθυνόμενα όσο και σε µη κατευθυνόμενα γραφήµατα Εξερευνά τις κορυφές µε σειρά που καθορίζεται από τη λίστα γειτονικότητας του G. Αρχικά, επισκέπτεται όλες τις γειτονικές κορυφές της s Για κάθε κορυφή v γειτονική της s (κάθε τέτοια κορυφή v βρίσκεται σε απόσταση 1 από την s), ο αλγόριθµος ΑΠΠ επισκέπτεται όλες τις κορυφές που είναι γειτονικές της v και δεν έχει επισκεφθεί / ανακαλύψει προηγουµένως (αυτές οι κορυφές βρίσκονται σε απόσταση ακριβώς 2 από την s) Στη συνέχεια, για κάθε κορυφή v που βρίσκεται σε απόσταση ακριβώς 2 από την s, η ΑΠΠ επισκέπτεται όλες τις κορυφές που είναι γειτονικές της v και δεν έχει ανακαλύψει προηγουµένως Γενικότερα, στην k – οστή επανάληψη, ο αλγόριθµος ΑΠΠ ανακαλύπτει όλες τις κορυφές που βρίσκονται σε απόσταση ακριβώς k από την s Το όνοµα της ΑΠΠ προέρχεται ακριβώς από το γεγονός ότι επισκέπτεται όλες τις κορυφές σε απόσταση k, πριν επισκεφθεί οποιαδήποτε κορυφή σε απόσταση k + 1 1 ΕΑΠ - ΠΛΣ50 - Θ1

2 Αναζήτηση (Εξερεύνηση) Πρώτα σε Πλάτος (2)
Διακρίνουµε τρία είδη κορυφών: Τις κορυφές που η ΑΠΠ δεν έχει ακόμη επισκεφθεί (λευκές), τις κορυφές που η ΑΠΠ έχει επισκεφθεί, αλλά πιθανόν υπάρχουν κάποιες γειτονικές κορυφές τους που δεν έχουν ανακαλυφθεί από την ΑΠΠ (γκρίζες), και τις κορυφές που, τόσο αυτές όσο και όλες οι γειτονικές τους, έχουν ανακαλυφθεί από την ΑΠΠ (μαύρες) Αρχικά, όλες οι κορυφές είναι λευκές Την πρώτη φορά που η ΑΠΠ επισκέπτεται µία λευκή κορυφή, αυτή βάφεται γκρίζα Οι γκρίζες κορυφές µπορεί να έχουν κάποιες γειτονικές λευκές κορυφές, δηλαδή γειτονικές κορυφές που η ΑΠΠ δεν έχει επισκεφθεί ακόµη Μία γκρίζα κορυφή βάφεται µαύρη, όταν η ΑΠΠ επισκεφθεί όλες τις γειτονικές κορυφές της. Για να βαφτεί µαύρη µία κορυφή v, πρέπει πρώτα να έχουν βαφτεί γκρίζες ή µαύρες όλες οι γειτονικές της Για να εξασφαλίζεται η κατά πλάτος διεύρυνση του συνόλου των κορυφών που η ΑΠΠ έχει επισκεφθεί, η σειρά µε την οποία οι γκρίζες κορυφές βάφονται µαύρες είναι ίδια µε τη σειρά που οι λευκές κορυφές βάφονται γκρίζες 2 ΕΑΠ - ΠΛΣ50 - Θ1

3 Αναζήτηση (Εξερεύνηση) Πρώτα σε Πλάτος (3)
Στο τέλος µιας FIFO ουράς Q τοποθετείται κάθε κορυφή που µόλις άλλαξε χρώµα από λευκό σε γκρίζο. Η επόμενη κορυφή που θα αλλάξει χρώµα από γκρίζο σε µαύρο είναι πάντα η πρώτη κορυφή της ουράς Q Ένας πίνακας p έχει µία εγγραφή για κάθε κορυφή v. Το p[v] έχει την τιµή της κορυφής από την οποία η ΑΠΠ επισκέφθηκε την v 3 ΕΑΠ - ΠΛΣ50 - Θ1

4 Αναζήτηση (Εξερεύνηση) Πρώτα σε Πλάτος (4)
S 4

5 Αναζήτηση (Εξερεύνηση) Πρώτα σε Πλάτος (5)
S 5

6 Αναζήτηση (Εξερεύνηση) Πρώτα σε Βάθος
Η Αναζήτηση (Εξερεύνηση) Πρώτα σε Βάθος (ΑΠΒ – Depth First Search) προχωράει όσο το δυνατόν µακρύτερα από την αρχική κορυφή s Χρησιµοποιεί όλες τις εξερχόµενες ακµές της κορυφής v που επισκέφτηκε τελευταία. Όταν η τελευταία κορυφή v δεν έχει άλλες αχρησιµοποίητες ακµές, επιστρέφει στην κορυφή που επισκέφθηκε αµέσως προηγουµένως, για να χρησιµοποιήσει τις ακµές της Η διαδικασία αυτή συνεχίζεται µέχρι να ανακαλυφθούν όλες οι κορυφές που είναι προσπελάσιµες από την αρχική κορυφή s Αν σε αυτό το σηµείο υπάρχουν κορυφές τις οποίες δεν έχει επισκεφθεί ακόμη, µία από αυτές επιλέγεται σαν αρχική, και η αναζήτηση συνεχίζεται Το ΑΠΒ ολοκληρώνεται όταν έχει επισκεφθεί όλες τις κορυφές του γραφήµατος 6 ΕΑΠ - ΠΛΣ50 - Θ1

7 Αναζήτηση (Εξερεύνηση) Πρώτα σε Βάθος (2)
Στον πίνακα των κορυφών – προγόνων p[1, ...,|V|] καταγράφουµε τις ακµές µέσω των οποίων επισκεφθήκαμε κάθε κορυφή Όταν επισκεφθούμε µία κορυφή v μέσω µίας ακµής (u, v), τότε p[v] = u (u πρόγονος της v και v απόγονος της u). Το υπογράφηµα G(V, Ep) περιλαµβάνει όλες τις ακµές που χρησιµοποιήσαμε για να επισκεφθούμε τις κορυφές του V Επειδή με την ΑΠΒ επισκεπτόμαστε όλες τις κορυφές του V και, όχι µόνο αυτές που είναι προσπελάσιµες από την αρχική κορυφή, το Gp µπορεί να περιλαµβάνει περισσότερα του ενός δένδρα (δάσος - forest) Κάθε φορά που ξεκινάμε την αναζήτηση από νέα αρχική κορυφή, ένα νέο δένδρο προστίθεται στο δάσος. Το δάσος Gp ονοµάζεται δάσος της ΑΠΒ, και οι ακµές του Ep ονοµάζονται ακµές των δένδρων της ΑΠΒ 7 ΕΑΠ - ΠΛΣ50 - Θ1

8 Αναζήτηση (Εξερεύνηση) Πρώτα σε Βάθος (3)
Διακρίνουµε τρία είδη κορυφών: Τις κορυφές που η ΑΠΒ δεν έχει ακόµη επισκεφθεί (λευκές), τις κορυφές που η ΑΠΒ έχει επισκεφθεί, αλλά πιθανόν υπάρχουν κάποιες γειτονικές κορυφές τους που δεν έχουν ανακαλυφθεί από την ΑΠΒ (γκρίζες), και τις κορυφές που, τόσο αυτές όσο και όλες οι γειτονικές τους, έχουν ανακαλυφθεί από την ΑΠΒ (μαύρες) Αρχικά, όλες οι κορυφές είναι λευκές. Την πρώτη φορά που η ΑΠΠ επισκέπτεται µία λευκή κορυφή, αυτή βάφεται γκρίζα Μία γκρίζα κορυφή βάφεται µαύρη, όταν η ΑΠΒ επισκεφθεί όλες τις γειτονικές κορυφές της. Για να βαφτεί µαύρη µία κορυφή v, πρέπει πρώτα να έχουν βαφτεί γκρίζες ή µαύρες όλες οι γειτονικές της, εκτός, ίσως, από την p[v] Το d[v] δηλώνει τη χρονική στιγµή στην οποία η v έγινε γκρίζα (το χρόνο της πρώτης επίσκεψης στη v), ενώ το f[v] δηλώνει τη στιγµή στην οποία η v έγινε µαύρη (το χρόνο εγκατέλειψης της v) Επειδή κάθε κορυφή v πρέπει να γίνει γκρίζα πριν γίνει µαύρη, d[v] < f[v] 8 ΕΑΠ - ΠΛΣ50 - Θ1

9 Αναζήτηση (Εξερεύνηση) Πρώτα σε Βάθος (4)
Μια αναδροµική υλοποίηση της ΑΠΒ 9 ΕΑΠ - ΠΛΣ50 - Θ1

10 Αναζήτηση (Εξερεύνηση) Πρώτα σε Βάθος (5)
10 ΕΑΠ - ΠΛΣ50 - Θ1

11 Αναζήτηση (Εξερεύνηση) Πρώτα σε Βάθος (6)
11 ΕΑΠ - ΠΛΣ50 - Θ1

12 Αναζήτηση (Εξερεύνηση) Πρώτα σε Βάθος (7)
Η ΑΠΒ µπορεί να κατηγοριοποιήσει τις ακµές του γραφήµατος εισόδου G(V, E) Ακµές των δένδρων (tree edges). Η (u, v) είναι ακµή δένδρου, αν η ΑΠΒ επισκέφθηκε για πρώτη φορά την v χρησιµοποιώντας την ακµή (u, v). Δηλαδή, κατά τον έλεγχο της κορυφής v σαν γείτονα της u, η κορυφή v είναι λευκή Πίσω ακµές (back edges): συνδέουν µία κορυφή u µε µία κορυφή v, η οποία είναι πρόγονος της u στο δάσος. Η (u, v) είναι πίσω ακµή όταν, τη στιγµή που η v ελέγχεται σαν γείτονας της u, η v είναι γκρίζα. Οι βρόγχοι είναι πίσω ακµές Μπρος ακµές (forward edges): συνδέουν µία κορυφή u µε µία κορυφή v, η οποία είναι απόγονος της u στο δάσος. Η (u, v) είναι µπρος ακµή όταν, τη χρονική στιγµή που ελέγχεται η κορυφή v σαν γείτονας της u, η κορυφή v είναι µαύρη, και στο δάσος Gp υπάρχει ένα µονοπάτι από µαύρες κορυφές (εκτός της αρχικής κορυφής u, που είναι γκρίζα) που οδηγεί από την u στην v. Ισοδύναμα, η v να είναι µαύρη, και d[u] < d[v] Ακµές διασταύρωσης (cross edges): όλες οι υπόλοιπες. Μπορούν να συνδέουν κορυφές στο ίδιο δένδρο, οι οποίες δεν έχουν σχέση προγόνου – απογόνου ή κορυφές σε διαφορετικά δένδρα του δάσους της ΑΠΒ. Η (u, v) είναι ακµή διασταύρωσης όταν, κατά τη χρονική στιγµή που ελέγχεται η v σαν γείτονας της u, η v είναι µαύρη και d[u] > d[v] 12 ΕΑΠ - ΠΛΣ50 - Θ1

13 Τοπολογική Διάταξη Η τοπολογική διάταξη ενός ακυκλικού κατευθυνόμενου γραφήματος (ΑΚΓ) G =(V, E) συνίσταται στη διάταξη των κορυφών σε μια γραμμική αλληλουχία τέτοια ώστε, αν το G περιέχει μια ακμή (u, v), η κορυφή u να εμφανίζεται πριν από τη v στην αλληλουχία αυτήν Τα ΑΚΓ είναι χρήσιμα σε προβλήματα όπου απαιτείται η εκτέλεση γεγονότων με ορισμένη σειρά προτεραιότητας

14 Εύρεση Τοπολογικής Διάταξης
H τοπολογική διάταξη ενός ΑΚΓ επιτυγχάνεται με την εκτέλεση ΑΠΒ Το επιπλέον βήμα που πραγματοποιείται είναι, κάθε φορά που χρωματίζουμε μαύρη μια κορυφή, να τοποθετείται σε κατάλληλη δομή δεδομένων. Στο τέλος της διαδικασίας οι κορυφές είναι διαθέσιμες διατεταγμένες κατά φθίνουσα σειρά ως προς το χρόνο περάτωσης (που χρωματίστηκαν μαύρες)

15 Ελάχιστα Επικαλυπτικά (ή Ζευγνύοντα ή Συνδετικά) Δένδρα (Minimum Spanning Trees)

16 Ελάχιστα Επικαλυπτικά Δένδρα
Σε ένα γράφο G με κόστος στις ακμές, βρες τις ακμές με το μικρότερο συνολικό κόστος ώστε όλους όλοι οι κόμβοι να μείνουν ενωμένοι G: Συνδεδεμένος, μη κατευθυνόμενος Εφαρμογή: σύνδεσε όλες τις πόλεις με μικρότερο μήκος καλωδίου Οι ακμές δημιουργούν δένδρο Η εξαντλητική αναζήτηση χρειάζεται εκθετικό χρόνο (επιλογή ανάμεσα σε nn-2 δένδρα ή n! πλευρές) Βέλτιστοι αλγόριθμοι

17 Γενική ιδέα Κόστος=7 Ξεκίνα από ένα κόμβο
Α Ε D B C 2 5 3 4 1 6 Α Ε D B C 2 1 Κόστος=7 Ξεκίνα από ένα κόμβο Πρόσθεσε στο συνδετικό δένδρο μια «ασφαλή» ακμή Ακμή που αποτελεί ακμή ενός ελάχιστου συνδετικού δένδρου Αναλλοίωτη: Σε κάθε βήμα έχω ένα υποσύνολο των ακμών που συνιστούν ένα ελάχιστο συνδετικό δένδρο

18 Ιδιότητα Έστω ΕΕΔ Τ για ένα γράφο G(V,E)
Αν αφαιρέσουμε μια οποιαδήποτε ακμή (u, v) ∈T, παίρνουμε υποδένδρα Τ1 και Τ2 ΘΕΩΡΗΜΑ: Το υποδένδρο Τ1 είναι ΕΕΔ του υπογράφου G1= (V1, E1) που «παράγεται» από τους κόμβους του Τ1 Δηλ V1V, και E1= {(x, y) ∈E: x,y∈V1}

19 Απόδειξη w(T) = w(u, v) + w(T1) + w(T2)
Αν υπήρχε T1′ με χαμηλότερο κόστος από το T1 για το G1, τότε το δένδρο T′= {(u, v)} ∪T1′∪T2 θα ήταν ΕΕΔ για το G (και όχι το Τ)

20 Άρα; Έστω Τ το ΕΕΔ του G= (V, E), και έστω A⊆V. Έστω (u, v) ∈E η φτηνότερη ακμή από το A στο V–A. Τότε (u, v) ∈T

21 Αλγόριθμοι για ΕΕΔ Α Ε D B C 2 5 3 4 1 6 Α Ε D B C 2 1 Cost=7 Prim: σε κάθε βήμα προσθέτει στο δένδρο την ακμή με το μικρότερο κόστος Kruskal: σε κάθε βήμα προσθέτει την ακμή με το μικρότερο κόστος αρκεί να μην δημιουργούνται κύκλοι

22 Αλγόριθμος του Prim Κατασκευάζουμε σιγά σιγά το Α. Στο «τέλος» (όταν Α=V) έχει φτιαχτεί το δένδρο Διατηρούμε το V –A ως ουρά προτεραιότητας Q Κάθε κόμβος στο Q «προσπελάζεται» με το βάρος τη ελάχιστης ακμής που τον συνδέει με κάποιο κόμβο του Α Q←V key[v] ←∞for all v∈V key[s] ←0 for some arbitrary s∈V While Q≠∅ Do u←EXTRACT-MIN(Q) For each v∈Adj[u] do ifv∈Q and w(u, v) < key[v] Then key[v] ←w(u, v) /*DECREASE-KEY*/ π[v] ←u {(v, π[v])} αποτελεί το ΕΕΔ

23 G = (V,E) 5 2 4 1 3 6 Βήμα 1 1 1 3 6 4 4 1 3 6 2 1 3 Βήμα 2 Βήμα 3 Βήμα 4 5 2 4 1 3 6 2 4 1 3 6 5 Βήμα 6 Βήμα 5

24 Πολυπλοκότητα Time = Θ(V)·TEXTRACT-MIN+ Θ(E)·TDECREASE-KEY Γιατί;

25 Πολυπλοκότητα Time = Θ(V)·TEXTRACT-MIN+ Θ(E)·TDECREASE-KEY

26 Αλγόριθμος Kruskal Κεντρική ιδέα Αρχικά το Τ είναι άδειο
Επεξεργαζόμαστε μια-μια τις ακμές, σε αύξουσα σειρά βάρους Aν η εισαγωγή της e στο Τ δεν προκαλεί κύκλο, τότε προσθέτουμε την e στο Τ, δηλαδή Τ := Τ ∪ {e}

27 Υλοποίηση Α←∅ For each vertex v∈V Sort edges by nondecreasing weight w
Ταξινομούμε όλες τις ακμές με κάποιο αλγόριθμο ταξινόμησης Πως βρίσκουμε αποδοτικά εάν μια ακμή μπορεί να δημιουργήσει κύκλο? Δομή δεδομένων DISJOINT-SET Α←∅ For each vertex v∈V Do MAKE-SET(v) Sort edges by nondecreasing weight w For each edge (u,v) ∈E, in order of weight Do if Find-Set(u) != Find-Set(v) Then A ← A ∪{(u,v)} UNION(u,v) return A

28 Παράδειγμα

29

30

31 Συντομότερα Μονοπάτια (Shortest Paths)

32 Συντομότερα Μονοπάτια
Κατευθυνόμενο Γράφημα G = (V,E) με Συνάρτηση Βαρών w: E  R Βάρος Μονοπατιού p = v1®v2 ® … ® vk: Συντομότερο Μονοπάτι από τη v1 στη vk : οποιοδήποτε μονοπάτι από τη v1 στη vk βάρους δ(v1, vk) = min(w(p)) (δ(v1, vk) = , αν δεν υπάρχει μονοπάτι από τη v1 στη vk ) Ενδεικτικές εφαρμογές δρομολόγηση σε δίκτυα (υπολογιστών, οδικά) σχεδιασμός ρομποτικής κίνησης

33 Προβλήματα Συντομότερων Μονοπατιών
Μονής-πηγής: βρες το συντομότερο μονοπάτι από δοσμένη πηγή προς κάθε κορυφή Μονού-προορισμού: βρες το συντομότερο μονοπάτι από κάθε κορυφή προς δοσμένο προορισμό Μονού-ζεύγους: δοσμένων 2 κορυφών, βρες το συντομότερο μονοπάτι μεταξύ τους Κάθε-ζεύγους: βρες τα συντομότερα μονοπάτια για κάθε ζεύγος κορυφών

34 Βέλτιστη Υποδομή Απόδειξη: με απαγωγή σε άτοπο
Βέλτιστη Υποδομή: τα υπο-μονοπάτια ενός Συντομότερου Μονοπατιού αποτελούν Συντομότερα Μονοπάτια Έστω Κατευθυνόμενο Γράφημα G = (V,E) με Συνάρτηση Βαρών w: E  R και ένα Συντομότερο Μονοπάτι από την κορυφή v1 στην κορυφή vk : p = v1®v2®…®vk Για κάθε i και j τέτοια ώστε 1 ≤ i ≤ j ≤ k, έστω pij = vivi+1…vj το υπο-μονοπάτι του p από την vi στην vj Το pij αποτελεί συντομότερο μονοπάτι από την vi στην vj Απόδειξη: με απαγωγή σε άτοπο Οδηγεί σε άπληστους αλγορίθμους (π.χ. Dijkstra) και αλγορίθμους δυναμικού προγραμματισμού (π.χ. Floyd-Warshall)

35 Τριγωνική Ανισότητα Για κάθε τριάδα κορυφών u, v, x ισχύει δ(u,v) ≤ δ(u,x) + δ(x,v)

36 Αρνητικά Βάρη και Κύκλοι
Οι ακμές αρνητικού βάρους δε δημιουργούν πρόβλημα, εφόσον στο μονοπάτι δεν υπάρχουν κύκλοι αρνητικού βάρους. Γιατί; Τα συντομότερα μονοπάτια δεν περιέχουν κύκλους. Γιατί; Κάθε Συντομότερο Μονοπάτι δε μπορεί να περιλαμβάνει περισσότερες από k – 1 ακμές, όπου k το πλήθος των κορυφών του μονοπατιού

37 Χαλάρωση – Relaxation Για κάθε κορυφή v, διατηρούμε την εκτίμηση d(v) του Συντομότερου Μονοπατιού από την αρχική κορυφή s, (αρχικοποιείται στο ¥) Χαλάρωση μια ακμής (u,v) σημαίνει έλεγχος αν μπορεί να βελτιωθεί το Συντομότερο Μονοπάτι προς την v που έχει βρεθεί ως τώρα, με διέλευση από την u u v u v 2 2 5 9 5 6 Relax (u,v,w) if d(v) > d(u)+ w(u,v) then d(v) = d(u)+ w(u,v) π(v) = u Relax(u,v) Relax(u,v) 5 7 5 6 2 2 u v u v Προκάτοχος v στο ΣΜ από την s

38 Αλγόριθμος Bellman-Ford
ΣΜ Μονής-πηγής Δουλεύει και με αρνητικά βάρη Στηρίζεται στην αρχή της χαλάρωσης: Λόγω αρνητικών βαρών, είναι δυνατόν μία ακμή να χαλαρώσει περισσότερες από μια φορές Γι’ αυτό και εκτελεί V-1 βήματα χαλάρωσης, εξετάζοντας όλες τις ακμές Αν κατά το V-στό βήμα σημειωθεί χαλάρωση, τότε υπάρχει αρνητικός κύκλος

39 Ψευδοκώδικας Αλγόριθμου Bellman-Ford
Relax (u,v,w) if d(v) > d(u)+ w(u,v) then d(v) = d(u)+ w(u,v) π(v) = u Bellman-Ford(G,w,s) 01 for each u Î V(G) 02 d(u) = ¥ 03 π(u) = NIL 04 d(s) = 0 05 for i ¬ 1 to |V(G)|-1 do 06 for each edge (u,v) Î E(G) do 07 Relax (u,v,w) 08 for each edge (u,v) Î E(G) do 09 if d(v) > d(u) + w(u,v) then 10 return false 11 return true Χρόνος εκτέλεσης: Q(V) + Q(E)(V-1) + (E) + 1= Q(VE)

40 Παράδειγμα Bellman-Ford (1)
Σειρά χαλάρωσης (t,x), (t,y), (t,z), (x,t), (y,x), (y,z), (z,x), (z,s), (s,t), (s,y) ΕΠΑΝΑΛΗΨΗ #1 5 s z y 6 7 8 -3 2 9 -2 x t -4 6 7 s z y 8 -3 2 9 -2 x t -4 5

41 Παράδειγμα Bellman-Ford (2)
Σειρά χαλάρωσης (t,x), (t,y), (t,z), (x,t), (y,x), (y,z), (z,x), (z,s), (s,t), (s,y) ΕΠΑΝΑΛΗΨΗ #2 6 7 s z y 8 -3 2 9 -2 x t -4 5 6 4 7 2 s z y 8 -3 9 -2 x t -4 5

42 Παράδειγμα Bellman-Ford (3)
Σειρά χαλάρωσης (t,x), (t,y), (t,z), (x,t), (y,x), (y,z), (z,x), (z,s), (s,t), (s,y) ΕΠΑΝΑΛΗΨΗ #3 6 4 7 2 s z y 8 -3 9 -2 x t -4 5 2 4 7 s z y 6 8 -3 9 -2 x t -4 5

43 Παράδειγμα Bellman-Ford (4)
Σειρά χαλάρωσης (t,x), (t,y), (t,z), (x,t), (y,x), (y,z), (z,x), (z,s), (s,t), (s,y) ΕΠΑΝΑΛΗΨΗ #4 2 4 7 s z y 6 8 -3 9 -2 x t -4 5 2 4 7 -2 s z y 6 8 -3 9 x t -4

44 Αλγόριθμος Dijkstra (1)
ΣΜ Μονής-πηγής Δουλεύει μόνο με μη αρνητικά βάρη Άπληστος (greedy) αλγόριθμος, παρόμοιος με τον αλγόριθμο Prim για τα Ελάχιστα Επικαλυπτικά Δένδρα Χρησιμοποιεί μια Ουρά Προτεραιότητας με κλειδί το d(v) Μια Ουρά Προτεραιότητας (ΟΠ) ελαχίστων Q τηρεί ένα σύνολο στοιχείων (που το καθένα χαρακτηρίζεται από ένα κλειδί) και υποστηρίζει τις πράξεις: insert(Q,x):εισαγωγή στοιχείου x στην ΟΠ extractMin(Q):αφαιρεί και επιστρέφει το στοιχείο της ΟΠ με το μικρότερο κλειδί decraseKey(Q,x,k):αντικαθιστά το κλειδί του στοιχείου x με τo k, που πρέπει να έχει τιμή μικρότερη ή ίση από την τρέχουσα τιμή του x Ίδιος με τον Breadth-First Search, αν όλα τα βάρη = 1 (o BFS χρησιμοποιεί ουρά FIFO, ενώ η ΟΠ του Dijkstra αναδιοργανώνεται όταν μειώνεται κάποιο d(v))

45 Αλγόριθμος Dijkstra (2)
Βασική Ιδέα Να διατηρείς ένα σύνολο S με τις κορυφές για τις οποίες υπολογίστηκε το ΣΜ Σε κάθε βήμα επέλεξε την «εγγύτερη» κορυφή u (μεταξύ των κορυφών εκτός S) πρόσθεσε την στο S χαλάρωσε όλες τις ακμές που εξέρχονται από τη u

46 Ψευδοκώδικας Αλγόριθμου Dijkstra
Relax (u,v,w) if d(v) > d(u)+ w(u,v) then d(v) = d(u)+ w(u,v) π(v) = u decreaseKey(Q,v,d(v)) Dijkstra(G,s) 01 for each u Î V(G) 02 d(u) = ¥ 03 π(u) = NIL 04 d(s) = 0 05 S ¬ Æ // Set of vertices with d(v) = δ(s, v) 06 Q ¬ V(G) // Q: priority queue keyed by d(v) 07 while not isEmpty(Q) 08 u ¬ extractMin(Q) 09 S ¬ S È {u} 10 for each v Î adjacent(u) do 11 Relax(u, v, G)

47 Παράδειγμα Dijkstra (1)
S = { } Q={s,u,v,x,y} S = {s} Q={x,u,v,y} ΕΠΑΝΑΛΗΨΗ #1 s u v y x 10 5 1 2 3 9 4 6 7 10 5 s u v y x 1 2 3 9 4 6 7

48 Παράδειγμα Dijkstra (2)
S = {s} Q={x,u,v,y} S = {s,x} Q={y,u,v} ΕΠΑΝΑΛΗΨΗ #2 10 5 s u v y x 1 2 3 9 4 6 7 u v 8 14 5 7 s y x 10 1 2 3 9 4 6

49 Παράδειγμα Dijkstra (3)
S = {s,x} Q={y,u,v} S = {s,x,y} Q={u,v} ΕΠΑΝΑΛΗΨΗ #3 u v 8 14 5 7 s y x 10 1 2 3 9 4 6 8 13 5 7 s u v y x 10 1 2 3 9 4 6

50 Παράδειγμα Dijkstra (4)
S = {s,x,y} Q={u,v} S = {s,x,y,u} Q={v} ΕΠΑΝΑΛΗΨΗ #4 8 13 5 7 s u v y x 10 1 2 3 9 4 6 u v 8 9 5 7 y x 10 1 2 3 4 6 s

51 Παράδειγμα Dijkstra (5)
S = {s,x,y,u} Q={v} S = {s,x,y,u,v} Q={ } ΕΠΑΝΑΛΗΨΗ #5 u v 8 9 5 7 u v y x 10 1 2 3 4 6 8 9 5 7 y x 10 1 2 3 4 6 s s

52 Χρόνος Εκτέλεσης Αλγορίθμου Dijkstra
Dijkstra(G,s) 01 for each u Î V(G) 02 d(u) = ¥ 03 π(u) = NIL 04 d(s) = 0 05 S ¬ Æ 06 Q ¬ V(G) 07 while not isEmpty(Q) 08 u ¬ extractMin(Q) 09 S ¬ S È {u} 10 for each v Î adjacent(u) do 11 Relax(u, v, G) Relax (u,v,w) if d(v) > d(u)+ w(u,v) then d(v) = d(u)+ w(u,v) π(v) = u decreaseKey(Q,v,d(v)) Η extractMin εκτελείται |V| φορές Η Relax εκτελείται |E| φορές (το πολύ |E| φορές η decreaseKey) Χρόνος = O(|V|) + κατασκευή Q + |V| TextractMin + O(|E|) TdecreaseKey

53 Χρόνος Εκτέλεσης Αλγορίθμου Dijkstra
Χρόνος = O(|V|) + κατασκευή Q +|V| TextractMin + O(|E|) TdecreaseKey Ο χρόνος εξαρτάται από την υλοποίηση της Q Q κατασκευή Q Extract Min Decrease Key Σύνολο array O(V) O(1) O(V+V 2+E) = O(V 2) binary heap O(lg V) O(V+V lg V + E lg V) = O((V+E) lg V) ή O(E lg V) αν όλες οι κορυφές είναι προσπελάσιμες από την αρχική Fibonacci heap (amortized) O(1) (amortized) O(V+V lg V + E ) = O(V lgV + E)


Κατέβασμα ppt "Αναζήτηση (Εξερεύνηση) Πρώτα σε Πλάτος"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google