Δομές Δεδομένων (Φθινόπωρο 2007)

Περιγραφή

Θα παρουσιάσουμε, θα αναλύσουμε, και θα υλοποιήσουμε Δομές Δεδομένων που επιλύουν αποδοτικά (είτε αυτούσιες είτε με μικρές τροποποιήσεις) τα περισσότερα και σημαντικότερα επιμέρους προβλήματα που εμφανίζονται σε σύνθετες προγραμματιστικές εργασίες. Ο σκοπός είναι να γνωρίζουμε και να μπορούμε να εφαρμόσουμε την καταλληλότερη λύση σε κάθε σημαντικό επιμέρους πρόβλημα, όπου καταλληλότερη είναι η λύση που αξιοποιεί με τον πλέον αποδοτικό τρόπο τους υπολογιστικούς πόρους (χρόνος, μνήμη, επικοινωνία, κλπ.) που διαθέτουμε. Εκτός από την περιγραφή και την υλοποίηση, θα εστιάσουμε στη θεωρητική τεκμηρίωση κάθε δομής. Η θεωρητική τεκμηρίωση συνίσταται στην απόδειξη ορθότητας (λύνει όντως η δομή το πρόβλημα για το οποίο σχεδιάστηκε;) και στην ανάλυση (προσδιορισμός των υπολογιστικών πόρων που απαιτεί η συγκεκριμένη δομή για το συγκεκριμένο πρόβλημα). Έτσι μπορούμε να γνωρίζουμε ποια δομή είναι καταλληλότερη για κάθε πρόβλημα. Εκτός από τα παραπάνω, βασικούς εκπαιδευτικούς στόχους του μαθήματος αποτελούν:

Διδάσκοντες

Ύλη

Το μάθημα θα βασιστεί σε σημαντικό βαθμό στο βιβλίο «Δομές Δεδομένων, Αλγόριθμοι, και Εφαρμογές στη C++» του Sartaj Sahni (μετάφραση των Γιάννη Θεοδωρίδη και Γιάννη Μανωλόπουλου). Όπου οι παραδόσεις διαφοροποιούνται σημαντικά από το βιβλίο, θα υπάρξουν συμπληρωματικές σημειώσεις από τον διδάσκοντα. Ένα σημαντικό μέρος της δουλειάς θα γίνει στο εργαστήριο όπου θα υλοποιήσουμε και θα πειραματιστούμε με τις σημαντικότερες δομές δεδομένων που θα συναντήσουμε στο μάθημα.

Στην ύλη για τις εξετάσεις περιλαμβάνονται όλες οι ενότητες από το βιβλίο του Sahni που αναγράφονται δίπλα στις διαλέξεις και οι σημειώσεις του διδάσκοντα. Κάποια τμήματα της ύλης καλύπτονται μόνο από το βιβλίο και κάποια άλλα μόνο από τις σημειώσεις.

Επικοινωνία

Προσπαθήστε να παρακολουθείτε τις παραδόσεις και να συμμετέχετε ενεργά στο εργαστήριο. Σε μαθήματα σαν και αυτό, η περιστασιακή μελέτη δεν μπορεί να υποκαταστήσει την παρακολούθηση. Αν έχετε απορίες ή αντιμετωπίζετε δυσκολίες στη μελέτη σας, μη διστάσετε συζητήσετε με τους διδάσκοντες.  

Σημειώσεις - Ασκήσεις

Δομή Μαθήματος - Διαλέξεις - Οδηγός Μελέτης

Εργαστηριακές Ασκήσεις

Θα ανακοινωθούν οκτώ ατομικές, υποχρεωτικές προγραμματιστικές εργασίες. Σε κάθε εργασία θα υλοποιήσετε και θα πειραματιστείτε με μερικούς από τους αλγορίθμους που θα συζητήσουμε στο μάθημα. Οι υλοποιήσεις θα είναι σε γλώσσα C ή C++. Η παράδοση κάθε εργασίας μπορεί να πραγματοποιηθεί ΜΟΝΟ κατά την διάρκεια του εργαστηριακού μαθήματος (εργαστήριο Ηλέκτρα, κτίριο Λυμπέρη) του τμήματος στο οποίο ανήκετε (1ο Tμήμα κάθε Τετάρτη 11:00-13:00, 2ο Τμήμα κάθε Τετάρτη 13:00-15:00), την προκαθορισμένη ημερομηνία παράδοσης (βλέπε πίνακα εργασιών). Μετά τη λήξη του προγραμματισμένου εργαστηριακού μαθήματος της συγκεκριμένης ημερομηνίας ΔΕΝ θα γίνεται δεκτή καμία εργασία. Στο 1ο Τμήμα ανήκουν οι φοιτητές που το επώνυμο τους ξεκινάει από Α μέχρι και Λ, ενώ στο 2ο Τμήμα εκείνοι που το επώνυμο τους ξεκινάει από Μ μέχρι και Ω.

Βαθμολογία

Ο βαθμός του εργαστηρίου (ΒΕργαστ) θα συνεισφέρει το 30% του τελικού βαθμού και πρέπει κάποιος να έχει ΒΕργαστ >= 5.0 για να περάσει το μάθημα. Επίσης, θα υπάρξει μια υποχρεωτική ενδιάμεση εξέταση (πρόοδος) την εβδομάδα 10-14 Δεκεμβρίου που θα συνεισφέρει το 20% του τελικού βαθμού (ΒΠροοδ). Ο βαθμός της τελικής εξέτασης (ΒΕξετ) θα συνεισφέρει το 50% του τελικού βαθμού και πρέπει κάποιος να έχει ΒΕξετ >= 5.0 για να περάσει το μάθημα. Ο τελικός βαθμός του μαθήματος θα είναι:

Tελικός Bαθμός = 0.3*BEργαστ + 0.2*BΠροοδ + 0.5*BEξετ

και φυσικά πρέπει ο Τελικός Βαθμός να είναι τουλάχιστον 5.0 ώστε το μάθημα να θεωρηθεί ότι εξετάστηκε με επιτυχία.

Βιβλιογραφία

Σχετικές Ιστοσελίδες