ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Τµήµα Πληροφορικής Φθινοπωρινό Εξάµηνο

Σχετικά έγγραφα
Δοµές Δεδοµένων. ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Φθινοπωρινό Εξάµηνο Ευάγγελος Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Τµήµα Πληροφορικής Φθινοπωρινό Εξάµηνο

Δομές Δεδομένων (Data Structures)

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ GD2670

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ231: ομές εδομένων και Αλγόριθμοι

Σχεδίαση & Ανάλυση Αλγορίθμων

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

Δοµές Δεδοµένων. 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης. Βασίζεται στις διαφάνειες των R. Sedgewick K.

Δομημένος Προγραμματισμός ΙΙΙ - Java

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Αλγόριθμοι Ταξινόμησης Μέρος 4

Δομές Δεδομένων. Παύλος Εφραιμίδης

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Εισαγωγή Χειµερινό Εξάµηνο 2014

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων

Το µάθηµα Αντικείµενο-Περιεχόµενα µαθήµατος Τρόπος ιδασκαλίας Εργαστήριο Βιβλίο, Βιβλιογραφία On-line Υλικό 2

οµηµένος Προγραµµατισµός ΙΙΙ - Java Παύλος Εφραιµίδης οµηµένος Προγρ. ΙΙΙ - 1 Java Το Μάθηµα

οµηµένος Προγραµµατισµός ΙΙΙ - Java

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

Αλγόριθµοι και Πολυπλοκότητα

Βασικές Έννοιες Δοµών Δεδοµένων

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

Περιγραφή Μαθήματος ΠΕΡΙΓΡΑΦΗ ΜΑΘΗΜΑΤΟΣ. Γεώργιος Παπαϊωάννου ( )

Δομές Δεδομένων (Data Structures)

Το µάθηµα Ηλεκτρονική ηµοσίευση

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Εισαγωγή Χειμερινό Εξάμηνο Παναγιώτης Τσαπάρας

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Κεφάλαιο 1. Ε. Μαρκάκης Επικ. Καθηγητής

ΗΥ 252: Αντικειµενοστρεφής Προγραµµατισµός

Προγραμματισμός Υπολογιστών με C++

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Διαδικαστικά

Αλγόριθμοι και Πολυπλοκότητα

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Προγραμματισμός Χειμερινό Εξάμηνο 2014

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

Χειµερινό Εξάµηνο 2013

Αλγόριθμοι και Πολυπλοκότητα

Εξεταστική Περίοδος Φεβρουαρίου ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΤΕΛΙΚΗ ΕΞΕΤΑΣΗ

Κεφάλαιο 2. Η δοµή δεδοµένων Σωρός και η Ταξινόµηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.1, 12/05/2010

Προγραμματισμός. Εαρινό Εξάμηνο 2011

Αλγόριθμοι Ταξινόμησης Μέρος 1

Η εφαρµογή xsortlab. Οπτικός τρόπος ταξινόµησης

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

ΗΥ 252: Αντικειµενοστρεφής Προγραµµατισµός

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Αλγόριθμοι Ταξινόμησης Μέρος 3

ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΤΕΛΙΚΗ ΕΞΕΤΑΣΗ

ΠΡΟΧΩΡΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Χαρίδημος Κονδυλάκης Εισαγωγή

Εισαγωγή στον Προγ/μό Υπολογιστών. Διάλεξη 0

επιµέλεια Θοδωρής Πιερράτος

Αλγόριθμοι και Πολυπλοκότητα

Αξιοποίηση Η/Υ και Πληροφορικής στην Μηχανική

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Εισαγωγή Χειμερινό Εξάμηνο Νίκος Μαμουλής

Αλγόριθμοι και Πολυπλοκότητα

Κεφάλαιο 10 Ψηφιακά Λεξικά

Το εσωτερικό ενός Σ Β

Heapsort Using Multiple Heaps

Το µάθηµα Ψηφιακές Βιβλιοθήκες

σωστά ( είναι η

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

Αλγόριθμοι και Πολυπλοκότητα

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Quicksort Κεφάλαιο 7. Ε. Μαρκάκης Επίκουρος Καθηγητής

Άσκηση 3 (ανακοινώθηκε στις 14 Μαΐου 2018, προθεσμία παράδοσης: 8 Ιουνίου 2018, 12 τα μεσάνυχτα).

Αλγόριθμοι. Χρυσόστομος Στύλιος. Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής. Δομές Δεδομένων & Αλγόριθμοι 1

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

ΑΛΓΟΡΙΘΜΟΙ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΠΟΛΥΠΛΟΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗ

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

Εισαγωγή. Γενική Εικόνα του Μαθήµατος. Το εσωτερικό ενός Σ Β. Εισαγωγή. Εισαγωγή Σ Β Σ Β. Αρχεία ευρετηρίου Κατάλογος συστήµατος Αρχεία δεδοµένων

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 1. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Στοίβες και Ουρές. Οικονοµικό Πανεπιστήµιο Αθηνών

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές

Αλγόριθμοι και Πολυπλοκότητα

Αλγόριθμοι. Μάρθα Σιδέρη. epl333 lect

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

Αλγόριθμοι και Πολυπλοκότητα

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Αλγόριθµοι Τύπου Μείωσης Προβλήµατος

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Τεχνολογίες Υλοποίησης Αλγορίθµων

Προγραμματισμός Χειμερινό Εξάμηνο 2017

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Προγραμματισμός Ι (ΗΥ120)

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

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

Μονάδες 10. Μονάδες 9 5 PROLOG. Μονάδες 5

Αλγόριθµοι και Πολυπλοκότητα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

σας φύλλο τον αριθμό της ερώτησης ακολουθούμενη από το γράμμα Σ (Σωστή) ή το γράμμα Λ (Λάθος).

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

Αποτίµηση εκπαιδευτικού έργου

Transcript:

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Τµήµα Πληροφορικής Φθινοπωρινό Εξάµηνο 2017-2018 Ευάγγελος Μαρκάκης Επικ. Καθηγητής

Δοµές Δεδοµένων Ένα βήµα µετά τη Java 1 και τη Java 2 Από τα σηµαντικότερα µαθήµατα του πυρήνα της Επιστήµης Υπολογιστών Μην το σκέφτεστε σαν προγραµµατιστικό µάθηµα (σίγουρα όχι σαν Java 3) Επίκεντρο του µαθήµατος: Σχεδίαση και ανάλυση, η υλοποίηση έρχεται στο τέλος Χρήσιµο και για επόµενα µαθήµατα: Αλγόριθµοι, Βάσεις Δεδοµένων, κτλ Δοµές Δεδοµένων 01-2

Τι θα µελετήσουµε? Πίνακες Β-δέντρα Δέντρα κόκκινου- µαύρου Δέντρα Σωροί Τυχαιοποιηµένα Δέντρα Ουρές προτεραιότητας Ουρές FIFO Δοµές Δεδοµένων 01-3

Τι είναι οι Δοµές Δεδοµένων? Δοµές Δεδοµένων 01-4

Τι είναι οι Δοµές Δεδοµένων? Webopedia: A scheme for organizing related pieces of information Wordnet: the organization of data (and its storage allocations in a computer) Wikipedia: a particular way of storing and organizing data in a computer so that it can be used efficiently. Wiktionary: An organization in software of data that allows more optimal searching, categorizing, or storage of information Δοµές Δεδοµένων 01-5

Αντικείµενο του µαθήµατος 1. Βασικές δοµές δεδοµένων Πίνακες, λίστες, ουρές, στοίβες, σωροί, δέντρα,... 2. Χρήση δοµών στην ανάπτυξη προγραµµάτων 3. Ρόλος δοµών στην αποδοτική υλοποίηση αλγορίθµων Θέµατα πολυπλοκότητας, χρήση χώρου/χρόνου Μια καλή ιδέα χρησιµοποιώντας τη λάθος δοµή µπορεί να χαραµισθεί 4. Ανεξαρτησία από γλώσσα προγραµµατισµού 5. Πρακτική εφαρµογή µέσω εργασιών σε Java Δοµές Δεδοµένων 01-6

Αντικείµενο του µαθήµατος Απαιτούµενες γνώσεις Στοιχειώδης γνώση τουλάχιστον 1 γλώσσας προγραµµατισµού Προαπαιτούµενα: Να έχετε περάσει ένα εκ των: Εισαγωγή στον Προγραµµατισµό Υπολογιστών (Java I) Προγραµµατισµός Υπολογιστών µε Java (Java II) Ισχύει για 2ετείς, 3ετείς και 4ετείς Δεν µαθαίνουµε Java σε αυτό το µάθηµα! Παράλληλη παρακολούθηση στο 3 ο εξάµηνο Προγραµµατισµός Υπολογιστών µε C++ Δοµές Δεδοµένων 01-7

Διαλέξεις Διδάσκων Β. Μαρκάκης (markakis AT gmail. com ή AT aueb. gr) Ώρες διαλέξεων Τρίτη 13:00-15:00 (Δ Οικ.) Πέµπτη 15:00-17:00 (Αµφ. Β) Τα περισσότερα slides είναι ήδη στο eclass Θα υπάρξουν όµως κάποιες αλλαγές Κάθε αρχείο θα ανανεώνεται µετά την αντίστοιχη διάλεξη µε τυχόν διορθώσεις/παρατηρήσεις Δοµές Δεδοµένων 01-8

Εργαστήρια Τα εργαστήρια ξεκινούν στις 9/10 Βοηθοί εργαστηρίων Νικόλαος Βίτσας Αντωνία Κυριακοπούλου Κατερίνα Παλτόγλου Θα γίνουν 9 εργαστήρια κατά τη διάρκεια του εξαµήνου Δοµές Δεδοµένων 01-9

Εργαστήρια Τα εργαστήρια είναι προαιρετικά Σύντοµες προγραµµατιστικές ασκήσεις + επανάληψη σχετικής ύλης Ίδιες µε τις προηγούµενες χρονιές Υλοποίηση βασικών δοµών δεδοµένων Επίλυση αποριών και παροχή βοήθειας για τις εργασίες Δοµές Δεδοµένων 01-10

Εργαστήρια Έχουµε 5 τµήµατα εργαστηρίων Τµήµα 1: Τρίτη 5-7, βοηθός: Κ. Παλτόγλου Τµήµα 2: Πέµπτη 9-11, βοηθός: Ν. Βίτσας Τµήµα 3: Πέµπτη 11-1, βοηθός: Ν. Βίτσας Τµήµα 4: Παρασκευή 9-11, βοηθός: Α. Κυριακοπούλου Τµήµα 5: Παρασκευή 11-1, βοηθός: Α. Κυριακοπούλου Όσοι σκοπεύετε να παρακολουθείτε τα εργαστήρια: πρέπει να δηλώσετε µέχρι τις 9/10 στο eclass (Οµάδες χρηστών) σε ποιο τµηµα επιθυµείτε να είστε Μην πηγαίνετε σε άλλο τµήµα παρά µόνο αν υπάρχει κώλυµα (λόγω δουλειάς, κτλ) µε το τµήµα στο οποίο θα γραφτείτε Δοµές Δεδοµένων 01-11

Επικοινωνία Ώρες γραφείου (πτέρυγα Αντωνιάδου, 4ος όροφος): Τρίτη 11:00-13:00, Παρασκευή 11:00 12:00 Θα ανακοινωθούν επίσης και ώρες γραφείου των βοηθών για παροχή βοήθειας και επίλυση αποριών στις εργασίες Για οποιαδήποτε απορία µπορείτε να στέλνετε email σε εµένα ή στους βοηθούς Μην ξεχνάτε το ονοµατεπώνυµό σας Αν δεν απαντήσω εντός 3 ηµερών, ξαναστείλτε... Δοµές Δεδοµένων 01-12

eclass Το υλικό του µαθήµατος (διαφάνειες, εργασίες, κτλ) θα διατίθεται µέσω του eclass: http://eclass.aueb.gr Γραφτείτε στο «Δοµές Δεδοµένων 2017-2018» Θα πρέπει να κοιτάτε τις ανακοινώσεις του µαθήµατος και το dias account σας τουλάχιστον 1 φορά την εβδοµάδα Ανακοινώσεις για τα εργαστήρια θα γίνονται επίσης µέσω του eclass Δοµές Δεδοµένων 01-13

Βαθµολόγηση Εργασίες: 3 µονάδες Τρεις εργασίες κατά τη διάρκεια του εξαµήνου 1 µονάδα η κάθε εργασία Οµάδες 2 ατόµων (ή µόνοι σας) Το επίπεδο δυσκολίας είναι τέτοιο ώστε να µπορούν να γίνουν και ατοµικά (προσπαθήστε όµως να είστε σε οµάδα) ΔΕΝ επιτρέπονται οµάδες µε πάνω από 2 άτοµα Για όσους δεν µπορέσουν να βρουν συνεργάτη, θα υπάρξει σχετική περιοχή συζητήσεων στο eclass, µε αυτόν τον σκοπό Οι βαθµοί εργασιών ισχύουν και για το Σεπτέµβρη αλλά όχι για τον επόµενο χρόνο Δοµές Δεδοµένων 01-14

Για τους πιο τολµηρούς... Μπορεί να υπάρξει και Εργασία 4: Για όσους έχουν χρόνο και όρεξη να δουν κάτι παραπάνω για τη χρήση των δοµών Προϋπόθεση να έχετε παραδώσει και τις 3 άλλες εργασίες Αξία = 0.5 µονάδες extra Η καλύτερη από τις εργασίες που θα παραδοθούν θα πάρει και κάποιο βραβείο! Δοµές Δεδοµένων 01-15

Βαθµολόγηση Τελικές εξετάσεις: 8 µονάδες (δηλαδή 1 bonus) Εξεταστέα ύλη είναι ό,τι καλύψουµε κατά τη διάρκεια του εξαµήνου Πώς υπολογίζεται ο τελικός βαθµός? Για να περάσετε το µάθηµα πρέπει στο τελικό διαγώνισµα να γράψετε τουλάχιστον 3.5 στα 8 Έστω x ο συνολικός βαθµός σας από τις εργασίες, x [0, 3] Έστω y ο βαθµός από το διαγώνισµα, y [0, 8] if y 3.5 then τελικός βαθµός = x + y else try again Δοµές Δεδοµένων 01-16

Βαθµολόγηση Πώς θα περάσω το µάθηµα? Μην αφήσετε το διάβασµα για το τέλος (η ύλη είναι αντικειµενικά µεγάλη, δεν θα προλάβετε) Ασχοληθείτε µε τις εργασίες Συνήθως όσοι ασχολούνται περνάνε Στατιστικά από τα τελευταία 2 χρόνια: περίπου 93% από τους φοιτητές που πέρασαν είχαν κανει τουλάχιστον µία απο τις εργασίες Περίπου 80% από τους φοιτητές που πέρασαν είχαν κανει τουλάχιστον δύο απο τις εργασίες Ρωτήστε ό,τι δεν καταλαβαίνετε, εκφράστε απορίες, προβληµατισµούς, σχόλια,... Προσπαθήστε πάντα να κατανοείτε την ιδέα πίσω από κάθε υλοποίηση που θα δείτε (η υλοποίηση σε Java είναι απλά το τελικό στάδιο, προέχει η σχεδίαση του κάθε αλγορίθµου) Δοµές Δεδοµένων 01-17

Σχετικά µε τις εργασίες... Σκοπός των εργασιών είναι η εξοικείωση µε τις βασικές δοµές δεδοµένων Κάθε εργασία επικεντρώνεται σε κάποια ή κάποιες δοµές και τη χρήση τους στην ανάπτυξη αλγορίθµων Για την επίλυση των εργασιών, µπορείτε να συζητάτε µεταξύ σας Όµως: Ο κώδικας πρέπει να γράφεται από κάθε οµάδα χωριστά!!! Δοµές Δεδοµένων 01-18

Σχετικά µε τις εργασίες... Μην βάζετε τον κώδικά σας στο GitHub ή σε άλλα open source repositories! Όλες οι εργασίες περνάνε από ειδικό πρόγραµµα που ελέγχει αντιγραφές (ελέγχονται αλλαγές ονοµάτων µεταβλητών, σχόλια, και πολλά άλλα χαρακτηριστικά) Δοµές Δεδοµένων 01-19

Προφορική εξέταση εργασιών Στο τέλος της εξεταστικής Ιανουαρίου θα γίνει η προφορική εξέταση όλων των εργασιών Η εξέταση είναι ατοµική ανεξαρτήτως αν κάποιος ήταν σε οµάδα ή όχι, και είναι πάνω σε όλες τις εργασίες που συµµετείχε ο κάθε φοιτητής Ζηταίται από κάθε φοιτητή να τρέξει τον κώδικά του και να απαντήσει σε ερωτήσεις σχετικά µε τις υλοποιήσεις που έκανε Απουσία στην προφορική εξέταση σηµαίνει ότι δεν κατοχυρώνεται ο βαθµός των εργασιών του Δοµές Δεδοµένων 01-20

Περιβάλλον υλοποίησης Τι περιβάλλον να χρησιµοποιήσω για την ανάπτυξη του κώδικα? (Java IDE s - Integrated Development Environments) Ό,τι θέλετε εσείς Eclipse NetBeans (υπάρχουν διάφορα άλλα) Command line Δοµές Δεδοµένων 01-21

Βιβλιογραφία Βασικό βιβλίο R. Sedgewick, Αλγόριθµοι σε Java, Μέρη 1-4, Κλειδάριθµος, 2005. Εναλλακτικό βιβλίο στη λίστα συγγραµµάτων R. Lafore, Αλγόριθµοι και Δοµές Δεδοµένων στη JAVA, Μ. Γκιούρδας, 2005. Άλλα βιβλία που µπορείτε να συµβουλευτείτε Σηµειώσεις Μάριου Συντιχάκη: Δοµές Δεδοµένων, 2005 (είναι ήδη διαθέσιµες στο eclass) M. Goodrich, R. Tamassia, Data Structures and Algorithms in Java, John Wiley & Sons, 2003. T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms, 3 rd edition, MIT Press, 2009. M.Α. Weiss, Data Structures and Problem Solving Using Java, Addison- Wesley, 2002. Δοµές Δεδοµένων 01-22

Περιεχόµενο Εισαγωγή στους αλγόριθµους Προβλήµατα συνδετικότητας και αλγόριθµοι ένωσης εύρεσης (union-find) Υλοποίηση και ανάλυση αλγορίθµων Πίνακες, Συνδεδεµένες λίστες Στοίβες, Ουρές Δέντρα Προβλήµατα ταξινόµησης Βασικοί αλγόριθµοι (insertion sort, bubblesort, selection sort) Ταξινόµηση µε συγχώνευση (mergesort) Quicksort Σωροί, Ταξινόµηση µε σωρό (heapsort) Δοµές Δεδοµένων 01-23

Περιεχόµενο Προβλήµατα αναζήτησης Πίνακες συµβόλων Δενδρικές δοµές Δέντρα δυαδικής αναζήτησης Τυχαιοποιηµένα δέντρα Στρεβλά δέντρα Δέντρα κόκκινου µαύρου Β-δέντρα Κατακερµατισµός Δοµές Δεδοµένων 01-24

Σε τι διαφέρουν οι Δοµές Δεδοµένων από ένα απλό µάθηµα προγραµµατισµού? Πόροι ενός PC: Μνήµη Χρόνος εκτέλεσης Βασικός στόχος του µαθήµατος: Πώς να µάθουµε να χρησιµοποιούµε την κατάλληλη δοµή δεδοµένων για ένα πρόβληµα έτσι ώστε να µειώσουµε αισθητά το χρόνο εκτέλεσης ή να εξοικονοµήσουµε χώρο Ανεξάρτητα από τη γλώσσα προγραµµατισµού που χρησιµοποιούµε Ο προγραµµατισµός για τις Δοµές είναι απλά ένα εργαλείο Δοµές Δεδοµένων 01-25

Σχετικά µε τον προγραµµατισµό... Αν το να γράψετε ένα πρόγραµµα σας φαίνεται αποκρουστικό/µισητό/αδιανόητο/...: Δώστε άλλη µια ευκαιρία (πολλοί φοιτητές ανεβάζουν απόδοση στο 3 ο έτος) Αν εξακολουθεί να µην σας αρέσει, τότε ίσως είστε σε λάθος τµήµα... Πτυχίο στην Επιστήµη Υπολογιστών χωρίς κάποιες γνώσεις προγραµµατισµού είναι οξύµωρο! Τελικά θα πρέπει να σκεφτείτε τι σας αρέσει περισσότερο να σπουδάσετε Δοµές Δεδοµένων 01-26

Κάποιες προτάσεις... Αν δυσκολεύεστε/φοβάστε µε τον προγραµµατισµό: Αφιερώστε περισσότερο χρόνο Προσπαθήστε να λύσετε ασκήσεις µόνοι σας Δείτε το σαν παιχνίδι! Κάθε πρόγραµµα ουσιαστικά λύνει και κάποιο puzzle Κατά τη ρήση πολλών: Computer Science is nothing more than solving nice puzzles Δοµές Δεδοµένων 01-27

Έστω ένα n x n grid Α Ένα απλό παράδειγµα Πόσα shortest paths υπάρχουν από το Α στο Β? Β Δοµές Δεδοµένων 01-28

Ένα απλό παράδειγµα Παρόµοιες ερωτήσεις βρίσκουν εφαρµογές σε VLSI design καθώς και σε διάφορα άλλα είδη δικτύων Πόσο εύκολα µπορούµε να βρούµε την απάντηση? Δοµές Δεδοµένων 01-29

Ένα απλό παράδειγµα Θα λύσουµε ένα πιο γενικό πρόβληµα Έστω P[i, j] = αριθµός των κοντινότερων µονοπατιών που υπάρχουν από το Α προς το σηµείο µε συντεταγµένες (i, j) Δηλαδή µέχρι την i-οστή γραµµή και j-οστή στήλη Σύµβαση: το Α είναι στη γραµµή 0 και στήλη 0 Θα βρούµε όλα τα P[i, j] για 0 i, j n-1 Δοµές Δεδοµένων 01-30

Ένα απλό παράδειγµα Βασική ιδέα: Τα κοντινότερα µονοπάτια προς το (i, j) θα περάσουν αναγκαστικά είτε από το (i-1, j) είτε από το (i, j-1) (i-1, j)...... (i, j-1) (i, j) Εποµένως: P[i, j] = P[i-1, j] + P[i, j-1] Δοµές Δεδοµένων 01-31

Ένα απλό παράδειγµα Επίσης: Στα σηµεία της γραµµής 0 ή της στήλης 0 υπάρχει µόνο ένα κοντινότερο µονοπάτι από το Α προς αυτά. Με βάση αυτά: for (int i=0; i < n; i++) P[i,0] = 1; for (int j=0; j < n; j++) P[0,j] = 1; for (int i=1; i < n; i++) for (int j=1; j < n; j++) P[i,j] = P[i-1,j] + P[i,j-1]; 7 γραµµές κώδικα Μπορούµε και πιο απλά? Δοµές Δεδοµένων 01-32

Επόµενα µαθήµατα Προβλήµατα συνδετικότητας: Συνδέονται 2 κόµβοι ενός µεγάλου δικτύου? (δηλαδή υπάρχει µονοπάτι από τον ένα στον άλλο?) Χρήστες σε ένα κοινωνικό δίκτυο (facebook) Τρανζίστορ σε ένα µικροτσίπ Θα δούµε την επίλυση τέτοιων προβληµάτων µε αλγορίθµους ένωσης-εύρεσης (union-find) Δοµές Δεδοµένων 01-33

Επόµενο µάθηµα u v Συνδέεται το u µε το v? Δοµές Δεδοµένων 01-34

Άλλα παραδείγµατα χρήσης δοµών: Αναζήτηση Δοµές Δεδοµένων χρησιµοποιείτε καθηµερινά στη ζωή σας Π.χ. έστω ότι ψάχνετε το τηλέφωνο του Robert J. Smith. Αν είχατε απλώς µία (αταξινόµητη) λίστα µε όλα τα ονόµατα, για πληθυσµό Ν = 5 10 6, θέλετε Ν συγκρίσεις στη χειρότερη περίπτωση Σε έναν ταξινοµηµένο (τυπωµένο) τηλεφωνικό κατάλογο όλοι σας κάνετε περίπου logn συγκρίσεις Δοµές Δεδοµένων 01-35

Άλλα παραδείγµατα χρήσης δοµών: Αναζήτηση Μηχανές αναζήτησης Ίσως η πιο σηµαντική εφαρµογή των Δοµών στις µέρες µας Υπάρχουν πάνω από 10 12 σελίδες στο web Δεν υπάρχει κάποιος φυσικός τρόπος να ταξινοµήσουµε τις σελίδες Παρ όλα αυτά, η Google απαντά σε όλες τις ερωτήσεις σε χρόνο < 1 sec Χρήση έξυπνων αλγορίθµων για την εύρεση των πιο σχετικών και σηµαντικών σελίδων (τύπου PageRank) + χρήση κατάλληλων δοµών για την αποθήκευση και ανάκτηση των σελίδων Δοµές Δεδοµένων 01-36