ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r ΤΕΙ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ ΥΠΟΛΟΓΙΣΤΩΝ ΜΑΘΗΜΑ : ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΤΥΟ (ΕΡΓΑΣΤΗΡΙΟ) Ε ΕΞΑΜΗΝΟ ΕΙΣΗΓΗΤΕΣ: Χαϊδόγιαννος Χαράλαμπος ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ Νο. Προθεσμία για την Παράδοση της Άσκησης: /05/00 DFS BFS ) Έστω ο παρακάτω γράφος i) Να περιγραφεί ο γράφος ως πίνακας και λίστα γειτονικών κορυφών. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r ii) Να εφαρμοστούν οι αλγόριθμοι αναζήτησης κατά βάθος (DFS) και κατά πλάτος (BFS). DFS Παρακάτω υλοποιείτε γραφική αναπαράσταση της εκτέλεσης του αλγορίθμου DFS Γραφική αναπαράσταση δέντρου του παραπάνω γραφήματος:
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r BFS Παρακάτω υλοποιείτε γραφική αναπαράσταση της εκτέλεσης του αλγορίθμου BFS Γραφική αναπαράσταση δέντρου του παραπάνω γραφήματος:
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r ) Δίνεται η ακόλουθη λίστα γειτονικών κορυφών ενός γράφου: 5 5 5 i) Εκτελέστε αναζήτηση κατά βάθος (DFS) με αρχή την κορυφή. Λύση: Γραφική απεικόνιση εκτέλεσης του αλγορίθμου
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r ii) Εκτελέστε αναζήτηση κατά πλάτος (BFS) με αρχή την κορυφή. Λύση: Γραφική απεικόνιση εκτέλεσης του αλγορίθμου 5 5 5 5 5 5 5 5
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r Λύση: Ελάχιστα Επικαλύπτοντα Δένδρα ) Δημιουργήστε ένα δικό σας, απλό, συνεκτικό, μη κατευθυνόμενο γράφο με βάρη. Ο γράφος να έχει κόμβους και ακμές και να τοποθετήσετε δικά σας μοναδικά βάρη. Να δείξετε τα βήματα του αλγορίθμου Kruskl σε αυτό τον γράφο βρίσκοντας το Ελάχιστο Επικαλύπτον Δέντρο (ΕΕΔ). Μήπως υπάρχουν και περισσότερα του ενός ΕΕΔ; Δεν υπάρχουν άλλα Ελάχιστα Επικαλύπτοντα Δέντρα, επειδή δεν υπάρχουν βάρη με ίδιο κόστος. Το Ε.Ε.Δ. έχει συνολικό βάρος ακμών
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r Η άλλη εκδοχή της άσκησης είναι η παρακάτω υλοποίηση με κόμβους και ακμές θεωρώντας ότι η κάθε ακμή έχει αμφίδρομη επικοινωνία και υπολογίζοντας επί δύο τους ακμές (Χ=) βρίσκουμε θεωρητικά ακμές. Το Ε.Ε.Δ. του παραπάνω γράφου έχει συνολικό κόστος και δεν υπάρχουν άλλες ελάχιστες διαδρομές.
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r Ελάχιστα Μονοπάτια Δρομολόγηση ) α) Δίνεται ο παρακάτω ψευδοκώδικας για την εύρεση του ελαχίστου μονοπατιού από την κορυφή αρχή στην κορυφή στόχος σε δεδομένο συνεκτικό γράφο:. Αρχικοποίησε το μονοπάτι στην τιμή αρχή. Αρχικοποίησε τη λίστα Επίσκεψη στην τιμή {αρχή}. Εάν αρχή=στόχος επέστρεψε την τιμή μονοπάτι και τέλος. Αλλιώς, συνέχισε. Βρες την ακμή (αρχή,v) με το μικρότερο βάρος τέτοια ώστε το V να είναι γειτονικό στην αρχή και να μην υπάρχει στη λίστα Επίσκεψη 5. Πρόσθεσε το V στο μονοπάτι. Πρόσθεσε το V στη λίστα Επίσκεψη. Θέσε την τιμή του V στο αρχή και πήγαινε στο Βήμα. Τι έχετε να σχολιάσετε για την παραπάνω στρατηγική εύρεσης ελάχιστου μονοπατιού; Βρίσκει πάντα το συντομότερο μονοπάτι από την αρχή στο στόχος; Εξηγήστε είτε διαισθητικά γιατί το παραπάνω δουλεύει ή με κάποιο παράδειγμα. Μονοπάτι είναι μια μεταβλητής τύπου κόμβου μεταβλητή = με τον κόμβο αρχή στη λίστα βάζει την τιμή αρχή ως πρώτο κόμβο αν αρχή == με μεταβλητή τύπου κόμβου στόχος το πρόγραμμα τερματίζει αλλιώς βρίσκει ακμή με μικρότερο μονοπάτι ενός γειτόνου και να μην υπάρχει στη λίστα επίσκεψη. Μονοπάτι = με αυτό το κόμβο. εισάγει στη λίστα αυτόν τον κόμβο αρχή =αυτόν τον κόμβο και συνεχίζει από τον έλεγχο αν αρχή == στόχο Η στρατηγική που ακολουθεί ο αλγόριθμος είναι όμοια με την στρατηγική του αλγορίθμου DFS, ο αλγόριθμος DFS δεν βρίσκει πάντα το συντομότερο μονοπάτι προς τον στόχο, για παράδειγμα στο παρακάτω γράφο ακολουθείται η διαδρομή από τον κόμβο στο κόμβο επειδή έχει μικρότερο βάρος μετά από το κόμβο στον κόμβο επειδή είναι το μοναδικό μονοπάτι το οποίο έχει μεγαλύτερο κόστος (0) σε σχέση με το άλλο μονοπάτι. Παράδειγμα γράφος DFS
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r β) (Πιθανή βοήθεια αν καταλάβετε την αντιστοιχία και για το (α) ) Θεωρήστε ότι θέλετε να δώσετε ρέστα στην αγορά ενός προϊόντος κάποια λεπτά του Ευρώ (π.χ 9 λεπτά). Ποιος είναι ο μικρότερος δυνατός αριθμός σε νομίσματα που πρέπει να δώσετε ως ρέστα; Αναπτύξτε μια μικρή αριθμητική στρατηγική για το σκοπό αυτό. Στη συνέχεια υποθέστε ότι έχουμε ένα λίγο διαφορετικό νομισματικό σύστημα (π.χ. λεπτό, λεπτά και λεπτά και προσπαθήστε να δώσετε ρέστα λεπτά, με την προηγούμενη στρατηγική που αναπτύξατε. Θα καταλήξετε σε σωστό αποτέλεσμα; Τι παρατηρείτε και γιατί συμβαίνει αυτό; Λύση: Το παραπάνω πρόβλημα μπορεί να υλοποιηθεί με δύο τρόπους: Πρώτος τρόπος: με διαίρεση Ελέγχω το κοντινότερο νομισματικό ποσό που είναι το (ευρώ), ελέγχουμε πόσες φορές χωράνε τα 0,9 (λεπτά) στο που δεν έχει λύση. Δοκιμάζω το αμέσως μικρότερο νομισματικό ποσό τα 0,50 (λεπτά) λέμε λοιπών πόσες φορές χωράνε τα 50 λεπτά στα 9 λεπτά, μία φορά, μας μένουν υπόλοιπο λεπτά το αμέσως μικρότερο νομισματικό ποσό είναι τα 0 λεπτά, στα λεπτά χωράνε δύο φορές και μας μένουν λεπτά μετά δοκιμάζω με το κοντινότερο μικρό νομισματικό ποσό με τα λεπτά που χωράνε δύο φορές και μας μένει υπόλοιπο 0, οπότε ολοκληρώνουμε και τι διαδικασία πληρωμής. Διαίρεση Αποτέλεσμα Υπόλοιπο 9 50 0 0 Σύνολο 5 Το άθροισμα του αποτελέσματος μας δίνει τα βήματα που υλοποιεί η στρατηγική αυτή Δεύτερος τρόπος: με αφαίρεση Αντίστοιχα με τον πρώτο τρόπο που αναφέραμε πάνω η στρατηγική αυτή μπορεί να υλοποιηθεί αφαιρούνται το κοντινότερο μικρό νομισματικό ποσό από το ποσό που προσπαθούμε να αποπληρώσουμε αντίστοιχα έχω τα ακόλουθα βήματα: Βήμα Αφαίρεση Αποτέλεσμα 9 50 0 0 5 0
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r ) Να εκτελέσετε τον αλγόριθμο του Dijkstr στον παρακάτω κατευθυνόμενο γράφο με αρχικό κόμβο τον S : S A C Παρατήρηση: ο αλγόριθμος Dijkstr στην κανονική του μορφή δεν βρίσκει τους κόμβους από τους οποίους αποτελούνται τα συντομότερα μονοπάτια, αλλά για δεδομένο αρχικό κόμβο s υπολογίζει τα ελάχιστα κόστη για την μετάβαση από το s σε όλους τους υπόλοιπους (όπου βέβαια είναι δυνατό). Στον πίνακα που παρουσιάζεται η εκτέλεση του αλγορίθμου έχει προστεθεί και μία στήλη π (που κρατάει έναν πρόγονο για κάθε κόμβο) που θα βοηθήσει στην εύρεση των κόμβων από τους οποίους αποτελούνται τα συντομότερα μονοπάτια. B Επόμ. Κόμβος A B C D P D P D P S S S SC C C SCA 5 A SCAB Πίνακας εκτέλεσης του αλγορίθμου Dijkstr Να βρείτε και να καταγράψετε μόνο τα επόμενα (δεν χρειάζεται δηλαδή να φαίνονται τα βήματα): i) Τη σειρά των κόμβων που επισκέπτεται ο αλγόριθμος κατά την υλοποίηση του. Απάντηση: Ο αλγόριθμος επισκέπτεται αντίστοιχα τους ακόλουθους κόμβους S, C, A, B ii) Τις συνολικές αποστάσεις για κάθε κόμβο. Απάντηση: Οι αποστάσει που προκύπτουν από την εκτέλεση του αλγορίθμου είναι, 5, iii) Τις διαφορετικές τιμές των αποστάσεων που παίρνει ο κόμβος B κατά την εκτέλεση του αλγορίθμου. Απάντηση: Ο κόμβος Β παίρνει τις ακόλουθες αποστάσεις: Άπειρο (δηλ. δεν υπάρχει διαδρομή) στο πρώτο βήμα, στο δεύτερο βήμα, και 5 στο τελευταίο βήμα
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r ) Έστω ο παρακάτω κατευθυνόμενος γράφος με βάρη. Με αρχικό κόμβο το να βρεθούν και να καταγραφούν τα συντομότερα μονοπάτια προς όλους τους υπόλοιπους κόμβος με χρήση του αλγόριθμου Dijkstr. 5 0 0 00 0 0 50 Λύση: Στον παρακάτω πίνακα φαίνονται τα συντομότερα μονοπάτια και οι προηγούμενη κόμβοι που οδηγούν στον προορισμό. 50 5 Επόμ. Κόμβος 5 D P D P D P D P 50 0 00 0,5 50 0 0 5,5, 0 0,5,, 0,5,,, Πίνακας εκτέλεσης του αλγορίθμου Dijkstr