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

Σχετικά έγγραφα
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 4η: Σύνολα - Λεξικά Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

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

Insert(K,I,S) Delete(K,S)

ΕΝΟΤΗΤΑ 5 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

αντικειµένων/στοιχείων (π.χ., σύνολα αριθµών, λέξεων, ζευγών

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Ενότητα 7 Ουρές Προτεραιότητας

Δομές δεδομένων. Ενότητα 5η: Υλοποίηση Λεξικών με Ισοζυγισμένα Δένδρα Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

ΕΝΟΤΗΤΑ 5 ΥΛΟΠΟΙΗΣΗ ΛΕΞΙΚΩΝ ΜΕ ΙΣΟΖΥΓΙΣΜΕΝΑ ΔΕΝΔΡΑ

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Ενότητα 7 Ουρές Προτεραιότητας

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 2η: Στοίβες Ουρές - Λίστες Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Παναγιώτης Ανδρέου

ΗΥ240 - Παναγιώτα Φατούρου 1

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 3η: Δένδρα Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Ενότητα 2 Στοίβες Ουρές - Λίστες

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 10η: Γράφοι Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

ένδρα (tail, head) Γονέας Παιδί (ancestor, descendant) Φύλλο Εσωτερικός Κόµβος (leaf, non-leaf) που αποτελεί το γονέα του v.

οµές εδοµένων 3 ο Εξάµηνο ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

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

ΠΛΗ111. Ανοιξη Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΗΥ240 - Παναγιώτα Φατούρου 2

Διδάσκων: Κωνσταντίνος Κώστα

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

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

Ενότητα 2 Στοίβες Ουρές - Λίστες. ΗΥ240 - Παναγιώτα Φατούρου 1

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

Στοίβες Ουρές - Λίστες

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

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

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

ΕΝΟΤΗΤΑ 5 ΥΝΑΜΙΚΑ ΛΕΞΙΚΑ ΙΣΟΖΥΓΙΣΜΕΝΑ ΕΝ ΡΑ

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

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΟιβασικέςπράξειςπουορίζουντονΑΤΔ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας

ένδρα u o Κόµβοι (nodes) o Ακµές (edges) o Ουρά και κεφαλή ακµής (tail, head) o Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) o Μονοπάτι (pat

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

h/2. Άρα, n 2 h/2-1 h 2log(n+1). Πως υλοποιούµε τη LookUp()? Πολυπλοκότητα?

Ενότητα 2 Στοίβες Ουρές - Λίστες

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 9: Ταξινόμηση Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

ιαφάνειες παρουσίασης #10 (β)

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

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

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

Κεφάλαιο 6 Ουρές Προτεραιότητας

Δομές Δεδομένων Ενότητα 5

Cuckoo Hashing. Αλγόριθμοι και Πολυπλοκότητα. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Αλγόριθμοι Αναζήτησης

Θεωρητικό Μέρος. 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); } }

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

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1

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

Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND)

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

Μάθημα 22: Δυαδικά δέντρα (Binary Trees)

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

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

Ουρά Προτεραιότητας (priority queue)

Πρόβληµα (ADT) Λεξικού. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Λεξικό, Union - Find 2

IsEmptyList(L): επιστρέφει true αν L = < >, false

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος

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

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

Τηλ , Fax: , URL:

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

ιαφάνειες παρουσίασης #11

Transcript:

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ ΗΥ240 - Παναγιώτα Φατούρου 1 Σύνολα (Sets) q Τα µέλη ενός συνόλου προέρχονται από κάποιο χώρο U (universe) αντικειµένων/στοιχείων (π.χ., σύνολα αριθµών, λέξεων, ζευγών σύνολα αποτελούµενα από έναν αριθµό και µια λέξη, κ.ο.κ.). q Αν S είναι ένα υποσύνολο του U και x είναι ένα αντικείµενο του U, είτε x S ή x S. q Ένα σύνολο δεν περιέχει το ίδιο στοιχείο 2 ή περισσότερες φορές. q Ένα πολυσύνολο (multi-sets) µπορεί να περιέχει πολλαπλά στιγµιότυπα του ίδιου στοιχείου. Παραδείγµατα Εφαρµογών q Υπάρχει αυτός ο εργαζόµενος στη βάση δεδοµένων των εργαζοµένων; q Υπάρχει αυτό το τηλέφωνο στον ηλεκτρονικό τηλεφωνικό κατάλογο; q Υπάρχει αυτή η κράτηση στη βάση δεδοµένων µιας αεροπορικής ή ακτοπλοϊκής εταιρείας; ΗΥ240 - Παναγιώτα Φατούρου 2 1

Ενδεικτικές Λειτουργίες επί Συνόλων q MakeEmptySet(): Επιστρέφει το κενό σύνολο. q IsEmptySet(S): Επιστρέφει true αν S = και false διαφορετικά. q Insert(x,S): Προσθέτει το στοιχείο x στο σύνολο S ή δεν πραγµατοποιεί καµία ενέργεια αν x S. q Delete(x,S): Διαγράφει το στοιχείο x από το S ή δεν πραγµατοποιεί καµία ενέργεια αν x S. q Member(x,S): Επιστρέφει true αν το x είναι µέλος του συνόλου S και false διαφορετικά. q Size(S): Επιστρέφει S, το πλήθος των στοιχείων του S. q Union(S,T): επιστρέφει S T, το σύνολο που αποτελείται από τα στοιχεία εκείνα που είναι µέλη είτε του S ή του Τ. ΗΥ240 - Παναγιώτα Φατούρου 3 Ενδεικτικές Λειτουργίες επί Συνόλων Intersection(S,T): επιστρέφει S T, το σύνολο που αποτελείται από τα στοιχεία εκείνα που είναι µέλη και του S και του Τ. Difference(S,T): Επιστρέφει S \ T, το σύνολο των στοιχείων που ανήκουν στο S αλλά δεν ανήκουν στο Τ. Equal(S,T): Επιστρέφει true αν S = T και false διαφορετικά. Iterate(S,F): Εφαρµόζει τη λειτουργία F σε κάθε στοιχείο του S. Για χώρους στοιχείων στους οποίους ορίζεται η ιδιότητα της γραµµικής διάταξης: Min(S) (Μax(S)): επιστρέφει το µικρότερο (µεγαλύτερο) στοιχείο του S. ΗΥ240 - Παναγιώτα Φατούρου 4 2

Λεξικά Θεωρούµε ότι κάθε στοιχείο του συνόλου είναι ένα ζεύγος <K,I> όπου Κ είναι το κλειδί που χαρακτηρίζει µοναδικά το στοιχείο, και Ι είναι δεδοµένα τύπου Type που έχουν συσχετισθεί µε αυτό. Ο αφηρηµένος τύπος δεδοµένων που υποστηρίζει τις λειτουργίες: q MakeEmptySet(), q IsEmptySet(), q Insert(K,I,S), q Delete(K,S), q LookUp(K,S): Δεδοµένου ενός κλειδιού Κ, επιστρέφει τα δεδοµένα Ι, τέτοια ώστε <Κ,Ι> S και σε περίπτωση που δεν υπάρχει στοιχείο µε κλειδί Κ στο S, επιστρέφει nill, λέγεται λεξικό. ΗΥ240 - Παναγιώτα Φατούρου 5 Υλοποίηση Λεξικών µε Λίστες Αποθήκευση των στοιχείων του συνόλου σε µια λίστα: q Στατική λίστα (χρήση πίνακα) q Συνδεδεµένη Λίστα (απλά ή διπλά συνδεδεµένη). Υλοποίηση Λειτουργιών Συνδεδεµένη Λίστα Χρονική Πολυπλοκότητα LookUp(): Θ(n) Στη χειρότερη περίπτωση το στοιχείο είναι το τελευταίο στη λίστα! Χρονική Πολυπλοκότητα Insert(): Θ(n) Αναζήτηση και αν το στοιχείο υπάρχει δεν εισάγεται στη λίστα -> Η αναζήτηση κοστίζει Ο(n) Χρονική Πολυπλοκότητα Delete(): Θ(n) Αναζήτηση του στοιχείου και διαγραφή του -> Η αναζήτηση κοστίζει Ο(n) Στατική Λίστα Το µέγιστο πλήθος στοιχείων του συνόλου πρέπει να είναι γνωστό εξ αρχής. Ποια είναι η χρονική πολυπλοκότητα των LookUp, Insert, Delete; ΗΥ240 - Παναγιώτα Φατούρου 6 3

Υλοποίηση Λεξικών µε Λίστες - Αναµενόµενο Κόστος Υποθέτουµε πως η πιθανότητα p j η LookUp() να ψάχνει για το j-οστό στοιχείο είναι η ίδια για κάθε j, 1 j n. Έτσι, αν έχουµε n στοιχεία, η πιθανότητα είναι 1/n. Έστω ότι c j είναι το κόστος που πληρώνουµε για να βρούµε το j-οστό στοιχείο c j = j. Αναµενόµενο Κόστος = 1*1/n+2*1/n+ +n*1/n = (1+2+ +n)/n = n(n+1)/(2n) = (n+1)/2 = Θ(n). ΗΥ240 - Παναγιώτα Φατούρου 7 Υλοποίηση Λεξικών µε Λίστες - Αναµενόµενο Κόστος Διαφορετικές Πιθανότητες για διαφορετικά κλειδιά Κ 1,..., Κ n : τα κλειδιά στο σύνολο σε φθίνουσα διάταξη ως προς τη συχνότητα µε την οποία αναζητούνται µέσω της LookUp(). p 1 p 2... p n : πιθανότητα µια LookUp() να ψάχνει για τα Κ 1, Κ 2,..., Κ n, αντίστοιχα. Ο αναµενόµενος χρόνος αναζήτησης ελαχιστοποιείται όταν τα στοιχεία έχουν τη διάταξη Κ 1, Κ 2,..., Κ n στη λίστα: Γιατί αυτό είναι βέλτιστο; C opt = n k = 1 kp k ΗΥ240 - Παναγιώτα Φατούρου 8 4

Αναµενόµενο Κόστος Ας υποθέσουµε, για να καταλήξουµε σε άτοπο, ότι η διάταξη των κλειδιών που οδηγεί στο ελάχιστο αναµενόµενο πλήθος συγκρίσεων είναι Km 1, Km 2,, Km n, όπου η ακολουθία m 1,, m n, αποτελεί µετάθεση της 1,, n και ότι pm i < pm j για κάποιo i < j. Το κόστος C τότε είναι: C = ( Τότε, ανταλλάσσοντας τις θέσεις των Km i και Km j στην ακολουθία θα προέκυπτε µια άλλη ακολουθία, της οποίας το κόστος C θα ήταν: C = ( k = 1 k i k j ) + ip mk mi mj Έχουµε C C = ipm i + jpm j ipm j jpm i = (j-i)(pm j -pm i ) > 0 n kp + jp n kpm ) + ip k m + jp j mi k = 1 k i k j Άρα, η διάταξη Km 1, Km 2,, Km n δεν οδηγεί στο ελάχιστο αναµενόµενο πλήθος συγκρίσεων, το οποίο αντιτίθεται στην υπόθεση. ΗΥ240 - Παναγιώτα Φατούρου 9 Ευριστικό «Μετακίνησης στην Αρχή» (Move-To-Front) q Η πραγµατική κατανοµή πιθανότητας συνήθως δεν είναι γνωστή. q Το λεξικό µπορεί να αλλάζει µέγεθος κατά τη χρήση του. q Η µελέτη πιθανοτικών µοντέλων κάποιες φορές απέχει αρκετά από το τι γίνεται στην πράξη! Ευριστικό «Μετακίνησης στην Αρχή» «Μετά από κάθε επιτυχηµένη αναζήτηση, το στοιχείο που βρέθηκε µετακινείται στην αρχή της λίστας.» Χρονική Πολυπλοκότητα; q Συνδεδεµένη Λίστα; q Στατική Λίστα; ΗΥ240 - Παναγιώτα Φατούρου 10 5

Ευριστικό «Αλληλοµετάθεσης» (Transpose) Ευριστικό «Αλληλοµετάθεσης» (Transpose) «Μετά από κάθε επιτυχηµένη αναζήτηση, το στοιχείο που βρέθηκε µετακινείται µια θέση προς την αρχή της λίστας (δηλαδή ανταλλάσσεται µε το προηγούµενό του στη λίστα)». Σύγκριση µεταξύ των δύο Ευριστικών q Το ευριστικό Transpose αποδεικνύεται ότι έχει καλύτερο αναµενόµενο κόστος από το MoveToFront. q Ωστόσο, το Transpose σταθεροποιείται σε µια σταθερή καλή κατάσταση πιο αργά από το MoveToFront. ΗΥ240 - Παναγιώτα Φατούρου 11 Ευριστικό «Μετακίνησης στην Αρχή» - Αναµενόµενο Κόστος Ας υποθέσουµε ότι η διαδικασία αναζήτησης κλειδιών έχει πραγµατοποιηθεί για αρκετά µεγάλο χρονικό διάστηµα, ώστε όλα τα κλειδιά να έχουν αναζητηθεί αρκετές φορές και η λίστα να βρίσκεται σε κάποιου είδους «σταθερή» κατάσταση. p(i,j): πιθανότητα ότι το κλειδί K i προηγείται του K j στη λίστα Ποια είναι η τιµή της p(i,j) συναρτήσει των p i και p j ; Προκειµένου το K i να βρίσκεται πριν από το K j στη λίστα θα πρέπει η τελευταία LookUp(K i,s) να έχει συµβεί πιο πρόσφατα από την τελευταία LookUp(K j,s). ΗΥ240 - Παναγιώτα Φατούρου 12 6

Ευριστικό «Μετακίνησης στην Αρχή» - Αναµενόµενο Κόστος Αν επικεντρωθούµε στην τελευταία LookUp που πραγµατοποιείται για κάποιο από τα κλειδιά K i και K j και αγνοήσουµε τις υπόλοιπες, τότε p(i,j) είναι η πιθανότητα, από τα δύο αυτά δυνατά ενδεχόµενα, η LookUp να αναζητά το K i. Άρα, p(i,j) = p i / (p i +p j ). Το αναµενόµενο πλήθος κλειδιών που προηγούνται του K j στη λίστα είναι εποµένως pi (, j). i j Άρα, το αναµενόµενο πλήθος συγκρίσεων για να βρεθεί το κλειδί K j είναι: 1 + pi (, j). i j ΗΥ240 - Παναγιώτα Φατούρου 13 Ευριστικό «Μετακίνησης στην Αρχή» - Αναµενόµενο Κόστος Καταλήγουµε πως το αναµενόµενο πλήθος συγκρίσεων που απαιτούνται για την εύρεση ενός κλειδιού είναι: n n n C MTF = pj(1 + p( i, j)) = pj + pj p( i, j) = 1 + pjp( i, j) j= 1 i j j= 1 j= 1 i j i j pp pp = 1+ i j = 1+ 2 i j p + p p + p i j i j i< j i j pp p p σ = = p p ( j 1), since 1, i, j n n i j i i j j i< jpi + pj j= 1 1 i< jpi + pj j= 1 pi + p n j = C 1, since p = 1. OPT j= 1 j Άρα, C MFT /C OPT (1+2σ)/(1+σ) = (2+2σ -1)/(1+σ) = 2(1+σ)/(1+σ) 1/(1+σ) = 2 1/(1+σ) < 2. Το αναµενόµενο κόστος του MoveToFront είναι το πολύ 2 φορές χειρότερο από εκείνο του βέλτιστου αλγόριθµου! ΗΥ240 - Παναγιώτα Φατούρου 14 7

Ταξινοµηµένες Στατικές Λίστες q Χρήση πίνακα για αποθήκευση των στοιχείων του συνόλου. q Κάθε στοιχείο του πίνακα είναι ένα struct µε πεδία Key και data. q Τα στοιχεία του πίνακα είναι ταξινοµηµένα βάσει του κλειδιού τους. Type BinarySearchLookUp(key K, table T[0..n-1]) /* Return information stored with key K in T, or nill if K is not in T */ left = 0; right = n-1; repeat forever if (right < left) then return nill; else middle = (left+right)/2 ; if (K == T[middle]->Key) then return T(middle]->data; else if (K < T[middle]->Key) then right = middle-1; else left = middle+1; ΗΥ240 - Παναγιώτα Φατούρου 15 Δυνατές Εκτελέσεις BinarySearchLookUp Σχήµα 6.1: Lewis & Denenberg, Data Structures & Their Algorithms, Addison-Wesley, 1991 q Το δένδρο περιγράφει όλες τις δυνατές εκτελέσεις της ΒinarySearch() σε ένα πίνακα 10 στοιχείων. Θεώρηµα 1 Ο αλγόριθµος δυαδικής αναζήτησης εκτελεί O(logn) συγκρίσεις για κάθε αναζήτηση στοιχείου σε πίνακα µε n στοιχεία. ΗΥ240 - Παναγιώτα Φατούρου 16 8

Ταξινοµηµένα Δυαδικά Δένδρα (Δένδρα Δυαδικής Αναζήτησης) 5 10 15 25 55 Σχήµα 12: Cormen, Leiserson, Rivest & Stein, Εισαγωγή στους Αλγορίθµους, Πανεπιστηµιακές Εκδόσεις Κρήτης, 2006 Είναι δυαδικά δένδρα για τα οποία ισχύει η ακόλουθη ιδιότητα: Για κάθε κόµβο η τιµή του κλειδιού του είναι µεγαλύτερη από όλες τις τιµές των κόµβων του αριστερού υποδένδρου του και µικρότερη από όλες τις τιµές των κόµβων του δεξιού υποδένδρου του. Κάθε κόµβος είναι ένα struct µε πεδία key, data, LC, RC. q Το µέγιστο ύψος δυαδικού δένδρου µε n κόµβους είναι n-1. Γιατί; q Το ελάχιστο ύψος δυαδικού δένδρου µε n κόµβους είναι logn. Γιατί; Ποια η σχέση των ταξινοµηµένων δυαδικών δένδρων και της ενδοδιατεταγµένης διάσχισης? ΗΥ240 - Παναγιώτα Φατούρου 17 Ταξινοµηµένα Δένδρα Αναδροµική Έκδοση function BinarySearchTreeLookUp( key K, pointer R):Type /* Εύρεση του κλειδιού Κ στο δένδρο µε ρίζα P και επιστροφή του πεδίου data ή nill αν το κλειδί δεν υπάρχει στο δένδρο */ if (R == NULL) return nill; else if (K == R->key) return R->data; else if (K < R->key) return(binarytreelookup(k, R->LC)); else return(binarytreelookup(k, R->RC)); Χρονική πολυπλοκότητα; Μη-Αναδροµική Έκδοση function BinarySearchTreeLookUp ( key K, pointer R):Type /* Εύρεση του κλειδιού Κ στο δένδρο µε ρίζα P και επιστροφή του πεδίου data ή nill αν το κλειδί δεν υπάρχει στο δένδρο */ P = R; while (P!= NULL && K!= P->key) { if (K < P->key) P = P->LC; else P = P->RC; if (P!= NULL) return(p->data); else return nill; ΗΥ240 - Παναγιώτα Φατούρου 18 9

Ταξινοµηµένα Δένδρα µε Κόµβο Φρουρό S Σχήµα 4.16: Ι. Μανωλόπουλος, Δοµές Δεδοµένων, Μια προσέγγιση µε την Pascal, Εκδόσεις Art of Text. Ποια η χρησιµότητα του κόµβου φρουρού; function BinarySearchTreeLookUp( key K, pointer R):Type P = R; while (P!= NULL && K!= P->key) { if (K < P->key) P = P->LC; else P = P->RC; if (P!= NULL) return(p->data); else return nill; function BinarySearchTreeGuardLookUp( key K, pointer R):Type G->Key = K; P = R; while (K!= P->Key) { if (K < P->key) P = P->LC; else P = P->RC; if (P!= G) return(p->data); else return nill; ΗΥ240 - Παναγιώτα Φατούρου 19 Ταξινοµηµένα Δένδρα - Ελάχιστο και Μέγιστο Στοιχείο function BinarySearchTreeMinimum( pointer R): info /* o R είναι δείκτης στη ρίζα του δένδρου */ pointer P; P = R; if (P == NULL) return error; while (P->LC!= NULL) P = P->LC; return(p->data); function BinarySearchTreeMaximum( pointer R): info /* o R είναι δείκτης στη ρίζα του δένδρου */ Πολυπλοκότητα; pointer P; P = R; if (P == NULL) return error; while (P->RC!= NULL) P = P->RC; return(p->data); ΗΥ240 - Παναγιώτα Φατούρου 20 10

Ταξινοµηµένα Δένδρα Επόµενος στην Ενδοδιατεταγµένη Διάσχιση Στοιχείο µε αµέσως µεγαλύτερο και αµέσως µικρότερο κλειδί από το κλειδί ενός κόµβου v Το πρόβληµα είναι ίδιο µε την εύρεση του επόµενου και προηγούµενου κόµβου του v στην ενδοδιατεταγµένη διάσχιση του δένδρου. q 2 q q Πως θα βρούµε τον επόµενο του κόµβου στον οποίο δείχνει ο q 1, στην ενδοδιατεταγµένη διάσχιση; Πως θα βρούµε τον επόµενο του κόµβου στον οποίο δείχνει ο q 2, στην ενδοδιατεταγµένη διάσχιση; Πολυπλοκότητα; q 1 ΗΥ240 - Παναγιώτα Φατούρου 21 Ταξινοµηµένα Δένδρα - Εισαγωγή function BinarySearchTreeInsert(key K, Type I, pointer R): pointer /* ο R είναι δείκτης στη ρίζα του δένδρου */ pointer P, Q, Prev = NULL; P = R; while (P!= NULL) { if (P->Key == K) { P->data = I; return R; Prev = P; if (K < P->Key) P = P->LC; else P = P->RC; /* Δηµιουργία & προσθήκη νέου κόµβου */ Q = NewCell(Node); Q->Key = K; Q->data = I; Q->LC = Q->RC = NULL; if (Prev == NULL) return Q; else if (K < Prev->Key) Prev->LC = Q; else Prev->RC = Q; return R; 5 nill 6 Q Αναζήτηση κόµβου µε κλειδί ίσο µε K. Αν τέτοιος κόµβος δεν βρεθεί, ο δείκτης prev, µετά το πέρας της ανακύκλωσης, θα δείχνει στον κόµβο γονέα του προς εισαγωγή κόµβου! Παράδειγµα Εισαγωγή κόµβου µε κλειδί 6 ΗΥ240 - Παναγιώτα Φατούρου 22 P nill prev 11

Ταξινοµηµένα Δένδρα - Διαγραφή Περιπτώσεις 1) Ο προς διαγραφή κόµβος είναι φύλλο. Διαγράφουµε τον κόµβο χωρίς να εκτελέσουµε κάποια επιπρόσθετη ενέργεια. 2) Ο προς διαγραφή κόµβος είναι εσωτερικός αλλά έχει µόνο ένα παιδί. Αντικαθιστούµε τον κόµβο µε το µοναδικό παιδί του. 3) Ο προς διαγραφή κόµβος είναι εσωτερικός µε δύο παιδιά. Αντικαθιστούµε τον κόµβο µε τον επόµενο ή τον προηγούµενό του στην ενδο-διατεταγµένη διάσχιση. Αυτός είναι κόµβος µε το πολύ ένα παιδί. Γιατί; α. β. γ. δ. Σχήµα 6.4: Lewis & Denenberg, Data Structures & Their Algorithms, Addison- Wesley, 1991 a. Αρχικό Δένδρο, β. Διαγραφή Ν από αρχικό δένδρο, γ. Διαγραφή Μ από αρχικό δένδρο, δ. Διαγραφή F από αρχικό δένδρο ΗΥ240 - Παναγιώτα Φατούρου 23 Ταξινοµηµένα Δένδρα - Διαγραφή Υποθέτουµε πως το δένδρο είναι διπλά συνδεδεµένο, δηλαδή κάθε κόµβος έχει ένα δείκτη p που δείχνει στο γονικό κόµβο. pointer BinaryTreeDelete(pointer R, Key K) { /* Ο R είναι η διεύθυνση ενός δείκτη στη ρίζα του δένδρου */ /* Το Κ είναι το κλειδί του προς διαγραφή κόµβου */ if (z->lc == NULL z->rc == NULL) y = z; else y = TreeSuccessor(z); if (y->lc!= NULL) x = y->lc; else x = y->rc; if (x!= NULL) x->p = y->p; if (y->p == NULL) return x; // διαγραφή ρίζας else if (y == y->p->lc) y->p->lc = x; else y->p->rc = x; if (y!= z) z->key = y->key; if y has other fields copy them two; return R; x ΗΥ240 - Παναγιώτα Φατούρου 24 y x=null Σχήµα 13.4: Cormen, Leiserson & Rivest, Introduction to Algorithms, MIT Press, 1990 x y x y x z 12

Ταξινοµηµένα Δένδρα Θεώρηµα Η χρονική πολυπλοκότητα των λειτουργιών Insert(), Delete() και LookUp() σε ταξινοµηµένα δυαδικά δένδρα είναι O(h), όπου h το ύψος του δένδρου. Ποιο πρόβληµα µπορεί να προκύψει µε συνεχή αντικατάσταση του κόµβου µε τον επόµενό του στην ενδο-διατεταγµένη διάσχιση? ΗΥ240 - Παναγιώτα Φατούρου 25 Στατικά Ταξινοµηµένα Δυαδικά Δένδρα q Υπάρχουν κλειδιά που αναζητούνται πιο συχνά και άλλα που αναζητούνται πιο σπάνια. q Σε µια λίστα, κλειδιά που αναζητούνται συχνά κρατούνται όσο το δυνατόν πιο κοντά στην αρχή της λίστας. Ποιο είναι το ανάλογο του ευριστικού Μετακίνησης στην Αρχή» σε ένα ταξινοµηµένο δυαδικό δένδρο? q Κάθε φορά που αναζητείται ένα κλειδί µεταφέρεται στη ρίζα. q Ωστόσο, αυτό θα πρέπει να γίνει προσεκτικά ώστε να µην καταστρέφεται η ιδιότητα ταξινόµησης του δένδρου. Αυτό το επιτυγχάνουν τα δένδρα Splay. ΗΥ240 - Παναγιώτα Φατούρου 26 13

Αναφορές Το υλικό της ενότητας αυτής περιέχεται στα ακόλουθα βιβλία: Harry Lewis and Larry Denenberg, Data Structures and Their Algorithms, Harper Collins Publishers, Inc., New York, 1991 Chapter 6: List and Tree Implementations of Sets Cormen, Leiserson, Rivest & Stein, Εισαγωγή στους Αλγορίθµους, Πανεπιστηµαικές Εκδόσεις Κρήτης, 2006. Κεφάλαιο 12: Δυαδικά Δένδρα Αναζήτησης Cormen, Leiserson & Rivest, Introduction to Algorithms, MIT Press, 1990. Chapter 13: Binary Search Trees Ι. Μανωλόπουλος, Δοµές Δεδοµένων, Μια προσέγγιση µε την Pascal, Εκδόσεις Art of Text. Κεφάλαιο 4: Δένδρα ΗΥ240 - Παναγιώτα Φατούρου 27 14