Περιγραφή
Θα παρουσιάσουμε, θα
αναλύσουμε, και θα υλοποιήσουμε Δομές Δεδομένων που επιλύουν αποδοτικά (είτε
αυτούσιες είτε με μικρές τροποποιήσεις) τα περισσότερα και σημαντικότερα
επιμέρους προβλήματα που εμφανίζονται σε σύνθετες προγραμματιστικές εργασίες. Ο
σκοπός είναι να γνωρίζουμε και να μπορούμε να εφαρμόσουμε την καταλληλότερη λύση
σε κάθε σημαντικό επιμέρους πρόβλημα, όπου καταλληλότερη είναι η λύση που
αξιοποιεί με τον πλέον αποδοτικό τρόπο τους υπολογιστικούς πόρους (χρόνος,
μνήμη, επικοινωνία, κλπ.) που διαθέτουμε. Εκτός από την περιγραφή και την
υλοποίηση, θα εστιάσουμε στη θεωρητική τεκμηρίωση κάθε δομής. Η θεωρητική
τεκμηρίωση συνίσταται στην απόδειξη ορθότητας (λύνει όντως η δομή το πρόβλημα
για το οποίο σχεδιάστηκε;) και στην ανάλυση (προσδιορισμός των υπολογιστικών
πόρων που απαιτεί η συγκεκριμένη δομή για το συγκεκριμένο πρόβλημα). Έτσι
μπορούμε να γνωρίζουμε ποια δομή είναι καταλληλότερη για κάθε πρόβλημα. Εκτός
από τα παραπάνω, βασικούς εκπαιδευτικούς στόχους του μαθήματος αποτελούν:
Η απόκτηση συνολικής
εικόνας για τις αρχές λειτουργίας και τις βασικές ιδιότητες των σημαντικότερων
κατηγοριών δομών δεδομένων (π.χ. πίνακες, λίστες, δέντρα, ουρές
προτεραιότητας, δυαδικά δέντρα αναζήτησης). Αυτό οδηγεί σε βέλτιστες επιλογές
στη φάση της ανάλυσης και του σχεδιασμού σύνθετων προγραμματιστικών
εργασιών. Η καλλιέργεια της
αναλυτικής σκέψης και της ικανότητας εμβάθυνσης. Αυτά επιτρέπουν την έγκαιρη
και σωστή διάγνωση και αντιμετώπιση προβλημάτων που συχνά ανακύπτουν στη φάση
του σχεδιασμού σύνθετων προγραμματιστικών εργασιών. Διδάσκοντες
Δημήτρης Φωτάκης, Επίκουρος Καθηγητής - Θεωρία
Ειρήνη Καρύμπαλη, Μεταδιδακτορική Ερευνήτρια - Εργαστήριο
Ύλη
Το μάθημα θα βασιστεί σε σημαντικό βαθμό στο βιβλίο «Δομές Δεδομένων, Αλγόριθμοι, και Εφαρμογές στη C++» του Sartaj Sahni (μετάφραση των Γιάννη Θεοδωρίδη και Γιάννη Μανωλόπουλου). Όπου οι παραδόσεις διαφοροποιούνται σημαντικά από το βιβλίο, θα υπάρξουν συμπληρωματικές σημειώσεις από τον διδάσκοντα. Ένα σημαντικό μέρος της δουλειάς θα γίνει στο εργαστήριο όπου θα υλοποιήσουμε και θα πειραματιστούμε με τις σημαντικότερες δομές δεδομένων που θα συναντήσουμε στο μάθημα.
Στην ύλη για τις εξετάσεις περιλαμβάνονται όλες οι ενότητες από το βιβλίο του Sahni που αναγράφονται δίπλα στις διαλέξεις και οι σημειώσεις του διδάσκοντα. Κάποια τμήματα της ύλης καλύπτονται μόνο από το βιβλίο και κάποια άλλα μόνο από τις σημειώσεις.
Επικοινωνία
Προσπαθήστε να παρακολουθείτε τις παραδόσεις και να συμμετέχετε ενεργά στο εργαστήριο. Σε μαθήματα σαν και αυτό, η περιστασιακή μελέτη δεν μπορεί να υποκαταστήσει την παρακολούθηση. Αν έχετε απορίες ή αντιμετωπίζετε δυσκολίες στη μελέτη σας, μη διστάσετε συζητήσετε με τους διδάσκοντες.
Δ. Φωτάκης. Ώρες γραφείου: Τετάρτη 12-14 και Πέμπτη 1
Σημειώσεις - Ασκήσεις
Δομή Μαθήματος - Διαλέξεις - Οδηγός Μελέτης
Διαλέξεις 17-18/10. Εισαγωγή (ενότητες στο βιβλίο του Sahni: 2.1, 2.2, 2.3, και 2.6).
Διάλεξη 24/10. Ασυμπτωτική ανάλυση και ασυμπτωτικός συμβολισμός (ενότητες 2.4 και 2.5).
Διάλεξη 25/10. Γραμμική Λίστα: Υλοποίηση με διασυνδεδεμένη λίστα, κυκλική λίστα, διπλοσυνδεδεμένη λίστα, και πίνακα (ενότητες 3.1, 3.2, 3.3, 3.4, και 3.7).
Διάλεξη 31/10. Πίνακες: πράξεις με πίνακες, αποδοτική αποθήκευση ειδικών μορφών και αραιών πινάκων (Κεφ. 4, εκτός από 4.1.4, 4.1.5, και 4.2.2).
Διάλεξη 1/11. Ουρές: υλοποίηση με πίνακα και με διασυνδεδεμένη λίστα (ενότητες 6.1, 6.2, και 6.3) .
Διάλεξη 1/11. Στοίβες: υλοποίηση με πίνακα και με διασυνδεδεμένη λίστα (ενότητες 5.1, 5.2, 5.3, και 5.4).
Διαλέξεις 7-8/11. Ουρές προτεραιότητας: Ορισμός ΑΤΔ, υλοποίηση με ΑΤΔ γραμμικής λίστας, ιεραρχικές δομές, βασικές ιδιότητες δυαδικών δέντρων, η δομή του σωρού (ενότητες 8.1, 8.2, 8.3, 9.1 και 9.2).
Διάλεξη 14/11. Αλγόριθμοι ταξινόμησης: τεχνικές ταξινόμησης, στοιχειώδεις αλγόριθμοι (bubble-sort, insertion-sort, selection-sort), ταξινόμηση σωρού (ενότητες 2.3.2 και 9.5.1).
Διάλεξη 15/11.
Αλγόριθμοι διαίρει-και-βασίλευε: Merge-Sort
(ενότητα 14.1 - μέχρι και παράδειγμα
14.2, και ενότητα 14.2.2).
Επίλυση
αναδρομικών εξισώσεων, ανάλυση merge-sort (ενότητα 14.3)
Διάλεξη 21/11. Επίλυση αναδρομικών εξισώσεων (σημειώσεις για επίλυση αναδρομικών σχέσεων).
Διαλέξεις 21-22/11.
Quicksort (ενότητα 14.2.3).
Κάτω φράγμα στο χρόνο εκτέλεσης
συγκριτικών αλγόριθμων ταξινόμησης (ενότητα 14.4).
Διάλεξη 28/11. Αλγόριθμοι αναζήτησης (αντίστοιχο κεφάλαιο σημειώσεων).
Διάλεξη 29/11. Το πρόβλημα της επιλογής (ενότητα 14.2.4).
Διάλεξη 6/12. Δυαδικά δέντρα αναζήτησης (ενότητα 11.1 και αντίστοιχο κεφάλαιο σημειώσεων).
Διάλεξη 9/1. Ισορροπημένα δυαδικά δέντρα αναζήτησης (βλ. αντίστοιχο κεφάλαιο σημειώσεων για Δέντρα Αναζήτησης).
Διάλεξη 10/1. AVL δέντρα (ενότητα 11.2)
Διαλέξεις 16-17/1. Κόκκινα-Μαύρα δέντρα (ενότητα 11.3) και ασκήσεις επανάληψης στα δυαδικά δέντρα αναζήτησης.
Διαλέξεις 23-24/1. (a, b)-δέντρα (ενότητα 11.4) και επανάληψη.
Εργαστηριακές
ΑσκήσειςΘα ανακοινωθούν οκτώ ατομικές, υποχρεωτικές προγραμματιστικές εργασίες. Σε κάθε εργασία θα υλοποιήσετε και θα πειραματιστείτε με μερικούς από τους αλγορίθμους που θα συζητήσουμε στο μάθημα. Οι υλοποιήσεις θα είναι σε γλώσσα C ή C++. Η παράδοση κάθε εργασίας μπορεί να πραγματοποιηθεί ΜΟΝΟ κατά την διάρκεια του εργαστηριακού μαθήματος (εργαστήριο Ηλέκτρα, κτίριο Λυμπέρη) του τμήματος στο οποίο ανήκετε (1ο Tμήμα κάθε Τετάρτη 11:00-13:00, 2ο Τμήμα κάθε Τετάρτη 13:00-15:00), την προκαθορισμένη ημερομηνία παράδοσης (βλέπε πίνακα εργασιών). Μετά τη λήξη του προγραμματισμένου εργαστηριακού μαθήματος της συγκεκριμένης ημερομηνίας ΔΕΝ θα γίνεται δεκτή καμία εργασία. Στο 1ο Τμήμα ανήκουν οι φοιτητές που το επώνυμο τους ξεκινάει από Α μέχρι και Λ, ενώ στο 2ο Τμήμα εκείνοι που το επώνυμο τους ξεκινάει από Μ μέχρι και Ω.
Εργαστηριακή Άσκηση 1. Ημερομηνία παράδοσης: 24/10/200
Εργαστηριακή Άσκηση 2. Ημερομηνία παράδοσης: 7/11/2007.
Εργαστηριακή Άσκηση 3. Ημερομηνία παράδοσης: 14/11/2007.
Εργαστηριακή Άσκηση 3. Ημερομηνία παράδοσης: 14/11/2007.
Εργαστηριακή Άσκηση 4. Ημερομηνία παράδοσης: 21/11/2007.
Εργαστηριακή Άσκηση 5. Ημερομηνία παράδοσης: 28/11/2007.
Εργαστηριακή Άσκηση 6. Ημερομηνία παράδοσης: 5/11/2007.
Εργαστηριακή Άσκηση 7. Ημερομηνία παράδοσης: 12/11/2007.
Εργαστηριακή Άσκηση 8. Ημερομηνία παράδοσης: 9/1/2008.
1ο Επαναληπτικό Εργαστήριο. Ημερομηνία παράδοσης: 16/1/2008.
2ο Επαναληπτικό Εργαστήριο. Ημερομηνία παράδοσης: 23/1/2008.
Βαθμολογία
Ο βαθμός του εργαστηρίου (ΒΕργαστ) θα συνεισφέρει το 30% του τελικού βαθμού και πρέπει κάποιος να έχει ΒΕργαστ >= 5.0 για να περάσει το μάθημα. Επίσης, θα υπάρξει μια υποχρεωτική ενδιάμεση εξέταση (πρόοδος) την εβδομάδα 10-14 Δεκεμβρίου που θα συνεισφέρει το 20% του τελικού βαθμού (ΒΠροοδ). Ο βαθμός της τελικής εξέτασης (ΒΕξετ) θα συνεισφέρει το 50% του τελικού βαθμού και πρέπει κάποιος να έχει ΒΕξετ >= 5.0 για να περάσει το μάθημα. Ο τελικός βαθμός του μαθήματος θα είναι:Tελικός Bαθμός = 0.3*BEργαστ + 0.2*BΠροοδ + 0.5*BEξετ
και φυσικά πρέπει ο Τελικός Βαθμός να είναι τουλάχιστον 5.0 ώστε το μάθημα να θεωρηθεί ότι εξετάστηκε με επιτυχία.
Βιβλιογραφία
S. Sahni. Δομές Δεδομένων, Αλγόριθμοι και Εφαρμογές στην C++ .
Π. Μποζάνης. Αλγόριθμοι: Σχεδιασμός και Ανάλυση. Εκδόσεις Τζιόλα, Θεσσαλονίκη, 2003.
Γ.Φ. Γεωργακόπουλος. Δομές Δεδομένων , Έννοιες, Τεχνικές και Αλγόριθμοι. Πανεπιστημιακές Εκδόσεις Κρήτης ,
T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein. Introduction to Algorithms (2nd Edition). The MIT Press, 2003.
K. Mehlhorn. Data Structures and Algorithms. Springer Verlag, EATCS Monographs, 1984.
G. Brassard and P. Bratley. Algorithmics: Theory and Practice. Prentice-Hall, 1988.
Σχετικές Ιστοσελίδες
S. Sahni Data Structures, Algorithms and Applications in C++ Πηγαίος κώδικας των ασκήσεων του βιβλιου.
Ι. Μανωλόπουλος Ανάλυση Αλγορίθμων , Άνοιξη 2005.
Η. Κουτσουπιάς Αλγόριθμοι και πολυπλοκότητα, Χειμώνας 2004.
E. Demaine and S. Goldwasser. Introduction to Algorithms. MIT, Spring 2004.
K. Pruhs. Algorithms Courses on the WWW.
Αν σας αρέσουν τα μαθηματικά και θέλετε να γίνετε πλούσιοι, κοιτάξτε τη σελίδα του Clay Mathematics Institute.