Γενικά

K08 - Εαρινό εξάμηνο 2024-25 - Τμήμα περιττών ΑΜ

Καθηγητής

Βαθμολογία
  • Εργαστήριο: 12%
  • Εργασίες: 48%
    • Οι βαθμοί σε εργαστήριο και εργασίες ισχύουν για την εξεταστική του Σεπτεμβρίου της ίδιας χρονιάς, αλλά όχι για τις επόμενες χρονίες.
    • Προφορική εξέταση για εργαστήριο & εργασίες στο τέλος.
  • Τελική εξέταση: 40%
    • Απαιτείται βάση (50%) για να περάσετε το μάθημα.
Forum για συζητήσεις και ανακοινώσεις (piazza)
  • Είσοδος (εγγραφή με το @di.uoa.gr email σας αυστηρά)
  • Η εγγραφή είναι υποχρεωτική, όλες οι ανακοινώσεις θα γίνονται στο piazza!

Διαλέξεις

Πρόγραμμα
Εισαγωγή & τεχνικές αποδοτικού προγραμματισμού
Εισαγωγή    
Modules, Makefiles, Editors, Git    
Recap: memory allocation, pointers, structs, typedefs    
Code style, Tests, Debugging    
Αφηρημένοι Τύποι Δεδομένων και εφαρμογές
Εισαγωγή στους Αφηρημένους Τύπους Δεδομένων    
Vectors, Λίστες, Στοίβες, Ουρές    
Ουρές προτεραιότητας, Maps, Σύνολα    
Φροντιστήριο    
Δομές δεδομένων
Εισαγωγή την υλοποίηση ΑΤΔ, Συνδεδεμένες λίστες    
Ανάλυση αλγορίθμων, πολυπλοκότητα    
Δυναμικοί Πίνακες    
Εξαρτημένες Δομές    
Δέντρα, σωροί    
Δυαδικά δέντρα αναζήτησης    
AVL δέντρα    
Δέντρα αναζήτησης m δρόμων, δέντρα 2-3, δέντρα 2-3-4    
B-δέντρα    
Κατακερματισμός    
Γράφοι    
Γράφοι με βάρη    
Visualizations
  • Σε διαφάνειες που περιέχουν visualizations, μπορείτε να τα εκτελείτε βήμα-βήμα πατώντας space
  • Interactive εκδόσεις υπάρχουν εδώ (και για πολλές ακόμα δομές)

Εργαστήρια

Πρόγραμμα
  • Ένα εισαγωγικό εργαστήριο, χωρίς βαθμολόγηση.
  • 5 εργαστήρια με ασκήσεις που πρέπει να λύσετε και να παραδώσετε μέσω github.
    • Οι ασκήσεις μπορούν να λυθούν μέσα στο 2ωρο του εργαστηρίου, αλλά μπορείτε να τις παραδώσετε και αργότερα, μέχρι και το τέλος της επόμενη εβδομάδας από το εργαστήριο (ακριβείς ημερομηνίες στις εκφωνήσεις των εργαστηρίων).
    • Οι παρουσίες είναι υποχρεωτικές μόνο για τους πρωτοετείς, αλλά όλοι πρέπει να υποβάλλουν τις ασκήσεις μέσα στην προθεσμία.
  • Πέμπτη & Παρασκευή, 9:00-11:00 & 11:00-13:00 ανά 2 εβδομάδες (8 τμήματα).
Θέματα Εργαστηρίων

Εργασίες

Διαβάσετε προσεκτικά τις οδηγίες (κοινές για όλες τις εργασίες).

Κώδικας

Εργαλεία

Στο μάθημα χρησιμοποιείται ο editor VS Code (χωρίς να απαγορεύεται η χρήση άλλων editors), καθώς και τα εργαλεία gcc, make, git και valgrind.

Sample Project

Παράδειγμα δομής ενός C project, για χρήση στις πρώτες 2 ενότητες του μαθήματος. Επιδεικνύει modules, Makefiles και tests, καθώς και τη χρήση των ADTs που διδάσκονται στο μάθημα.

Αντιγράφεται αυτόματα μέσα στο Documents directory του υπολογιστή σας από το script εγκατάστασης (εναλλακτικά κάντε git clone). Για να το χρησιμοποιήσετε:

  • Aνοίξτε το sample-project directory από το VS Code : File / Open Folder / <sample-project>
  • Kάντε compile με Ctrl-Shift-B (διαφάνειες) ή τρέχοντας make στο αντίστοιχο directory.

Σημείωση: το script εγκατάστασης δημιουργεί και ένα δεύτερο directory c-programs, αυτό δεν χρησιμοποιείται στο μάθημα (αφορά την Εισαγωγή στον Προγραμματισμό).

Κώδικας διαλέξεων

Ο βασικός κώδικας που χρησιμοποιείται στις διαλέξεις της τρίτης ενότητας του μαθήματος. Περιέχει υλοποιήσεις από όλους τους ADTs που διδάσκονται στο μάθημα.

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

Η βασική ύλη του μαθήματος περιλαμβάνεται στις διαφάνειες των διαλέξεων και τον κώδικα που διδάσκεται στο μάθημα. Τα παρακάτω βασικά συγγράμματα χρησιμοποιούνται βοηθητικά στο μάθημα.

Βασικά συγγράμματα

  • Robert Sedgewick: Αλγόριθμοι σε C, Εκδόσεις Κλειδάριθμος, 2006. [Εύδοξος]

  • Thomas A. Standish: Data Structures, Algorithms and Software Principles in C, Addison-Wesley. 1995.

Πλήρης λίστα προτεινόμενων συγγραμμάτων στην υπηρεσία Εύδοξος

  • Robert Sedgewick: Αλγόριθμοι σε C, Εκδόσεις Κλειδάριθμος, 2006. [Εύδοξος] (προτεινόμενο)

  • Michael T. Goodrich, Roberto Tamassia: Δομές Δεδομένων & Αλγόριθμοι σε JAVA, Εκδόσεις Δίαυλος, 2013. [Εύδοξος]

  • Bruno R. Preiss: Δομές Δεδομένων και Αλγόριθμοι με Αντικειμενοστρεφή Σχεδιαστικά Μορφήματα στη C++, Εκδόσεις Πεδίο, 2016. [Εύδοξος]

  • Ν. Μισυρλής: Δομές Δεδομένων με C. [Εύδοξος]

Άλλα βιβλία διαθέσιμα online

  • Kyle Loudon, Mastering Algorithms with C, O'Reilly, 1999. [pdf]

  • Clifford A. Shaffer: Data Structures and Algorithm Analysis, Dover, 2013. [pdf]

Team

Καθηγητής

Υπεύθυνος εργαστηρίων

  • Σαράντης Πασκαλής (paskalis@di….)

Μεταπτυχιακοί συνεργάτες

  • Κώστας Παπαγεωργίου
  • Γιάννης Παπαγιαννούλης
  • Δημήτρης Χριστοφής

Προπτυχιακοί συνεργάτες

  • Χρήστος Βασιλειάδης
  • Γιάννης Βογιατζής
  • Δημήτρης Γκρίτζαλης
  • Νίκος Δάλκος
  • Δημοσθένης Θεοδοσίου
  • Παναγιώτης Θηβαίος
  • Πέτρος Κατηφόρης
  • Αθηνά Κατσάνου
  • Αριάδνη Κουκουδάκη
  • Άγγελος Κοραλής
  • Στάθης Κωνσταντίνου
  • Κωνσταντίνος Λεοντιάδης
  • Μάριος Μογγογιάννης
  • Ματίνα Ναδάλη
  • Αλέξανδρος Ορλάνδος
  • Αχιλλέας-Μάριος Πετροπουλάκης
  • Δημήτρης Στέφανος Πορίχης
  • Γιώργος Σιαφαρίκας
  • Δημήτρης Σκόνδρας Μέξης
  • Αλέξανδρος Σταυρινουδάκης

Προηγούμενα Έτη

Διαλέξεις και εργασίες περασμένων ετών