Αλγόριθμοι και Δομές Δεδομένων

Κωδικός Μαθήματος:

EEE.5.1

Εξάμηνο:

Ε' Εξάμηνο

Κατηγορία:

ΜΕΥ

Ώρες:

4

Μονάδες ECTS:

5


ΜΑΘΗΣΙΑΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ

Έχοντας ολοκληρώσει επιτυχώς το μάθημα, οι φοιτητές/ήτριες αναμένεται να είναι σε θέση να:

  • Κατανοούν αλγορίθμους κωδικοποιημένους στη γλώσσα C για την επίλυση προβλημάτων (i) απλών μαθηματικών υπολογισμών, (ii) πρώτων αριθμών και ανάλυσης σε γινόμενο πρώτων παραγόντων, (iii) ταξινόμησης πινάκων.
  • Τροποποιούν δεδομένους αλγορίθμους για να αυξήσουν την απόδοσή τους.
  • Υπολογίζουν την πολυπλοκότητα δεδομένου αλγορίθμου.
  • Κατανοούν, εξηγούν και αναπαράγουν αναδρομικούς αλγορίθμους για απλά προβλήματα αναδρομής.
  • Μετατρέπουν επαναληπτικούς σε αναδρομικούς αλγορίθμους και υπολογίζουν την πολυπλοκότητά τους.
  • Αναγνωρίζουν, περιγράφουν και διαφοροποιούν μεταξύ τους τις κυριότερες δομές δεδομένων (πίνακες, γραμμικές λίστες, δένδρα, γράφους).
  •  Καταλαβαίνουν, εξηγούν και προγραμματίζουν τις βασικές λειτουργίες για καθεμία από αυτές τις δομές δεδομένων (π.χ., εισαγωγή στοιχείου, διαγραφή στοιχείου, διάσχιση δομής, ταξινόμηση με βάση κλειδί, κλπ.)
  • Εκτιμούν τις απαιτήσεις σε χώρο μνήμης Η/Υ των διαφόρων εναλλακτικών δομών δεδομένων που μπορεί να αξιοποιήσει ένας δεδομένος αλγόριθμος.
  • Επιλέγουν την κατάλληλη δομή δεδομένων, μεταξύ των διαθέσιμων εναλλακτικών, και κωδικοποιούν τις βασικές της λειτουργίες σε γλώσσα C. Δικαιολογούν την επιλογή τους με βάση τον απαιτούμενο χρόνο εκτέλεσης και χώρο αποθήκευσης στη μνήμη του Η/Υ.

 

Γενικές Ικανότητες

  • Αναζήτηση, ανάλυση και σύνθεση δεδομένων και πληροφοριών, με τη χρήση και των απαραίτητων τεχνολογιών
  • Αυτόνομη Εργασία
  • Λήψη αποφάσεων
  • Άσκηση κριτικής και αυτοκριτικής
  • Προαγωγή της ελεύθερης, δημιουργικής και επαγωγικής σκέψης

 

ΠΕΡΙΕΧΟΜΕΝΟ ΜΑΘΗΜΑΤΟΣ

Ο στόχος του μαθήματος είναι να διδάξει βασικές γνώσεις αλγορίθμων και δομών δεδομένων καθώς και την εφαρμοσμένη χρήση τους για την επίλυση προβλημάτων μέσω κωδικοποίησής τους στη γλώσσα προγραμματισμού C. Επιμέρους στόχοι του μαθήματος είναι να εξοικειώσει τους/τις φοιτητές/ήτριες με τις έννοιες των δομών δεδομένων και της οργάνωσης των δεδομένων στη μνήμη του Η/Υ, το ρόλο των δομών δεδομένων στη σχεδίαση και κωδικοποίηση αλγορίθμων καθώς και να τους εισάγει στα θέματα των επιδόσεων και της πολυπλοκότητας των αλγορίθμων και της κλιμάκωσής τους για μεγαλύτερα σύνολα δεδομένων.

Τα περιεχόμενα του μαθήματος εν συντομία είναι τα εξής:

  1. Αλγοριθμική προσέγγιση στην επίλυση προβλημάτων, εισάγοντας προβλήματα
    1. μαθηματικών υπολογισμών,
    2. πρώτων αριθμών,
    3. ταξινόμησης.
  2. Πολυπλοκότητα
  3. Επαναληπτικοί και αναδρομικοί αλγόριθμοι
  4. Στατικές και δυναμικές δομές δεδομένων
  5. ραμμικές δομές δεδομένων (πίνακες, λίστες, στίβες, ουρές, σωροί)
  6. Ιεραρχικές δομές δεδομένων (δένδρα, δένδρα αναζήτησης, ισορροπημένα δένδρα)
  7. Γράφοι
  8. Κατακερματισμός
  9. Ψηφιακά Ευρετήρια

 

ΑΞΙΟΛΟΓΗΣΗ ΦΟΙΤΗΤΩΝ

Ι. Γραπτή πρόοδος (προαιρετική, 50% ή 30% του τελικού βαθμού):
-Ερωτήσεις πολλαπλής επιλογής
-Ερωτήσεις σύντομης απάντησης
-Ερωτήσεις επίλυσης προβλήματος και κωδικοποίησης της λύσης σε γλώσσα C
II. Εργασίες για το σπίτι (προαιρετικές, 20% του τελικού βαθμού):
-Ερωτήσεις επίλυσης προβλήματος και κωδικοποίησης της λύσης σε γλώσσα C
IΙΙ. Τελική γραπτή εξέταση (υποχρεωτική, 100% ή 50% του τελικού βαθμού):
-Ερωτήσεις πολλαπλής επιλογής
-Ερωτήσεις σύντομης απάντησης
-Ερωτήσεις επίλυσης προβλήματος και κωδικοποίησης της λύσης σε γλώσσα C

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

 

ΣΥΝΙΣΤΩΜΕΝΗ ΒΙΒΛΙΟΓΡΑΦΙΑ

  1. Fundamentals of Data Structures in C, by E. Horowitz, S. Sahni & S. Anderson-Freed, 2008
  2. Data Structures Using C and C++, by Y. Langsam, M. Augenstein & A. Tenenbaum, 2013
  3. Algorithms Illuminated (Part 2): Graph Algorithms and Data Structures (vol 2), by Tim Roughgarden, 2018
  4. The Intuitive Guide to Data Structures and Algorithms, by Parker Phinney, 2018
  5. Advances in Computational Algorithms and Data Analysis, by Sio-Iong Ao, 2009
  6. C and Data Structures by Practice, by Ramesh Vasappanavara, 2007
  7. Algorithms: Parallel and Sequential, by Umut A. Acar, 2019
  8. Data Structures & Algorithms in Swift, by Kelvin Lau & Vincent Ngo, 2018
  9. C++ Data Structures and Algorithms, by Wisnu Anggoro, 2018
  10. Compact Data Structures: A Practical Approach, by Gonzalo Navarro, 2016
  11. Genetic Algorithms and Machine Learning for Programmers: Create AI Models and Evolve Solutions, by Frances Buontempo, 2019
  12. Data Structures and Algorithms Made Easy: Data Structures and Algorithmic Puzzles, 5th Edition, by Narasimha Karumanchi, 2016
  13. Data Structures, Algorithms, And Applications In C++, by Sartaj Sahni, 2004
  14. Data structures and algorithms in C++, by Michael T Goodrich, Roberto Tamassia & David M Mount, 2011
  15. Data Structures Using C, by Reema Thareja, 2014
  16. Basic Matrix Algebra with Algorithms and Applications, by Robert A. Liebler, 2003
  17. Encyclopedia of Algorithms, by Ming-Yang Kao, 2016
  18. Machine Learning Algorithms: Popular algorithms for data science and machine learning, 2nd Edition, by Giuseppe Bonaccorso, 2018
  19. Data Structures and Algorithms in Python, by Michael T. Goodrich, Roberto Tamassia & Michael H. Goldwasser, 2013
  20. Probabilistic Data Structures and Algorithms for Big Data Applications, by Andrii Gakhov, 2019