Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 12. Ανασκόπηση 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 13/01/2017
Εξεταστέα Ύλη (Βιβλίο R.Lafore) Κεφ.1: Περίληψη Κεφ.2: Πίνακες Κεφ.3: Απλή Ταξινόμηση Κεφ.4: Στοίβες και Ουρές Κεφ.5: Συνδεδεμένες Λίστες Κεφ.6: Επανάληψη Κεφ.7: Προχωρημένη Ταξινόμηση Κεφ.8: υαδικά έντρα Κεφ.9: Κόκκινα-Μαύρα έντρα + Ισοζυγισμένα υαδικά έντρα Αναζήτησης (AVL-δέντρα) Κεφ.10: 2-3-4 έντρα Κεφ.11: Πίνακες κατακερματισμού Κεφ.12: Σωροί Κεφ.13: Γράφοι Κεφ.15: Πότε να χρησιμοποιείτε τι? Δομές Δεδομένων, 3ο Εξάμηνο 2
Οργάνωση Περιεχομένων Μαθήματος ομές δεδομένων Πίνακες, συνδεδεμένες λίστες, δέντρα, πίνακες κατακερματισμού Ειδικευμένες δομές δεδομένων Στοίβες, ουρές, ουρές προτεραιότητας, γράφοι Ταξινόμηση Γράφοι Φυσαλίδας, επιλογής, εισαγωγής Shellsort, quicksort, mergesort, heapsort Πίνακας γειτνίασης, λίστα γειτνίασης Αναζήτηση κατά βάθος, αναζήτηση κατά πλάτος, δέντρα ελάχιστου σκελετού Δομές Δεδομένων, 3ο Εξάμηνο 3
Δομές Δεδομένων Γενικού Σκοπού Δομές Δεδομένων, 3ο Εξάμηνο 4
Πίνακες Οι πίνακες είναι χρήσιμοι όταν Η ποσότητα των δεδομένων είναι σχετικά μικρή Η ποσότητα των δεδομένων είναι εκ των προτέρων γνωστή Αν η ταχύτητα εισαγωγής είναι σημαντική Χρήση μη ταξινομημένου πίνακα Αν η ταχύτητα αναζήτησης είναι σημαντική Χρήση ταξινομημένου πίνακα με δυαδική αναζήτηση Η διαγραφή είναι πάντα αργή Δομές Δεδομένων, 3ο Εξάμηνο 5
Δυαδική Αναζήτηση Εφαρμόσιμη μόνο σε ταξινομημένους πίνακες Πολύ ταχύτερη από τη γραμμική αναζήτηση (ειδικά για μεγάλους πίνακες) Πώς λειτουργεί η εύρεση του στοιχείου με τιμή Χ; Χωρίζει το πλήθος των κελιών στη μέση, ελέγχει το κλειδί Μ του μεσαίου κελιού, και επαναλαμβάνει τη διαδικασία στο αριστερό κομμάτι (εάν Χ<Μ) ή στο δεξιό κομμάτι (εάν Χ>Μ) του πίνακα Π.χ. Αναζήτηση του 71 0 1 2 3 4 5 6 7 8 9 11 22 37 42 58 67 71 83 Δομές Δεδομένων, 3ο Εξάμηνο 6
Γιατί δε Χρησιμοποιούμε τους Πίνακες για όλα; Θέματα απόδοσης Μη ταξινομημένοι πίνακες Γρήγορη εισαγωγή Ο(1), όμως αργή αναζήτηση Ο(Ν) Ταξινομημένοι πίνακες Γρήγορη αναζήτηση Ο(logN), όμως αργή εισαγωγή Ο(Ν) Σταθερό μέγεθος πινάκων κατά τη δημιουργία Πρέπει να εκτιμήσουμε το πλήθος των στοιχείων που θα αποθηκευθούν, πριν τη χρήση του πίνακα Υπερεκτίμηση μεγέθους κατανάλωση μνήμης άσκοπα Υποτίμηση μεγέθους ο πίνακας δεν μπορεί να καλύψει τις ανάγκες αποθήκευσης στοιχείων Δομές Δεδομένων, 3ο Εξάμηνο 7
Συνδεδεμένες Λίστες Χρησιμοποιούνται όταν Η ποσότητα των δεδομένων που θα αποθηκευτεί δεν μπορεί να προβλεφθεί εκ των προτέρων Θέλουμε να υποστηρίζονται συχνές εισαγωγές/διαγραφές Αποκτά το μέγεθος που απαιτείται καθώς προστίθενται νέα στοιχεία εν υπάρχει ανάγκη συμπλήρωσης κενών (όπως στους πίνακες) Η εισαγωγή είναι γρήγορη Η αναζήτηση και η διαγραφή είναι αργές Δομές Δεδομένων, 3ο Εξάμηνο 8
Εισαγωγή σε Απλά Συνδεδεμένη Λίστα tmp = new ListNode(x, current.next); current.next = tmp; // ο επόμενος κόμβος του a είναι ο x Δομές Δεδομένων, 3ο Εξάμηνο 9
Εισαγωγή σε Διπλά Συνδεδεμένη Λίστα newnode = new DoublyLinkedListNode(x); 1. newnode.previous = current; 2. newnode.next = current.next; 3. newnode.previous.next = newnode; 4. newnode.next.previous = newnode; Δομές Δεδομένων, 3ο Εξάμηνο 10
Δυαδικά Δέντρα Αναζήτησης Όλες οι πράξεις ενός Α έχουν στην καλύτερη περίπτωση πολυπλοκότητα O(logN), αλλά στη χειρότερη Ο(Ν) Όμως η διάσχιση διαρκεί O(N) Εύκολος εντοπισμός μέγιστου/ελάχιστου στοιχείου Εύκολη διάσχιση ενός εύρους στοιχείων Ένα μη ισοζυγισμένο Α είναι πιο εύκολο στον προγραμματισμό σε σχέση με ένα ισοζυγισμένο Πρόβλημα με δεδομένα που εισάγονται ταξινομημένα Μπορεί να μειώσουν την απόδοση σε χρόνο Ο(Ν) Για να αποφύγουμε κάτι τέτοιο, χρησιμοποιούμε ισοζυγισμένα Α Εάν όμως είμαστε βέβαιοι ότι τα δεδομένα εισάγονται σε τυχαία σειρά, τότε δεν υπάρχει λόγος χρήσης ισοζυγισμένου Α Δομές Δεδομένων, 3ο Εξάμηνο 11
3<7 3>2 Αναζήτηση του στοιχείου 3 3<5 3==3 Αναζήτηση στοιχείου 3 ΕΠΙΤΥΧΗΣ!! 6>2 6<7 Αναζήτηση του στοιχείου 6 6>5 ΤΕΛΟΣ!! ΑΝΑΖΗΤΗΣΗ στοιχείου 6 ΑΝΕΠΙΤΥΧΗΣ Δομές Δεδομένων, 3ο Εξάμηνο 12
Περίπτωση #1: Διαγραφή Κόμβου Χωρίς Παιδιά Αλλάζουμε το κατάλληλο πεδίο παιδιού στον πατέρα του κόμβου ώστε να είναι null και να μην δείχνει στον κόμβο parent if current node is left child parent.leftchild = null else parent.rightchild =null current node Δομές Δεδομένων, 3ο Εξάμηνο 13
Περίπτωση #2: Διαγραφή Κόμβου με Ένα Παιδί parent current ιαγραφή του 5 parent.rightchild =current.leftchild Δομές Δεδομένων, 3ο Εξάμηνο 14
Περίπτωση #3: Διαγραφή Κόμβου με Δύο Παιδιά Για να διαγράψουμε έναν κόμβο με δύο παιδιά αντικαθιστούμε τον κόμβο με τον ενδοδιατεταγμένο διάδοχό του (inorder) Ενδοδιατεταγμένος διάδοχος ή διάδοχος ενός κόμβου Ο κόμβος με το επόμενο μεγαλύτερο κλειδί Δομές Δεδομένων, 3ο Εξάμηνο 15
Εύρεση Διαδόχου Ξεκινάμε από το δεξί παιδί του κόμβου και ακολουθούμε το μονοπάτι των αριστερών παιδιών ιαγραφή 2 εν υπάρχει αριστερό παιδί Ο 3 είναι διάδοχος του 2 Αντικατάσταση κόμβου 2 με το διάδοχό του Δομές Δεδομένων, 3ο Εξάμηνο 16
Διαγραφή: Ο Διάδοχος Δεξί Παιδί του προς Διαγραφή Κόμβου Μετακίνηση του υποδέντρου που είναι η ρίζα του διαδόχου και τοποθέτησή του εκεί που ήταν ο διαγραμμένος κόμβος 50 πατέρας 50 Βήμα 1 75 Πατέρας διαδόχου (current) ιαγραφή 75 87 Βήμα 2 62 87 ιάδοχος(successor) 62 93 93 1. parent.rightchild = successor; 2. successor.leftchild = current.leftchild; Δομές Δεδομένων, 3ο Εξάμηνο 17
Διαγραφή: Ο Διάδοχος Αριστερός Απόγονος του Δεξιού Παιδιού του προς Διαγραφή Κόμβου Μετακίνηση του υποδέντρου που είναι η ρίζα του διαδόχου και τοποθέτησή του εκεί που ήταν ο διαγραμμένος κόμβος 50 parent 50 Βήμα 3 62 75 (delnode-current) ιαγραφή 75 successorparent 87 Βήμα 4 62 77 Βήμα 1 Βήμα 2 87 79 93 ιάδοχος (successor) 77 79 93 1. successorparent.leftchild = successor.rightchild; 2. successor.rightchild = delnode.rightchild; 3. parent.rightchild = successor; 4. successor.leftchild = current.leftchild; 18 Δομές Δεδομένων, 3ο Εξάμηνο
50 15 62 5 20 58 91 3 8 37 60 24 Α. είξτε το Α που προκύπτει μετά από καθεμία από τις παρακάτω πράξεις: 1) Εισαγωγή 7, 1, 55, 29 και 19 2) ιαγραφή 8, 37 και 62 Δομές Δεδομένων, 3ο Εξάμηνο 19
Ισοζυγισμένα Δέντρα AVL έντρα Εγγυημένη απόδοση O(logN) πάντα ύσκολα στον προγραμματισμό Δομές Δεδομένων, 3ο Εξάμηνο 20
Πίνακες Κατακερματισμού Είναι η γρηγορότερη δομή αποθήκευσης δεδομένων Χρήσιμο εργαλείο στον προγραμματισμό Όταν δηλαδή ένα πρόγραμμα (κι όχι ένας άνθρωπος) αλληλεπιδρά με τα δεδομένα εν είναι ευαίσθητοι στη σειρά εισαγωγής δεδομένων Μπορούν να αντικαταστήσουν ένα ισοζυγισμένο Α Είναι πολύ απλούστεροι στον προγραμματισμό Στηρίζονται σε πίνακες, οπότε πρέπει να είναι εκ των προτέρων γνωστό το πλήθος των δεδομένων Η απόδοσή τους πέφτει σημαντικά όταν υπερκορεστούν (όταν αρχίσουν να γεμίζουν) εν έχουν φτιαχτεί για να υποστηρίζουν κανένα είδος διατεταγμένης διάσχισης (παρόλο που υλοποιήσεις αυτών, π.χ. HashMap, δίνουν τη δυνατότητα διάσχισης της δομής) Δομές Δεδομένων, 3ο Εξάμηνο 21
Ανοιχτή ιεύθυνση: Γραμμική Εξέταση Δομές Δεδομένων, 3ο Εξάμηνο 22
Ανοιχτή ιεύθυνση: ευτεροβάθμια Εξέταση January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 23
Παράδειγμα Ξεχωριστής Αλυσίδας κενό 906 881 807 κενό 458 383 333 559 Πίνακας Συνδεδεμένες λίστες Δομές Δεδομένων, 3ο Εξάμηνο 24
Σχέση Δομών Δεδομένων Γενικού Σκοπού Αρχή Μικρή ποσότητα δεδομένων; ΝΑΙ Προσδοκώμ ενη ποσότητα ΟΧΙ δεδομένων; ΟΧΙ Συνδ.Λίστα Πίνακας Κατακερματι σμού έντρο υαδικής Αναζήτησης ΝΑΙ ΝΑΙ ΟΧΙ Αναζήτηση, Εισαγωγή να είναι γρήγορες; ΟΧΙ Η κατανομή κλειδιών εγγυάται την ταχύτητα; Ισοζυγισμένο έντρο ΟΧΙ ΝΑΙ Ταχύτητα αναζήτησης σημαντικότε ρη από εισαγωγής; ΟΧΙ Μη ταξινομημέν ος Πίνακας ΝΑΙ ιατεταγμέν ος Πίνακας Δομές Δεδομένων, 3ο Εξάμηνο 25
Σύγκριση ομή Αναζήτηση Εισαγωγή ιαγραφή ιάσχιση εδομένων Πίνακας O(N) O(1) O(N) - Ταξινομημένος Πίνακας Συνδεδεμένη Λίστα ιατεταγμένη Συνδ.Λίστα Α (μέσος όρος) Α (χειρότερη περίπτωση) Ισοζυγισμένο έντρο Πίνακας Κατακερματισμού O(logN) O(N) O(N) O(N) O(N) O(1) O(N) - O(N) O(N) O(N) O(N) O(logN) O(logN) O(logN) O(N) O(N) O(N) O(N) O(N) O(logN) O(logN) O(logN) O(N) O(1) O(1) O(1) - January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 26
Δομές Δεδομένων Ειδικού Σκοπού Δομές Δεδομένων, 3ο Εξάμηνο 27
Στοίβα Ουρά Ουρά Προτεραιότητας Είναι αφηρημένοι τύποι δεδομένων (ADT) που υλοποιούνται από μια πιο βασική δομή δεδομένων (πίνακας, λίστα, σωρός) Παρέχουν μια απλή διεπαφή στο χρήστη επιτρέποντας συνήθως την εισαγωγή, διαγραφή ή προσπέλαση ενός μόνο στοιχείου (για στοίβες) το τελευταίο στοιχείο που εισήχθη (για ουρές) το πρώτο στοιχείο που εισήχθη (για ουρές προτεραιότητας) το στοιχείο με την υψηλότερη προτεραιότητα εν υποστηρίζουν αναζήτηση με βάση το κλειδί ή διάσχιση Δομές Δεδομένων, 3ο Εξάμηνο 28
Στοίβα Χρησιμοποιείται όταν θέλουμε να προσπελάσουμε μόνο το τελευταίο στοιχείο που εισήχθη ομή Last-In-First-Out (LIFO) Υλοποιείται με πίνακα ή με λίστα Ανάλογα με το εάν μπορεί να προβλεφθεί το πλήθος των στοιχείων που διατηρεί Δομές Δεδομένων, 3ο Εξάμηνο 29
Παράδειγμα Λειτουργιών Στοίβας January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 30
Ουρά Χρησιμοποιείται όταν θέλουμε να προσπελάσουμε μόνο το πρώτο στοιχείο που εισήχθη ομή First-In-First-Out (FIFO) Υλοποιείται με πίνακα ή με λίστα Ανάλογα με το εάν μπορεί να προβλεφθεί το πλήθος των στοιχείων που διατηρεί Η υλοποίηση με πίνακα πρέπει να υποστηρίζει αναδίπλωση Η υλοποίηση με λίστα απαιτεί συνδεδεμένη λίστα δύο άκρων Δομές Δεδομένων, 3ο Εξάμηνο 31
Παράδειγμα Λειτουργίας Ουράς με Κυκλικό Πίνακα (Αναδίπλωση) Όταν οι δείκτες back, front που δείχνουν στο τέλος και στην αρχή της ουράς αντίστοιχα φτάσουν στο τέλος του πίνακα Επαναορίζουμε τους δείκτες ώστε να δείχνουν και οι δύο στην αρχή January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 32
Ουρά Προτεραιότητας Χρησιμοποιείται όταν η μόνη προσπέλαση γίνεται στο στοιχείο με τη μέγιστη προτεραιότητα Αυτό είναι το στοιχείο με το μεγαλύτερο (ή μικρότερο) κλειδί Μπορεί να υλοποιηθεί ως Ταξινομημένος πίνακας Εισαγωγή αργή, διαγραφή γρήγορη Σωρός Λογαριθμικό κόστος εισαγωγής και διαγραφής Αν η ταχύτητα εισαγωγής δεν αποτελεί πρόβλημα, χρησιμοποιείται πίνακας (αλλιώς σωρός) Αντί για πίνακα μπορεί να χρησιμοποιηθεί συνδεδεμένη λίστα δύο άκρων Δομές Δεδομένων, 3ο Εξάμηνο 33
Παράδειγμα Σωρού Αν ο αριθμός δείκτη του κόμβου είναι index: Αριστερό παιδί:2*index + 1 εξιό παιδί: 2*index + 2 και ο γονέας του είναι: (index-1)/2 January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 34
Απομάκρυνση του Μέγιστου Κόμβου (Ρίζα) January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 35
Εισαγωγή Κόμβου Αν απομακρύνουμε έναν κόμβο και τον επαναεισάγουμε, το αποτέλεσμα δεν είναι απαραίτητα η αποκατάσταση του αρχικού σωρού Ένα δοθέν σύνολο κόμβων μπορεί να διευθετηθεί με πολλούς έγκυρους σωρούς, ανάλογα με τη σειρά εισαγωγής των κόμβων January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 36
Σύγκριση ομή εδομένων Εισαγωγή ιαγραφή Σχόλιο Στοίβα (πίνακας ή συνδεδεμένη λίστα) Ο(1) Ο(1) ιαγράφει το τελευταίο στοιχείο που εισήχθη Ουρά (πίνακας ή συνδεδεμένη λίστα) Ο(1) Ο(1) ιαγράφει το πρώτο στοιχείο που εισήχθη Ουρά προτεραιότητας (ταξινομημένος πίνακας) Ουρά προτεραιότητας (σωρός) Ο(Ν) Ο(1) ιαγράφει το στοιχείο με την υψηλότερη προτεραιότητα O(logN) O(logN) ιαγράφει το στοιχείο με την υψηλότερη προτεραιότητα Δομές Δεδομένων, 3ο Εξάμηνο 37
Ταξινόμηση Δομές Δεδομένων, 3ο Εξάμηνο 38
Τι Χρησιμοποιούμε Πότε; Για μικρά σύνολα δεδομένων, η ταξινόμηση εισαγωγής δουλεύει (αργή αλλά απλή ταξινόμηση) Επίσης, δουλεύει καλά για σχεδόν ταξινομημένα δεδομένα ιαφορετικά, μπορεί να χρησιμοποιηθεί η shellsort (σχετικά εύκολη στην υλοποίηση) Αν και αυτή είναι αργή, χρησιμοποιούμε πιο σύνθετες αλλά γρηγορότερες ταξινομήσεις (ταξινόμηση σύζευξης, heapsort ή quicksort) Η ταξινόμηση σύζευξης απαιτεί επιπλέον μνήμη Η heapsort απαιτεί μια δομή δεδομένων σωρού Η quicksort είναι πιο γρήγορη από τις άλλες δύο, όμως όταν τα δεδομένα είναι τυχαία μπορεί να πέσει σε O(N 2 ) Δομές Δεδομένων, 3ο Εξάμηνο 39
Παράδειγμα: Ταξινόμηση Φυσαλίδας Επανέλαβε μέχρι να μην απαιτούνται άλλες αλλαγές Δομές Δεδομένων, 3ο Εξάμηνο 40
Παράδειγμα: Ταξινόμηση Επιλογής Παράδειγμα January 13, 2017διαφάνειες μαθήματος Data Δομές structures, Δεδομένων, GMU, 3ο Εξάμηνο 2005 (instructor: J. Lin) 41
Παράδειγμα: Ταξινόμηση Εισαγωγής January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 42
Βασική Ιδέα: Σύζευξη Ταξινομημένων Πινάκων Α 23 42 87 99 C 0 1 2 3 4 5 6 7 8 12 21 23 42 55 77 87 92 99 Β 12 21 55 77 92 Η σύζευξη δύο ταξινομημένων πινάκων A και B δημιουργεί έναν τρίτο πίνακα C, που περιέχει όλα τα στοιχεία των A και B ταξινομημένα Υποθέστε ότι αρχικά ο C είναι κενός Το σχήμα δείχνει τον C μετά τη διαδικασία συγχώνευσης Δομές Δεδομένων, 3ο Εξάμηνο 43
Παράδειγμα MergeSort January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 44
low low high Pivot, high Low σταματά στο μεγαλύτερο στοιχείο 8 high σταματά στο μικρότερο στοιχείο 2 Τα στοιχεία 2 και 8 αντιμετατίθενται low high Low σταματά στο μεγαλύτερο στοιχείο 9 high σταματά στο μικρότερο στοιχείο 5 Τα στοιχεία 5 και 9 αντιμετατίθενται Οι δείκτες low και high διασταυρώνονται high low Αντιμετάθεση του στοιχείου pivot με αυτό στη θέση low January 13, 2017 Δομές Δεδομένων, 3ο Εξάμηνο 45
Παράδειγμα QuickSort Πηγή: https://cs.nyu.edu/courses/fall02/v22.0310-002/lectures/lecture-22.html Δομές Δεδομένων, 3ο Εξάμηνο 46
HeapSort Αλγόριθμος Ταξινόμησης ημιουργία σωρού Εισαγωγή στοιχείων 7, 1, 8, 0, 6, 2, 9, 4 σε σωρό Απομάκρυνση στοιχείου από το σωρό (άρα σε ταξινομημένη σειρά) και εισαγωγή σε πίνακα ιαγραφή πάντα από ρίζα Πολυπλοκότητα: O(N*logN) for (j=0 ; j < size ; j++) theheap.insert( anarray[j] ); // from unsorted array for (j=0 ; j < size ; j++) anarray[j] = theheap.remove(); // to sorted array Δομές Δεδομένων, 3ο Εξάμηνο 47
Σύγκριση Ταξινόμηση Μέσος όρος Χειρότερος χρόνος Σύγκριση Επιπλέον μνήμη Φυσαλίδας O(N 2 ) O(N 2 ) Χαμηλή Όχι Επιλογής O(N 2 ) O(N 2 ) Μέτρια Όχι Εισαγωγής O(N 2 ) O(N 2 ) Καλή Όχι Shellsort O(N 3/2 ) O(N 3/2 ) - Όχι Quicksort O(N*logN) O(N 2 ) Καλή Όχι Ταξινόμηση O(N*logN) O(N*logN) Μέτρια Ναι σύζευξης Heapsort O(N*logN) O(N*logN) Μέτρια Όχι Δομές Δεδομένων, 3ο Εξάμηνο 48
Γράφοι Δομές Δεδομένων, 3ο Εξάμηνο 49
Γράφοι εν αποθηκεύουν δεδομένα γενικού σκοπού Αναπαριστούν πραγματικές καταστάσεις Η δομή του γράφου αντανακλά τη δομή του προβλήματος εν μπορεί να αντικατασταθεί από άλλη δομή δεδομένων και η μόνη επιλογή είναι ως προς τον τρόπο αναπαράστασης Πίνακας γειτνίασης (καλή επιλογή για πλήρεις γράφους) Λίστα γειτνίασης (καλή επιλογή για αραιούς γράφους) Δομές Δεδομένων, 3ο Εξάμηνο 50
Πίνακας Γειτνίασης (Adjacency Matrix) a b c d e a 0 1 1 1 0 b 1 0 0 0 1 c 1 0 0 1 1 d 1 0 1 0 1 e 0 1 1 1 0 a d c b e Δομές Δεδομένων, 3ο Εξάμηνο 51
Λίστα Γειτνίασης (Adjacency List) a b d c a b b a e c d a d e a c e c e b c d d e Δομές Δεδομένων, 3ο Εξάμηνο 52
Αναζήτηση κατά Βάθος (Παράδειγμα) 3 4 2 Β F H 5 1 C Α 6 7 8 D G I E 9 Δομές Δεδομένων, 3ο Εξάμηνο 53
Αναζήτηση κατά Πλάτος (Παράδειγμα) 6 8 2 Β F H 3 1 C Α 4 7 9 D G I E 5 Δομές Δεδομένων, 3ο Εξάμηνο 54
Πολυπλοκότητα Αναζήτηση κατά βάθος και κατά πλάτος Πίνακας γειτνίασης: O(V 2 ) Λίστα γειτνίασης: O(V+E) Δομές Δεδομένων, 3ο Εξάμηνο 55
Ανάλυση Αλγορίθμων και Πολυπλοκότητα Δομές Δεδομένων, 3ο Εξάμηνο 56
Ασυμπτωτικός Συμβολισμός: Ορίζοντας το Big-O Παρότι αληθεύει ότι 7n-3 είναι O(n 5 ), ο big-o χαρακτηρισμός πρέπει να είναι όσο το δυνατό πιο μικρής τάξης. Απλοί κανόνες αγνόησε τις σταθερές επέλεξε την τιμή n που αυξάνεται ταχύτερα Παράδειγμα: Έστω ότι ένας αλγόριθμος έχει την ακόλουθη συνάρτηση αύξησης: f(n) = 16n 2 + 3n + 7 = n 2 + n - σβήσε τις σταθερές = n 2 - σβήσε τις μικρότερες τιμές του n Έστω f(n) = 8n 2 logn + 5n 2 +n O(n 2 logn) Σημείωση: Κάθε πολυώνυμο του n είναι O(n k ) δεδομένου ότι κάθε όρος του πολυωνύμου έχει εκθέτη k ή μικρότερο. Δομές Δεδομένων, 3ο Εξάμηνο 57
Ασυμπτωτικός Συμβολισμός Ειδικές κατηγορίες αλγορίθμων: σταθερού χρόνου (constant time) O(1) λογαριθμικός (logarithmic) O(log n) γραμμικός (linear) O(n) n log n O(n log n) δευτεροβάθμιος (quadratic) O(n 2 ) πολυωνυμικός (polynomial) O(n k ), k > 1 εκθετικός (exponential) O(a n ), n > 1 O(1) < O(logn) < O(n) < O(nlogn) < O(n 2 ) < O(n 3 ) < O(2 n ) Δομές Δεδομένων, 3ο Εξάμηνο 58
Επίλογος Δομές Δεδομένων, 3ο Εξάμηνο 59
Σχετικά Μαθήματα στο Πρόγραμμα Σπουδών ομές εδομένων (3 ο εξάμηνο) Αλγόριθμοι & Πολυπλοκότητα (4 ο εξάμηνο) Σχεδιασμός Βάσεων εδομένων (4 ο εξάμηνο) Βάσεις εδομένων (5 ο εξάμηνο) Αποθήκες και Εξόρυξη εδομένων (6 ο εξάμηνο) Ανάκτηση Πληροφοριών (6 ο εξάμηνο) ιαχείριση εδομένων στον Π.Ι. (7 ο εξάμηνο) Εργαστήριο Ανάπτυξης Εφαρμογών Β (7 ο εξάμηνο) Εργαστήριο Συστημάτων Επεξεργασίας Πληροφοριών Π.Ι. (8 ο εξάμηνο) 60