Αλγόριθμοι και Πολυπλοκότητα (ΣΗΜΜΥ)
χειμερινό εξάμηνο 2016-2017
Γενικά
Διδάσκοντες
- Δημήτρης Φωτάκης, Επίκουρος Καθηγητής ()
- Δώρα Σούλιου, Ε.ΔΙ.Π ()
Βοηθοί Διδασκαλίας
- Λυδία Ζακυνθινού, Υ.Δ. ()
- Ανδρέας Μάντης, Υ.Δ. ()
- Στρατής Σκουλάκης, Υ.Δ. ()
Βοηθοί Εργαστηρίου και Γραπτών Ασκήσεων
- Μάκης Αρσένης
- Βασίλης Λίβανος
- Ορέστης Πλευράκης
- Ισίδωρος Τζιώτης
- Λεωνίδας Τσεπενέκας
- Γιάννης Χατζημίχος
Διαλέξεις
- κάθε Δευτέρα 15:00-17:00 (Αμφιθέατρο 1, νέο κτήριο Ηλεκτρολόγων)
- κάθε Πέμπτη 17:00-19:00 (Αμφιθέατρο 4, νέο κτήριο Ηλεκτρολόγων)
Ώρες Γραφείου
- κάθε Δευτέρα 14:00-15:00 στο εργαστήριο 1.1.3 (CoReLab) ή στο γρ. 1.1.10 του κτηρίου Ηλεκτρολόγων.
- κάθε Πέμπτη 16:00-17:00 στο εργαστήριο 1.1.3 (CoReLab) ή στο γρ. 1.1.10 του κτηρίου Ηλεκτρολόγων.
Ενημερωτικό Φυλλάδιο
Μπορείτε να βρείτε το ενημερωτικό φυλλάδιο του μαθήματος εδώ.
Βιβλιογραφία
- Thomas Cormen, Charles Leiserson, Ronald Rivest and Cliff Stein: "Introduction to Algorithms", 3rd edition, MIT Press, 2009.
- J. Kleinberg, E. Tardos: "Algorithm Design", Addison-Wesley, 2005.
- S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani: "Algorithms", MacGraw-Hill, 2006 (Μπορείτε να βρείτε draft έκδοση του βιβλίου αυτού εδώ).
- J. Edmonds. How to Think About Algorithms. Cambridge University Press, 2008.
- G. Brassard, P. Bratley: "Algorithmics: Theory and Practice", Prentice-Hall.
- Sara Baase, Allen Van Gelder, "Computer Algorithms: Introduction to Design and Analysis", 3rd edition, Addison Wesley Longman, 2000.
- Alfred V. Aho, John E. Hopcroft, "The Design and Analysis of Computer Algorithms", Addison-Wesley Series in Computer Science and Information Processing, 1974.
- Dexter C. Kozen, "The Design and Analysis of Algorithms", Springer, 1991.
- A. Levitin: "Ανάλυση και Σχεδίαση Αλγορίθμων", Εκδόσεις Τζιόλα, 2007.
- G. J. E. Rawlings: "Αλγόριθμοι: Ανάλυση και Σύγκριση", Εκδόσεις Κριτική, 2004.
Ανακοινώσεις
- [16/9/2017] Βαθμολογία της εξέτασης Σεπτεμβρίου 2017 για τους μεταπτυχιακούς φοιτητές.
- [23/7/2017] Βαθμολογία της εξέτασης Ιουλίου 2017 για φοιτητές στο πτυχίο.
- [2/4/2017] Βαθμολογία εξεταστικής περιόδου Φεβρουαρίου: προπτυχιακοί και μεταπτυχιακοί φοιτητές. Η βαθμολογία της εξέτασης έχει ως άριστα το 80, η βαθμολογία των γραπτών ασκήσεων έχει ως άριστα το 10, και η βαθμολογία των προγραμματιστικών ασκήσεων έχει ως άριστα το 15. Οι βαθμοί των γραπτών και των προγραμματιστικών ασκήσεων του ακαδ. έτους 2015-2016 έχουν συνυπολογιστεί (για όσους είχαν παραδώσει ασκήσεις), αλλά δεν συμπεριλαμβάνονται σε αυτόν τον πίνακα. Για να δείτε τα γραπτά σας και για οποιεσδήποτε ερωτήσεις σχετικά με τη βαθμολογία σας, μπορείτε να έρθετε στο Corelab (1.1.3), την Παρασκευή 7 Απριλίου, ώρα 15:30 - 16:30.
- [17/1/2017] Διάλεξη αναπλήρωσης: Την Παρασκευή 20/1, ώρα 17:00 - 19:00, στην αίθουσα 002, θα γίνει διάλεξη αναπλήρωσης.
- [18/12/2016] Σημειώσεις: Οι σημειώσεις του κ. Ζάχου θα μοιράζονται στο Corelab (1.1.3, παλαιό κτ. ΗΜΜΥ), κάθε Δευτέρα, από 17:00 μέχρι 18:30, και κάθε Πέμπτη, από 16:00 μέχρι 17:00.
- [2/11/2016] Έχει "ανοίξει" ο grader για την υποβολή της 1ης προγραμματιστικής άσκησης. Για την υποβολή, πρέπει να χρησιμοποιείτε το login name και το password που έχετε για το moodle του μαθήματος (ή αυτό που έχετε για τον grader, αν είχατε ήδη λογαριασμό εκεί), ώστε να μην υπάρξουν προβλήματα με τη βαθμολογία σας. Καλή επιτυχία!
- [13/10/2016] Το moodle του μαθήματος είναι ενεργό. Πρέπει να γραφτείτε (enroll) όλοι μέχρι την Πέμπτη 20/10, ώστε να γίνει η απαραίτητη προετοιμασία για την ανακοίνωση της 1ης προγραμματιστικής άσκησης. Από τα στοιχεία που θα δηλώσετε στο moodle πρέπει να προκύπτουν με σαφήνεια το Ονοματεπώνυμό σας και ο Αριθμός Μητρώου σας. Τα login name και password που θα δηλώσετε στο moodle θα χρησιμοποιούνται και για την πρόσβαση / υποβολή των προγραμματιστικών ασκήσεων στον grader.
- [1/10/2016] Η πρώτη διάλεξη θα γίνει την Δευτέρα 3 Οκτωβρίου, στις 15:00, στο Αμφιθέατρο 1.
Υλικό
Διαφάνειες Μαθήματος
- Διάλεξη 3/10/2016: Εισαγωγή και Διαδικαστικά. Εισαγωγικές Έννοιες.
- Διάλεξη 6/10/2016: Ασυμπτωτικός Συμβολισμός.
- Διάλεξη 10/10/2016: Δομές Δεδομένων. Ουρές Προτεραιότητας: Σωρός.
- Διάλεξη 13/10/2016: Κάτω Φράγμα στη χρονική πολυπλοκότητα συγκριτικών αλγόριθμων ταξινόμησης. Ταξινόμηση σε γραμμικό χρόνο (κάποια links με σχετικό υλικό: 1, 2, 3, 4). Union - Find.
- Διάλεξη 17/10/2016: Αλγόριθμοι Διαίρει-και-Βασίλευε: mergesort, master theorem, πολλαπλασιασμός αριθμών και πινάκων.
- Διάλεξη 20/10/2016: Αλγόριθμοι διαίρει-και-βασίλευε: πλησιέστερο ζεύγος σημείων, ύψωση σε δύναμη. Quicksort, πιθανοτική Quicksort.
- Διάλεξη 24/10/2016: Το πρόβλημα της επιλογής.
- Διάλεξη 27/10/2016: Γραμμική αναζήτηση, δυαδική αναζήτηση, αναζήτηση με παρεμβολή. Άπληστοι Αλγόριθμοι.
- Διάλεξη 31/10/2016: Άπληστοι αλγόριθμοι.
- Διάλεξη 3/11/2016: Δυναμικός προγραμματισμός.
- Διάλεξη 7/11/2016: Δυναμικός Προγραμματισμός.
- Διάλεξη 10/11/2016: Παραδείγματα και ασκήσεις σε δυναμικό προγραμματισμό.
- Διάλεξη 14/11/2016: Ασκήσεις σε άπληστους αλγόριθμους και δυναμικό προγραμματισμό. Συζήτηση λύσεων 1ης σειράς ασκήσεων.
- Διάλεξη 21/11/2016: Επιπλέον ασκήσεις σε Δυναμικό Προγραμματισμό. Αναζήτηση κατά Πλάτος.
- Διάλεξη 28/11/2016: Αναζήτηση κατά Βάθος. Ελάχιστο Συνδετικό Δέντρο.
- Διάλεξη 1/12/2016: Ελάχιστο Συνδετικό Δέντρο: αλγόριθμος Kruskal, αλγόριθμος Prim, αλγόριθμος Boruvka.
- Διάλεξη 5/12/2016: Ελάχιστο Συνδετικό Δέντρο: ασκήσεις. Συντομότερες διαδρομές από μία αρχική κορυφή: βασικές έννοιες.
- Διάλεξη 12/12/2016: Συντομότερες διαδρομές από μία αρχική κορυφή: αλγόριθμος Bellman-Ford. Συζήτηση λύσεων 2ης σειράς ασκήσεων.
- Διάλεξη 15/12/2016: Συντομότερες διαδρομές από μία αρχική κορυφή: αλγόριθμος Dijkstra.
- Διάλεξη 19/12/2016: Συντομότερες διαδρομές για όλα τα ζεύγη κορυφών: αλγόριθμος Floyd-Warshall. Αλγόριθμος Johnson.
- Διάλεξη 22/12/2016: Μέγιστη Ροή - Ελάχιστη Τομή. Μηχανές Turing και Υπολογισιμότητα.
- Διάλεξη 9/1/2017: Μηχανές Turing και Υπολογισιμότητα. Υπολογιστική Πολυπλοκότητα.
- Διάλεξη 12/1/2017: Αναγωγές. Παραδείγματα αναγωγών.
- Διάλεξη 16/1/2017: Μη Ντετερμινισμός. Η Κλάση NP.
- Διάλεξη 19/1/2017: Η Κλάση NP. NP-Πληρότητα. NP-πλήρη προβλήματα. Παραδείγματα αναγωγών.
- Διάλεξη 20/1/2017: Παραδείγματα αναγωγών.
- Διάλεξη 23/1/2017: Περισσότερα παραδείγματα αναγωγών. Κλάσεις Χωρικής Πολυπλοκότητας.
Σημειώσεις - Συμπληρωματικό Υλικό
- Προγραμματιστικές Ασκήσεις: Μια απλή συνάρτηση σε C για να διαβάζετε γρήγορα την είσοδο όταν αυτή αποτελείται από μη αρνητικούς ακέραιους και τα testcases είναι πολύ μεγάλα.
- Σύντομη Εισαγωγή στη Θεωρία Γραφημάτων (σημειώσεις του Δ. Φωτάκη). Για τις βασικές έννοιες της Θεωρίας Γραφημάτων δείτε ακόμη τις ακόλουθες διαφάνειες: Εισαγωγή στη Θεωρία Γραφημάτων, και Βασικές Έννοιες της Θεωρίας Γραφημάτων: 1η, 2η, και 3η σειρά.
- Συμπληρωματικές σημειώσεις του Δ. Φωτάκη. Καλύπτουν μόνο ένα μέρος της ύλης του μαθήματος.
- Εξαιρετικές σημειώσεις του Jeff Erickson σε δυναμικό προγραμματισμό (με πολλά παραδείγματα και πολλές ασκήσεις).
- Ένα ενδιαφέρον άρθρο από τον Bernard Chazelle: The Algorithm: Idiom of Modern Science.
- Ένα ενδιαφέρον άρθρο από τον Jeff Ullman σχετικά με την θεωρητική και την πειραματική αξιολόγηση των αλγορίθμων: Experiments as Research Validation – Have We Gone too Far?
- Ένα review από τους Andrew Goldberg και Robert Tarjan των γνωστών αποδοτικών αλγόριθμων για το πρόβλημα της Μέγιστης Ροής. Το review είναι εξαιρετικά ενδιαφέρον, το ίδιο και το video για τη σημασία και τις εφαρμογές του προβλήματος.
Προτεινόμενες Ασκήσεις (με τις λύσεις τους) και Παραδείγματα
- 1η σειρά: Ασυμπτωτικός συμβολισμός, αναδρομικές σχέσεις, ταξινόμηση.
- 2η σειρά: Άπληστοι αλγόριθμοι, δυναμικός προγραμματισμός.
- 3η σειρά: Αλγόριθμοι γραφημάτων, Ελάχιστο Συνδετικό Δέντρο.
- 4η σειρά: Συντομότερα Μονοπάτια, Μέγιστη Ροή, Αναγωγές.
- 5η σειρά: Παραδείγματα αναγωγών (διαφάνειες).
Ασκήσεις
Γραπτές Ασκήσεις
Εκφώνηση | Ημερομηνία Παράδοσης | Σχέδιο Λύσεων |
---|---|---|
Πρώτη σειρά | 31/10/2016 |
|
Δεύτερη σειρά | 28/11/2016 |
|
Τρίτη σειρά | 23/12/2016 |
Διαφάνειες
|
Τέταρτη σειρά | 19/2/2017 |
Προγραμματιστικές Ασκήσεις
Εκφώνηση | Συμπληρωματικά Αρχεία | Ημερομηνία Παράδοσης |
---|---|---|
Πρώτη σειρά | 11/11/2016 |
|
Δεύτερη σειρά | 8/12/2016 |
|
Τρίτη σειρά | 12/1/2017 |
|
Τέταρτη σειρά | 16/3/2017 |
Παρατηρήσεις
- Οι προγραμματιστικές ασκήσεις υποβάλλονται (source code) στον grader, και αξιολογούνται ηλεκτρονικά. Η προθεσμία υποβολής λήγει τα μεσάνυχτα της ημέρας παράδοσης. Για την υποβολή, θα χρησιμοποιήσετε τα login name και password που έχετε για το moodle του μαθήματος. Τα προγράμματά σας πρέπει να είναι σε C/C++, να διαβάζουν την είσοδο από το standard input, και να τυπώνουν την έξοδο στο standard output. Μια υποβολή θεωρείται επιτυχής (και συνεχίζει στο στάδιο της αξιολόγησης) αν "περάσει" επιτυχώς τα επιλεγμένα test cases για το αντίστοιχο ερώτημα. Η αξιολόγηση γίνεται με αντίστοιχα (κοινά για όλους, αλλά διαφορετικά από αυτά που ελέγχονται κατά την υποβολή) test cases, μετά την λήξη της προθεσμίας. Με κάθε άσκηση, θα δίνεται και ένας αριθμός test cases (με τις απαντήσεις τους), που μπορείτε να χρησιμοποιήσετε για προκαταρκτικό έλεγχο των λύσεων σας.
- Στις γραπτές ασκήσεις να γράφετε ονοματεπώνυμο και αριθμό μητρώου. Είτε τις παραδίδετε στους βοηθούς διδασκαλίας, κατά προτίμηση στο μάθημα της Δευτέρας, είτε τις αναρτάτε στο moodle. Η προθεσμία λήγει στις 23:59 της ημέρας παράδοσης. Εάν δοθεί παράταση θα ανακοινωθεί σε αυτή τη σελίδα και στο moodle.
- Δεν γίνεται δεκτή η παράδοση ασκήσεων με e-mail.
- Συνεργασία επιτρέπεται και μάλιστα ενθαρρύνεται (εάν γίνεται σωστά), αλλά τελικά κάθε φοιτητής πρέπει να διατυπώσει μόνος του τη λύση. Πανομοιότυπες διατυπώσεις θα εκλαμβάνονται ως αντιγραφή και δεν θα προσμετράται ο βαθμός τους, ενώ πιθανόν να υπάρξουν συνέπειες για όλες τις σειρές ασκήσεων.
- Για απορίες πάνω στις ασκήσεις και στη θεωρία μπορείτε να έρχεστε στο CoReLab (κτ. ΗΜΜΥ 1.1.3) στις ώρες γραφείου.