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