TEI Σερρών Τμήμα Πληροφορικής και Επικοινωνιών Δίκτυα Υπολογιστών ΙΙ (Ασκήσεις Πράξης) Least Cost Algorithms Τομέας Τηλεπικοινωνιών και Δικτύων Δρ. Αναστάσιος Πολίτης Καθηγητής Εφαρμογών anpol@teiser.gr
Αλγόριθμοι Ελαχίστου Κόστους Οι αποφάσεις δρομολόγησης βασίζονται σε κριτήρια ελαχίστου κόστους αριθμός αλμάτων (hops) υψηλότερη χωρητικότητα τηλεπικοινωνιακός φόρτος οικονομικό κόστος συνδυασμός αυτών Τα κριτήρια αυτά χρησιμοποιούνται ως είσοδος σε έναν αλγόριθμο δρομολόγησης ο οποίος έχει στόχο: Σε ένα δίκτυο με κόμβους συνδεδεμένους με αμφίδρομες συνδέσεις, όπου κάθε σύνδεση έχει ένα κόστος για κάθε κατεύθυνση, προσδιόρισε το κόστος μιας διαδρομής ανάμεσα σε δύο κόμβους ως το άθροισμα των κοστών των συνδέσεων που συνθέτουν την διαδρομή. Για κάθε ζεύγος κόμβων, βρες το μονοπάτι με το ελάχιστο κόστος. Οι περισσότεροι αλγόριθμοι δρομολόγησης που χρησιμοποιούνται στα δίκτυα είναι παραλλαγές είτε του αλγορίθμου Dijkstra είτε του αλγορίθμου Bellman-Ford.
Έστω ότι έχουμε το δίκτυο: Αλγόριθμος Dijkstra Ποιά είναι η συντομότερη διαδρομή από κάθε κόμβο προς κάθε άλλον στο δίκτυο;
Ο αλγόριθμος Dijkstra με λίγα λόγια: Επιλέγουμε έναν κόμβο εκκίνησης s Κατόπιν επιλέγουμε τον κοντινότερο κόμβο (αυτόν με το μικρότερο κόστος) στον ριζικό κόμβο s. ο νέος κόμβος έχει ανακαλυφθεί (discovered) Κατόπιν εντοπίζουμε τον κοντινότερο κόμβο στο s τέτοιον ώστε: αυτός να μην έχει ανακαλυφθεί ακόμα αυτός να είναι απευθείας συνδεδεμένος στον s ή να είναι συνδεδεμένος με κάποιον κόμβο που έχει ήδη ανακαλυφθεί. Η διαδικασία συνεχίζεται μέχρι να ανακαλυφθούν όλοι οι κόμβοι στο δικτύωμα. Κατά την αρχικοποίηση του αλγορίθμου όλοι οι κόμβοι που δεν είναι άμεσα συνδεδεμένοι στον s κατέχουν άπειρη απόσταση από αυτόν.
Εκκινούμε έστω από τον κόμβο Ν. Του αναθέτουμε απόσταση L(0)=0. Στους γειτονικούς του όσο είναι το βάρος της ακμής που τους συνδέει και σε όλους τους άλλους άπειρο. Ν 8 Ν Ν 8 Ν 0 Ν Ν Επανάληψη Κόμβοι L() L() L() L() L() {} (-) (-) (-) (-) (-)
Εξετάζουμε όλους τους γειτονικούς του Ν ξεκινώντας από αυτόν με το μικρότερο βάρος. Ανανεώνουμε τις αποστάσεις των γειτονικών του νέου κόμβου εάν η νέα απόσταση είναι μικρότερη από αυτή που ήδη έχει. Ν 8 Ν Ν 8 Ν 0 Ν Ν Επανάληψη Τ L() L() L() L() L() {} (-) (-) (-) (-) (-) {,} (-) (--) (-) (--) (-)
Η σειρά του Ν Ν 8 Ν Ν 8 Ν 0 Ν Ν Επανάληψη Τ L() L() L() L() L() {} (-) (-) (-) (-) (-) {,} (-) (--) (-) (--) (-) {,,} (-) (--) (-) (--) (-)
Ο Ν δεν εξετάζεται τώρα γιατί η νέα απόσταση του είναι μικρότερη της ακμής που τον συνδέει με τον Ν. Οπότε πάμε στον Ν. Ν 8 Ν Ν 8 Ν 0 Ν Ν Επανάληψη Τ L() L() L() L() L() {} (-) (-) (-) (-) (-) {,} (-) (--) (-) (--) (-) {,,} (-) (--) (-) (--) (-) {,,,} (-) (---) (-) (--) (---) 8
Τώρα ήρθε η ώρα του Ν. Καμία όμως ανανέωση. 0 Ν 8 Ν Ν Ν 8 Επανάληψη Τ L() L() L() L() L() {} (-) (-) (-) (-) (-) {,} (-) (--) (-) (--) (-) {,,} (-) (--) (-) (--) (-) {,,,} (-) (---) (-) (--) (---) Ν Ν {,,,,} (-) (---) (-) (--) (---) 9
Τέλος, ο Ν. 0 Ν 8 Ν Αλγόριθμος Dijkstra Ν Ν 8 Επανάληψη Τ L() L() L() L() L() {} (-) (-) (-) (-) (-) {,} (-) (--) (-) (--) (-) {,,} (-) (--) (-) (--) (-) {,,,} (-) (---) (-) (--) (---) {,,,,} (-) (---) (-) (--) (---) Ν Ν {,,,,,} (-) (---) (-) (--) (---) 0
Να φτιάξετε τον πίνακα του αλγορίθμου Dijkstra για το παρακάτω δίκτυο ξεκινώντας από τον κόμβο a. (Οι ακμές είναι αμφικατευθυντικές με το ίδιο βάρος).
Να φτιάξετε τον πίνακα του αλγορίθμου Dijkstra για το παρακάτω δίκτυο ξεκινώντας από τον κόμβο. (Οι ακμές είναι αμφικατευθυντικές με το ίδιο βάρος). 9 9 0 Επανάληψη Τ L() L() L() L() L() {} (-) 9 (-) (-) (-) (-) {,} (-) 9 (-) (--) (-) (-) {,,} (-) 9 (-) 0 (--) (-) (--) {,,,} (-) 9 (-) 0 (--) 0 (---) (--) {,,,,} (-) 9 (-) 0 (--) 0 (---) (--) {,,,,,} (-) 9 (-) 0 (--) 0 (---) (--)
Να φτιάξετε τον πίνακα του αλγορίθμου Dijkstra για το παρακάτω δίκτυο ξεκινώντας από τον κόμβο s. (Οι ακμές είναι αμφικατευθυντικές με το ίδιο βάρος). Επανάληψη Τ L(u) L(x) L(v) L(y) {s} (s-u) (s-x) (-) (-) {s,u} (s-u) (s-x) 9 (s-u-v) (-) {s,u,x} (s-u) (s-x) 8 (s-x-v) (s-x-y) {s,u,x,v} (s-u) (s-x) 8 (s-x-v) 0 (s-x-v-y) {s,u,x,v,y} (s-u) (s-x) 8 (s-x-v) 0 (s-x-v-y)
Αλγόριθμος Bellman-Ford Ο αλγόριθμος Bellman-Ford με λίγα λόγια: Ο αλγόριθμος εκκινεί από έναν ριζικό κόμβο s. Βρίσκει την συντομότερη διαδρομή προς τους κόμβους με την προϋπόθεση ότι περιέχουν το πολύ μια ζεύξη. Κατόπιν βρίσκει την συντομότερη διαδρομή προς τους κόμβους με την προϋπόθεση ότι περιέχουν το πολύ δύο ζεύξεις. Κατόπιν βρίσκει την συντομότερη διαδρομή προς τους κόμβους με την προϋπόθεση ότι περιέχουν το πολύ τρείς ζεύξεις. Συνεχίζει κατά τον τρόπο αυτό για n- φορές όπου n το πλήθος των κόμβων. Αρχικά όλοι οι κόμβοι n- θεωρούνται ότι έχουν άπειρη απόσταση από τον s.
Αλγόριθμος Bellman-Ford