ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ
Τµήµα Πληροφορικής
Φθινοπωρινό Εξάµηνο 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
© Copyright 2025 Paperzz