1 ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ Φροντιστήριο #2: Πολυωνυμικοί Αλγόριθμοι, Εισαγωγή στα Γραφήματα, Αναζήτηση κατά Βάθος, Τοπολογική Ταξινόμηση Άσκηση #1 Δίνονται οι ακόλουθοι αλγόριθμοι. Δώστε ένα Θ όριο της ασυμπτωτικής πολυπλοκότητάς τους. Αποφανθείτε για το αν είναι πολυωνυμικοί. Αλγόριθμος Διακοπές Είσοδος: Ένας αριθμός n for i=1 to n printf( Θέλω να πάω διακοπές! ); end for Αλγόριθμος Άθροισμα Βαθμών Είσοδος: Ένας πίνακας a μεγέθους n με τους βαθμούς ενός φοιτητή sum=0; for i=1 to n sum+=a[i]; end for Υπόδειξη: Πρόταση #1: Όταν ένας βρόχος επανάληψης (for/ while/ do while) περιλαμβάνει μόνο μια μεταβλητή που αντιστοιχεί σε αριθμητική τιμή της εισόδου, ο αλγόριθμος δεν είναι πολυωνυμικός (αλλά είναι εκθετικός). Πρόταση #2: Όταν ένας βρόχος επανάληψης (for/ while/ do while) περιλαμβάνει μόνο μια μεταβλητή που αντιστοιχεί στο πλήθος των στοιχείων της εισόδου, ο αλγόριθμος είναι πολυωνυμικός. Οι παραπάνω αλγόριθμοι έχουν πολυπλοκότητα Θ(n). Ο αλγόριθμος Διακοπές δεν είναι πολυωνυμικός (αλλά είναι εκθετικός). Ο αλγόριθμος Άθροισμα Βαθμών είναι πολυωνυμικός. Άσκηση #2 Έστω το ακόλουθο κατευθυνόμενο γράφημα G=(V,E). i. Εφαρμόστε τον αλγόριθμο της αναζήτησης κατά βάθος (DFS) στο G με αρχική κορυφή το Α και καταγράψτε τη σειρά με την οποία θα επισκεφθεί τις κορυφές του γραφήματος. Όταν υπάρχει παραπάνω από μια επιλογή, επισκεφτείτε την κορυφή που προηγείται λεξικογραφικά.
2 ii. Χαρακτηρίστε κάθε ακμή του G ως εξής: T(ree) αν είναι δενδρική ακμή, B(ack) αν είναι ακμή προς τα πίσω, F(orward) αν είναι ακμή προς τα εμπρός, C(ross) αν είναι εγκάρσια ακμή. Υπόδειξη: Χρησιμοποιώ τη σύμβαση pre(u) u post(u), όπου u: μια κορυφή του G 1 A 16, 2 B 15, 3 F 14, 4 E 7, 5 K 6, 8 G 9, 10 J 13, 11 H 12, 17 C 18, 19 D 20. Χαρακτηρισμός Ακμών: B(ack): (G, B), (H, J), (K, E) F(orward): δεν υπάρχουν C(ross): (C, B), (C, E), (D, E) T(ree): όλες οι υπόλοιπες Ηθικό δίδαγμα: Εφαρμόζω τον αλγόριθμο DFS προσεκτικά. Η κεντρική ιδέα του αλγορίθμου συμπυκνώνεται στα ακόλουθα βήματα (δείτε τη σχετική διάλεξη για μια αναλυτική παρουσίαση του αλγορίθμου). Βήμα #1: Αριστερά από κάθε κορυφή π.χ. την a σημειώνω έναν αριθμό (έστω pre(a)) που υποδεικνύει την 1 η φορά που επισκέφτηκα αυτή την κορυφή. Το 1 ο pre λαμβάνει την τιμή 1. Βήμα #2: Αν η κορυφή a έχει παιδιά που δεν έχω ήδη επισκεφθεί, επιλέγω αυτό που προηγείται λεξικογραφικά για να το επισκεφτώ, έστω το β. Σημειώνω σε συνεχόμενη αύξουσα αρίθμηση το pre(β). o Βήμα #2.1: Εξετάζω αν η κορυφή β έχει παιδιά που δεν έχω ήδη επισκεφθεί. Αν ναι, επανέρχομαι στο Βήμα #2. Βήμα #3: Αν η κορυφή a δεν έχει παιδιά που δεν έχω ήδη επισκεφθεί, τότε σημειώνω δεξιά της έναν αριθμό (έστω post(a)) που υποδηλώνει ότι η κορυφή αυτή δεν έχει παιδιά που δεν έχω ήδη επισκεφθεί. Η αρίθμηση είναι
3 αύξουσα και είναι ενιαία για τα pre και post, συνεπώς αυξάνει διαρκώς (1, 2, ανεξάρτητα από το αν υπολογίζουμε το pre ή post). Στη συνέχεια επιστρέφω στον πατέρα της a. o Βήμα #3.1: Αν ο πατέρας της a έχει παιδιά που δεν έχω ήδη επισκεφθεί, επανέρχομαι στο Βήμα #2. Αλλιώς, σημειώνω δεξιά του το post και πηγαίνω στον πατέρα του πατέρα του a κοκ Για να χαρακτηρίσω τις ακμές ενός κατευθυνόμενου γραφήματος, αρκεί να θυμάμαι ότι: Μια ακμή (a,b) είναι T(ree) αν pre(a)<pre(b) και τα a, b έχουν σχέση πατέραπαιδιού και επιπλέον το b δεν είναι απόγονος κάποιου παιδιού του a. Μια ακμή (a,b) είναι F(orward) αν pre(a)<pre(b) και τα a, b έχουν σχέση πατέρα-παιδιού και επιπλέον το b είναι απόγονος κάποιου παιδιού του a. Μια ακμή (a,b) είναι B(ack) αν post(a)<post(b). Μια ακμή (a,b) είναι C(ross) αν pre(b)<post(b)<pre(a)<post(a). Άσκηση #3 Έστω το ακόλουθο κατευθυνόμενο γράφημα G=(V,E). i. Εφαρμόστε τον αλγόριθμο της αναζήτησης κατά βάθος (DFS) στο G με αρχική κορυφή το Α και καταγράψτε τη σειρά με την οποία θα επισκεφθεί τις κορυφές του γραφήματος. Όταν υπάρχει παραπάνω από μια επιλογή, επισκεφτείτε την κορυφή που προηγείται λεξικογραφικά. ii. Χαρακτηρίστε κάθε ακμή του G ως εξής: T(ree) αν είναι δενδρική ακμή, B(ack) αν είναι ακμή προς τα πίσω, F(orward) αν είναι ακμή προς τα εμπρός, C(ross) αν είναι εγκάρσια ακμή. iii. Εφόσον διαπιστώσετε ότι το κατευθυνόμενο γράφημα είναι ακυκλικό (DAG), να εφαρμόσετε τον αλγόριθμο τοπολογικής ταξινόμησης παρουσιάζοντας το σχετικό γράφημα. A B C E G F Υπόδειξη: Τα i, ii, προκύπτουν με αντίστοιχο τρόπο με αυτόν της άσκησης 2. Χρησιμοποιώ τη σύμβαση pre(u) u post(u), όπου u: μια κορυφή του G 1 A 12, 2 B 9, 3 E 8, 4 F 5, 6 G 7, 10 C 11.
4 Χαρακτηρισμός Ακμών: B(ack): δεν υπάρχουν F(orward): (B, F) C(ross): δεν υπάρχουν T(ree): όλες οι υπόλοιπες Για το iii, καθόσον διαπιστώσατε ότι δεν υπάρχει back ακμή, αρκεί να διατάξετε τις κορυφές σε φθίνουσα σειρά των post numbers (και μετά απλώς συμπληρώνετε τις ακμές όπου υπάρχουν).η σειρά των κορυφών στην τοπολογική ταξινόμηση είναι: A, C, B, E, G, F. Άσκηση #4 Έστω κατευθυνόμενο γράφημα G=(V,E). Κατά την αναζήτηση κατά βάθος (DFS) συναντάμε τις ακμές (a,b), (e,d) και (f,c). Οι κορυφές a, b, c, d, e, f έχουν τα εξής χαρακτηριστικά (Χρησιμοποιώ τη σύμβαση pre(u) u post(u), όπου u: μια κορυφή του G): 1 α 14, 2 b 11 15 e 16, 4 d 5 7 f 8, 3 c 10 Να εξηγήσετε καθεμιά από τις ακμές (a,b), (e,d) και (f,c) σε ποια από τις ακόλουθες κατηγορίες ανήκει: a. T(ree) b. C(ross) c. F(orward) d. B(ack) e. T(ree) ή F(orward) f. Δεν έχουμε επαρκή στοιχεία για να απαντήσουμε Η άσκηση θα λυθεί στο επόμενο φροντιστήριο. Άσκηση #5 Έστω κατευθυνόμενο ακυκλικό γράφημα G=(V,E). Κατά την αναζήτηση κατά βάθος (DFS) συναντάμε τις κορυφές α, β, γ που έχουν τα εξής χαρακτηριστικά (Χρησιμοποιώ τη σύμβαση pre(u) u post(u), όπου u: μια κορυφή του G): 11 α 16, 13 β 14, 12 γ 15. Αν εφαρμόσετε τοπολογική ταξινόμηση, ποια θα είναι η σειρά εμφάνισης των κορυφών (από αριστερά προς τα δεξιά); a. α, β, γ b. β, α, γ c. α, γ, β d. β, γ, α e. γ, α, β f. γ, β, α
5 g. Δεν έχουμε επαρκή στοιχεία για να απαντήσουμε Η άσκηση θα λυθεί στο επόμενο φροντιστήριο. Άσκηση #6 Απαντήστε στα ερωτήματα της άσκησης 2 για το ακόλουθο κατευθυνόμενο γράφημα G=(V,E):