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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ
Τµήµα Πληροφορικής
Φθινοπωρινό Εξάµηνο 2014-2015
Ευάγγελος Μαρκάκης
Λέκτορας
Τι θα µελετήσουµε?
Δέντρα κό
κκινουµςαύρου
ε
κ
α
Πίν Δέντρα
α
ρ
τ
ν
έ
ς
δ
ς
Β
α
έ
τ
Σωροί Ουρ ραιότη
ε
τ
ο
ρ
π
ς
έ
ρ
υ
Ο
α
ν
έ
µ
η
ι
ο
π
ο
ι
FIFO
Τυχα
Δέντρα
Δοµές Δεδοµένων
01-2
Τι είναι οι Δοµές Δεδοµένων ?
Δοµές Δεδοµένων
01-3
Τι είναι οι Δοµές Δεδοµένων ?
•  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-4
Αντικείµενο του µαθήµατος
1.  Βασικές δοµές δεδοµένων
–  Πίνακες, λίστες, ουρές, στοίβες, σωροί, δέντρα,...
2.  Χρήση δοµών στην ανάπτυξη προγραµµάτων
3.  Ρόλος δοµών στην αποδοτική υλοποίηση αλγορίθµων
–  Θέµατα πολυπλοκότητας, χρήση χώρου/χρόνου
–  Μια καλή ιδέα χρησιµοποιώντας τη λάθος δοµή µπορεί να χαραµισθεί
4.  Ανεξαρτησία από γλώσσα προγραµµατισµού
5.  Πρακτική εφαρµογή σε Java
Δοµές Δεδοµένων
01-5
Αντικείµενο του µαθήµατος
•  Απαιτούµενες γνώσεις
–  Στοιχειώδης γνώση τουλάχιστον 1 γλώσσας
προγραµµατισµού
–  Να έχετε περάσει ένα εκ των:
•  Εισαγωγή στον Προγραµµατισµό Υπολογιστών (Java I)
•  Προγραµµατισµός Υπολογιστών µε Java (Java II)
–  Δεν µαθαίνουµε Java σε αυτό το µάθηµα!
•  Παράλληλη παρακολούθηση στο 3ο εξάµηνο
–  Προγραµµατισµός Υπολογιστών µε C++
Δοµές Δεδοµένων
01-6
Διαλέξεις
•  Διδάσκων
–  Β. Μαρκάκης (markakis AT gmail . com)
•  Ώρες διαλέξεων
–  Τρίτη 11:00-13:00 (Αµφ. Γ)
–  Πέµπτη 15:00-17:00 (Αµφ. Β)
–  Τα περισσότερα slides είναι ήδη στο eclass
–  Θα υπάρξουν όµως κάποιες αλλαγές
–  Κάθε αρχείο θα ανανεώνεται µετά την αντίστοιχη διάλεξη
µε τυχόν διορθώσεις/παρατηρήσεις
Δοµές Δεδοµένων
01-7
Εργαστήρια
•  Τα εργαστήρια ξεκινούν την επόµενη εβδοµάδα
•  Βοηθοί εργαστηρίων
–  Κωνσταντίνος Γεωργούλας
–  Κωνσταντίνος Καλαµπόκης
–  Κωνσταντίνος Καρόζος
–  Βασίλης Σπυρόπουλος
•  Θα γίνουν 9 εργαστήρια κατά τη διάρκεια του εξαµήνου
Δοµές Δεδοµένων
01-8
Εργαστήρια
•  Πέντε τµήµατα εργαστηρίων
•  Έστω Χ = τελευταίο ψηφίο του ΑΜ σας
– 
– 
– 
– 
– 
Τµήµα 1: Χ ∈ {0, 1}
Τµήµα 2: Χ ∈ {2, 3}
Τµήµα 3: Χ ∈ {4, 5}
Τµήµα 4: Χ ∈ {6, 7}
Τµήµα 5: Χ ∈ {8, 9}
•  Οι ώρες και το πρόγραµµα θα ανακοινωθούν στο eclass
•  Μην πηγαίνετε σε άλλο τµήµα παρά µόνο αν υπάρχει κώλυµα
(λόγω δουλειάς, κτλ) µε το τµήµα που αντιστοιχεί στον ΑΜ σας
Δοµές Δεδοµένων
01-9
Εργαστήρια
•  Τα εργαστήρια είναι προαιρετικά
•  Σύντοµες προγραµµατιστικές ασκήσεις
•  Ίδιες µε τις προηγούµενες χρονιές
•  Υλοποίηση βασικών δοµών δεδοµένων
•  Επίλυση αποριών και παροχή βοήθειας για τις
εργασίες
Δοµές Δεδοµένων
01-10
Επικοινωνία
•  Ώρες γραφείου (Δεριγνύ 12, 6ος όροφος):
–  Τρίτη 15:00-17:00,
–  Πέµπτη 14:00 – 15:00
•  Θα ανακοινωθούν επίσης και ώρες γραφείου των βοηθών για
παροχή βοήθειας και επίλυση αποριών στις εργασίες
•  Για οποιαδήποτε απορία µπορείτε να στέλνετε email σε εµένα ή
στους βοηθούς
–  Μην ξεχνάτε το ονοµατεπώνυµό σας
–  Αν δεν απαντήσω εντός 3 ηµερών, ξαναστείλτε...
Δοµές Δεδοµένων
01-11
eClass
•  Το υλικό του µαθήµατος (διαφάνειες, εργασίες, κτλ) θα
διατίθεται µέσω του eClass: http://eclass.aueb.gr
–  Γραφτείτε στο «Δοµές Δεδοµένων 2014-2015»
•  Θα πρέπει να κοιτάτε τις ανακοινώσεις του µαθήµατος και το
dias account σας τουλάχιστον 1 φορά την εβδοµάδα
•  Ανακοινώσεις για τα εργαστήρια θα γίνονται επίσης µέσω του
eClass
Δοµές Δεδοµένων
01-12
Βαθµολόγηση
•  Εργασίες: 3 µονάδες
– 
– 
– 
– 
– 
– 
– 
– 
Τρεις εργασίες κατά τη διάρκεια του εξαµήνου
1 µονάδα η κάθε εργασία
Οµάδες 2 ατόµων
Το επίπεδο δυσκολίας είναι τέτοιο ώστε να µπορούν να γίνουν και
ατοµικά (προσπαθήστε όµως να είστε σε οµάδα)
Δεν επιτρέπονται οµάδες µε πάνω από 2 άτοµα
Για όσους δεν µπορέσουν να βρουν συνεργάτη, θα υπάρξει σχετική
περιοχή συζητήσεων στο eclass, µε αυτόν τον σκοπό
Παράδοση µέσω e-class
Οι βαθµοί εργασιών ισχύουν και για το Σεπτέµβρη, αλλά όχι για τον
επόµενο χρόνο
Δοµές Δεδοµένων
01-13
Για τους πιο τολµηρούς...
•  Εργασία 4:
–  Για όσους έχουν χρόνο και όρεξη να δουν κάτι παραπάνω για τη χρήση
των δοµών
–  Προϋπόθεση να έχετε παραδώσει και τις 3 άλλες εργασίες
–  Αξία = 0.5 µονάδες extra
–  Η καλύτερη από τις εργασίες που θα παραδοθούν θα πάρει και κάποιο
βραβείο!
Δοµές Δεδοµένων
01-14
Βαθµολόγηση
•  Τελικές εξετάσεις: 8 µονάδες (δηλαδή 1 bonus)
–  Εξεταστέα ύλη είναι ό,τι καλύψουµε κατά τη διάρκεια του εξαµήνου
•  Πώς υπολογίζεται ο τελικός βαθµός?
–  Για να περάσετε το µάθηµα πρέπει στο τελικό διαγώνισµα να γράψετε
τουλάχιστον 3.5 στα 8
–  Έστω x ο συνολικός βαθµός σας από τις εργασίες, x ∈ [0, 3]
–  Έστω y ο βαθµός από το διαγώνισµα, y ∈ [0, 8]
–  Aν y ≥ 3.5, τότε τελικός βαθµός = x + y
Δοµές Δεδοµένων
01-15
Βαθµολόγηση
•  Πώς θα περάσω το µάθηµα?
–  Μην αφήσετε το διάβασµα για το τέλος (η ύλη είναι αντικειµενικά
µεγάλη, δεν θα προλάβετε)
–  Ασχοληθείτε µε τις εργασίες (συνήθως όσοι ασχολούνται περνάνε)
–  Ρωτήστε ό,τι δεν καταλαβαίνετε, εκφράστε απορίες, προβληµατισµούς,
σχόλια,...
–  Προσπαθήστε πάντα να κατανοείτε την ιδέα πίσω από κάθε υλοποίηση
που θα δείτε (η υλοποίηση σε Java είναι απλά το τελικό στάδιο, προέχει
η σχεδίαση του κάθε αλγορίθµου)
Δοµές Δεδοµένων
01-16
Σχετικά µε τις εργασίες...
•  Σκοπός των εργασιών είναι η εξοικείωση µε τις βασικές δοµές
δεδοµένων
•  Κάθε εργασία επικεντρώνεται σε κάποια ή κάποιες δοµές και τη
χρήση τους στην ανάπτυξη αλγορίθµων
•  Για την επίλυση των εργασιών, µπορείτε να συζητάτε µεταξύ
σας
•  Όµως: Ο κώδικας πρέπει να γράφεται από κάθε οµάδα
χωριστά!!!
Δοµές Δεδοµένων
01-17
Σχετικά µε τις εργασίες...
•  Μην βάζετε τον κώδικά σας στο GitHub ή σε άλλα open source
repositories!
•  Όλες οι εργασίες περνάνε από ειδικό πρόγραµµα που ελέγχει
αντιγραφές (ελέγχονται αλλαγές ονοµάτων µεταβλητών,
σχόλια, και πολλά άλλα χαρακτηριστικά)
•  Μηδενισµοί από 2009 - 2012:
–  2009: 1η εργασία: ≈40 οµάδες (από 160), 2η εργασία: 6 οµάδες (από 91),
3η εργασία: 2 οµάδες (από 95)
–  2010: 1η εργασία: ≈25 οµάδες (από 138), 2η εργασία: 0 οµάδες (από 90),
3η εργασία: 2 οµάδες (από 90)
–  2011: 1η εργασία: 12 οµάδες (από 157), 2η εργασία: 2 οµάδες (από 103),
3η εργασία: 2 οµάδες (από 83)
–  2012: Περίπου 10 οµάδες συνολικά
Δοµές Δεδοµένων
01-18
Σχετικά µε τις εργασίες...
•  Τι περιβάλλον να χρησιµοποιήσω για την ανάπτυξη
του κώδικα? (Java IDE s - Integrated Development
Environments)
•  Ό,τι θέλετε εσείς
–  NetBeans
–  Eclipse
–  … (υπάρχουν διάφορα άλλα)
–  Command line
Δοµές Δεδοµένων
01-19
Βιβλιογραφία
•  Βασικό βιβλίο
–  R. Sedgewick, Αλγόριθµοι σε Java, Μέρη 1-4, Κλειδάριθµος, 2005.
•  Εναλλακτικό βιβλίο στη λίστα συγγραµµάτων
–  R. Lafore, Αλγόριθµοι και Δοµές Δεδοµένων στη JAVA, Μ. Γκιούρδας,
2005.
•  Άλλα βιβλία που µπορείτε να συµβουλευτείτε
–  Σηµειώσεις Μάριου Συντιχάκη: Δοµές Δεδοµένων, 2005 (είναι ήδη
διαθέσιµες στο eClass)
–  T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms,
3rd edition, MIT Press, 2009.
–  M. Goodrich, R. Tamassia, Data Structures and Algorithms in Java, John
Wiley & Sons, 2003.
–  M.Α. Weiss, Data Structures and Problem Solving Using Java, AddisonWesley, 2002.
Δοµές Δεδοµένων
01-20
Περιεχόµενο
•  Εισαγωγή στους αλγόριθµους
•  Προβλήµατα συνδετικότητας και αλγόριθµοι ένωσης – εύρεσης
(union-find)
•  Υλοποίηση και ανάλυση αλγορίθµων
•  Πίνακες, Συνδεδεµένες λίστες
•  Στοίβες, Ουρές
•  Δέντρα
•  Ταξινόµηση
– 
– 
– 
– 
Βασικοί αλγόριθµοι (insertion sort, bubblesort, selection sort)
Ταξινόµηση µε συγχώνευση (mergesort)
Quicksort
Σωροί, Ταξινόµηση µε σωρό (heapsort)
Δοµές Δεδοµένων
01-21
Περιεχόµενο
•  Αναζήτηση
– 
– 
– 
– 
– 
– 
– 
Πίνακες συµβόλων
Δυαδική αναζήτηση, Δέντρα δυαδικής αναζήτησης
Τυχαιοποιηµένα δέντρα
Στρεβλά δέντρα
Δέντρα κόκκινου µαύρου
Κατακερµατισµός
Β-δέντρα
Δοµές Δεδοµένων
01-22
Σε τι διαφέρουν οι Δοµές Δεδοµένων από
ένα απλό µάθηµα προγραµµατισµού?
•  Πόροι ενός PC:
–  Μνήµη
–  Χρόνος εκτέλεσης
•  Βασικός στόχος του µαθήµατος:
–  Πώς να µάθουµε να χρησιµοποιούµε την κατάλληλη δοµή δεδοµένων
για ένα πρόβληµα έτσι ώστε να µειώσουµε αισθητά το χρόνο εκτέλεσης
ή να εξοικονοµήσουµε χώρο
–  Ανεξάρτητα από τη γλώσσα προγραµµατισµού που χρησιµοποιούµε
•  Ο προγραµµατισµός για τις Δοµές είναι απλά ένα εργαλείο
Δοµές Δεδοµένων
01-23
Σχετικά µε τον προγραµµατισµό...
•  Κάποια σχόλια φοιτητών (κυρίως στα πρώτα
2 έτη των σπουδών τους):
•  Προσπαθώ αλλά δυσκολεύοµαι, δεν
καταλαβαίνω τη λογική του...
•  Με φοβίζει ο προγραµµατισµός
•  Μισώ τον προγραµµατισµό!
Δοµές Δεδοµένων
01-24
Κάποιες προτάσεις...
•  Αν το να γράψετε ένα πρόγραµµα σας φαίνεται
αποκρουστικό/µισητό/αδιανόητο:
–  Δώστε άλλη µια ευκαιρία (πολλοί φοιτητές ανεβάζουν
απόδοση στο 3ο έτος)
–  Αν επιµένει, τότε ίσως είστε σε λάθος τµήµα...
–  Πτυχίο στην Επιστήµη Υπολογιστών χωρίς κάποιες γνώσεις
προγραµµατισµού είναι οξύµωρο!
–  Τελικά θα πρέπει να σκεφτείτε τι σας αρέσει περισσότερο
να σπουδάσετε
Δοµές Δεδοµένων
01-25
Κάποιες προτάσεις...
•  Αν δυσκολεύεστε/φοβάστε µε τον προγραµµατισµό:
–  Αφιερώστε περισσότερο χρόνο
–  Προσπαθήστε να λύσετε ασκήσεις µόνοι σας
–  Δείτε το σαν παιχνίδι!
–  Κάθε πρόγραµµα ουσιαστικά λύνει και κάποιο puzzle
Δοµές Δεδοµένων
01-26
Ένα απλό παράδειγµα
Έστω ένα n x n grid Α•
Πόσα shortest paths
υπάρχουν από το Α
στο Β?
Δοµές Δεδοµένων
Β
•
01-27
Ένα απλό παράδειγµα
•  Παρόµοιες ερωτήσεις βρίσκουν εφαρµογές σε
VLSI design καθώς και σε διάφορα άλλα είδη
δικτύων
•  Πόσο εύκολα µπορούµε να βρούµε την
απάντηση?
Δοµές Δεδοµένων
01-28
Ένα απλό παράδειγµα
•  Θα λύσουµε ένα πιο γενικό πρόβληµα
•  Έστω P[i, j] = αριθµός των κοντινότερων
µονοπατιών που υπάρχουν από το Α προς το
σηµείο µε συντεταγµένες (i, j)
–  Δηλαδή µέχρι την i-οστή γραµµή και j-οστή
στήλη
–  Σύµβαση: το Α είναι στη γραµµή 0 και στήλη 0
•  Θα βρούµε όλα τα P[i, j] για 0 ≤ i, j ≤ n-1
Δοµές Δεδοµένων
01-29
Ένα απλό παράδειγµα
Βασική ιδέα: Τα κοντινότερα µονοπάτια προς το (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-30
Ένα απλό παράδειγµα
•  Επίσης: Στα σηµεία της γραµµής 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-31
Επόµενο µάθηµα
•  Προβλήµατα συνδετικότητας:
–  Συνδέονται 2 κόµβοι ενός µεγάλου δικτύου? (δηλαδή υπάρχει µονοπάτι
από τον ένα στον άλλο?)
–  Χρήστες σε ένα κοινωνικό δίκτυο (facebook)
–  Τρανζίστορ σε ένα µικροτσίπ
•  Θα δούµε την επίλυση τέτοιων προβληµάτων µε αλγορίθµους
ένωσης-εύρεσης (union-find)
Δοµές Δεδοµένων
01-32
Επόµενο µάθηµα
u
v
Συνδέεται το u µε το v?
Δοµές Δεδοµένων
01-33
Άλλα παραδείγµατα χρήσης δοµών:
Αναζήτηση
•  Δοµές Δεδοµένων χρησιµοποιείτε καθηµερινά στη ζωή σας
•  Π.χ. έστω ότι ψάχνετε το τηλέφωνο του Robert J. Smith.
•  Αν είχατε απλώς µία (αταξινόµητη) λίστα µε όλα τα ονόµατα, για πληθυσµό
Ν = 5 ·106, θέλετε Ν συγκρίσεις στη χειρότερη περίπτωση
•  Σε έναν ταξινοµηµένο (τυπωµένο) τηλεφωνικό κατάλογο όλοι σας κάνετε
περίπου logN συγκρίσεις
Δοµές Δεδοµένων
01-34
Άλλα παραδείγµατα χρήσης δοµών:
Αναζήτηση
• 
• 
• 
• 
• 
• 
Μηχανές αναζήτησης
Ίσως η πιο σηµαντική εφαρµογή των Δοµών στις µέρες µας
Υπάρχουν πάνω από 1012 σελίδες στο web
Δεν υπάρχει κάποιος φυσικός τρόπος να “ταξινοµήσουµε” τις σελίδες
Παρ’ όλα αυτά, η Google απαντά σε όλες τις ερωτήσεις σε χρόνο < 1 sec
Χρήση έξυπνων αλγορίθµων για την εύρεση των πιο σχετικών και
σηµαντικών σελίδων (τύπου PageRank) + χρήση κατάλληλων δοµών για
την αποθήκευση και ανάκτηση των σελίδων
Δοµές Δεδοµένων
01-35
The puzzle of the week
•  Κατά τη ρήση πολλών: “Computer Science is nothing more than
solving nice puzzles
•  Κάθε εβδοµάδα θα έχουµε και 1 puzzle
•  Όλα τα puzzles που θα δούµε χρειάζονται κάποια αλγοριθµική
σκέψη
Δοµές Δεδοµένων
01-36
The puzzle of Week 1
•  In one side of a river there is a man with a wolf, a goat
and a big sack of vegetables. The man wants to bring
everything across the river.
•  The only way to cross the river is by using a small boat,
which however can fit only the man and one more thing
(either the wolf or the goat or the sack).
•  If the wolf and the goat are left alone, the wolf will
eat the goat.
•  If the goat and the sack are left alone, the goat will
eat the vegetables.
•  How can the man bring everything across? What is the
minimum number of steps needed?
Δοµές Δεδοµένων
01-37