Προβλήματα βέλτιστων μονοπατιών Δρομολόγηση μιας οντότητας ανάμεσα σε δύο σημεία ενός δικτύου έτσι ώστε να ελαχιστοποιήσουμε ένα κόστος, μια διάρκεια,, κτλ. Εφαρμογές: Χρονοπρογραμματισμός (διαχείριση εργασιών, προγραμμάτων,...)
Κατευθυνόμενος γράφος Κατευθυνόμενος γράφος με βάρη: G = (X, A, W) X σύνολο n κόμβων Α σύνολο m(κατευθυνόμενων) πλευρών W(i, j) κόστος (κατευθυνόμενης) πλευράς ( x, y ) i j
Παράδειγμα: G= (X,A,W) 3 S= 3 3 3 7 8 7 3 6
Μονοπάτια Κόστος ενός μονοπατιού που συνδέει δύο κόμβους του είναι το άθροισμα των κοστών των (κατευθυνόμενων) μ πλευρών του.
Κόστος μονοπατιού S= 3 3 3 3 7 8 7. 8 κόστος 7 6 κόστος κόστος κόστος 3 6.
Τύποι Προβλημάτων Πρόβλημα Α: Δεδομένων δύο κόμβων s και t, να βρεθεί το συντομότερο μονοπάτι από τον κόμβο s προς τον κόμβο t. Πρόβλημα Β: Δεδομένου ενός κόμβου αφετηρίας s, να βρεθεί το συντομότερο μονοπάτι από το s προς κάθε άλλο κόμβο. Πρόβλημα C: Να βρεθεί το συντομότερο Πρόβλημα C: Να βρεθεί το συντομότερο μονοπάτι ανάμεσα σε κάθε ζευγάρι κόμβων.
Αλγόριθμοι με οριστικοποίηση ετικετών (Greedy για πρόβλημα Β) Γράφος G=(Χ, A, w), Χ = n, A = m και w(i,j) 0 (,j) Για κάθε κόμβο x : V[x], τιμή του συντομότερου μονοπατιού από τον κόμβο αφετηρία s προς τον κόμβο x. Διατήρηση για κάθε κόμβο x προσπελάσιμο ξεκινώντας από τον κόμβο s : P[x]. Σ άθ άλ έ ό β δέ ή Σε κάθε επανάληψη, ένας κόμβος x δέχεται την οριστική του ετικέτα (θα λέμε ότι είναι φιξαρισμένος). Ένας πίνακας FIXE[ ] θα δείχνει τους φιξαρισμένους κόμβους.
παράδειγμα (P[x], V[x]) ) (,0) S= 3 Πατέρας Αρχικοποίηση Τιμή 3 3 3 7 8 7 3 6
(,0) S= 3 Αρχικοποίηση 3 3 Βήμα επέλεξε κόμβο 3 7 8 7 3 ) 6 NOT FIXED
(P[x], V[x]) (,0) S= (,) ) 3 Αρχικοποίηση 3 3 Βήμα επέλεξε κόμβο (ενημέρωση γειτόνων) 3 7 8 7 (,) 3 6 ) NOT FIXED
FIXED (,0) S= (,) ) 3 Αρχικοποίηση 3 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο 3 7 8 7 3 ) 6
FIXED (,0) S= (,) ) 3 (,) Αρχικοποίηση 3 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο 3 (,) 7 8 (ενημέρωση γειτόνων του ) 7 (,) 3 6 )
FIXED (,0) S= (,) ) 3 (,) Αρχικοποίηση 3 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο 3 Βήμα 3 επέλεξε κόμβο 3 (,) 7 8 7 (,) 3 6 ) NOT FIXED
FIXED (,0) S= (,) ) 3 (,) Αρχικοποίηση 3 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο 3 Βήμα 3 επέλεξε κόμβο 3 (,) 7 8 (ενημέρωση γειτόνων του 3) 7 (,) (3,) 3 6 ) NOT FIXED
FIXED (,0) S= (,) ) 3 (,) Αρχικοποίηση 3 3 (,) 3 7 8 7 (,) (3,) 3 6 ) Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 3 επέλεξε κόμβο 3 Βήμα επέλεξε κόμβο NOT FIXED
FIXED (,0) S= (,) ) 3 (,) Αρχικοποίηση 3 3 (,) (, 7) 3 7 8 7 (,) (3,) 3 6 ) Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 3 επέλεξε κόμβο 3 Βήμα επέλεξε κόμβο (ενημέρωση γειτόνων του ) NOT FIXED
FIXED (,0) S= (,) ) 3 (,) Αρχικοποίηση 3 3 (,) (, 7) 3 7 8 7 (,) (3,) 3 6 ) Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 3 επέλεξε κόμβο 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο NOT FIXED
FIXED (,0) S= (,) ) 3 (,) Αρχικοποίηση 3 3 (,) (, 7) 3 7 8 7 (,) (3,) 3 6 ) Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 3 επέλεξε κόμβο 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο (ενημέρωση γειτόνων του ) NOT FIXED
FIXED (,0) S= (,) ) 3 (,) Αρχικοποίηση 3 3 (,) (, 7) 3 7 8 7 (,) (3,) 3 6 ) Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 3 επέλεξε κόμβο 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 6 επέλεξε κόμβο 6 NOT FIXED
FIXED (,0) S= (,) ) 3 (,) Αρχικοποίηση 3 3 (6, 6) (6, 8) (, 7) 3 (,) 7 8 7 (,) (3,) 3 6 ) Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 3 επέλεξε κόμβο 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 6 επέλεξε κόμβο 6 (ενημέρωση γειτόνων του 6) NOT FIXED
FIXED (,0) S= (,) ) 3 (,) 3 3 (6, 6) (6, 8) (, 7) 3 (,) 7 8 7 (,) (3,) 3 6 ) Αρχικοποίηση Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 3 επέλεξε κόμβο 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 6 επέλεξε κόμβο 6 Βήμα 7 επέλεξε κόμβο 7 NOT FIXED
FIXED (,0) S= (,) ) 3 (,) 3 3 (7, 7) (6, 6) (6, 8) (, 7) 3 (,) 7 8 7 (,) (3,) 3 6 ) Αρχικοποίηση Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 3 επέλεξε κόμβο 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 6 επέλεξε κόμβο 6 Βήμα 7 επέλεξε κόμβο 7 (ενημέρωση γειτόνων του 7) NOT FIXED
FIXED (,0) S= (,) ) 3 (,) 3 3 (7, 7) (6, 6) (6, 8) (, 7) 3 (,) 7 8 7 (,) (3,) 3 6 ) Αρχικοποίηση Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 3 επέλεξε κόμβο 3 Βήμα επέλεξε κόμβο Βήμα επέλεξε κόμβο Βήμα 6 επέλεξε κόμβο 6 Βήμα 7 επέλεξε κόμβο 7 Βήμα 8 επέλεξε κόμβο 8
(,0) S= 3 (, ) (, ) 3 3 (, ) 3 (6, 6) (7, 7) 7 8 7 3 (, ) 6 (3, ) Κόμβος : P[]=, P[]=, P[]=. Μονοπάτι: Κατευθυνόμενο δέντρο ελάχιστων μονοπατιών
Αρχικοποίησε τον πίνακα V με --#-- P με 0 --#-- FIXE σε False Θέσε V[S] = 0 και P[S] = Repeat --- --- Until {x V[x] < and x ΜΗ φιξαρισμένος} = Ø
Repeat Επέλεξε ένα κόμβο x ΜΗ φιξαρισμένο και με ελάχιστο V[x] ΑN V[x] < ΤΟΤΕ Φίξαρε x Για κάθε y επόμενο του x και ΜΗ φιξαρισμένο An V[y] > V[x] + W(x,y) ΤΟΤΕ V[y] = V[x] + W(x,y) Θέσε P[y] = x /*απομνημόνευσε ότι ερχόμαστε στο y απο τον x */ Until {x V[x] < and x ΜΗ φιξαρισμένος} = Ø
Ορθότητα αλγορίθμου Dijkstra FIXED x t W xy W tz y V(y) W zy z V(z) G NOT FIXED V[z] V[y]
Ορθότητα αλγορίθμου Dijkstra FIXED x t W xy W tz y V(y) W zy z V(z) G NOT FIXED [ ] V [ z ] [ ] [ ] [ ] V y Vz+ W < Vy Vz zy W 0 zy ΑΔΥΝΑΤΟ
Αρνητικά βάρη (κόστος = 3) 3 (κόστος = ) - 3 -
- (, 0) 3 -
- (, 0) (, -) (, ) 3 -
- (, 0) (, -) (, ) 3 (, 3) -
- (, 0) (, -) (, ) 3 (, 3) -
- (, 0) (, -) (, ) 3 (, 3) -
- (, 0) (, -) (, ) 3 (, 3) - Αποτέλεσμα λάθος
Αρνητικά βάρη (Dijkstra) - (, 0) (, -) (, ) ) 3 (, 3) αποτέλεσμα λάθος - - 3 - αποτέλεσμα ορθό
Αρνητικά βάρη 00 - - - 3 Επιδιόρθωση είναι εφικτή?
Αρνητικά βάρη 00+00 99 99 99 3 Πρόσθεση ενός μεγάλου αριθμού δεν επιδιορθώνει το πρόβλημα!