«Μελέτη δομών τυχαίων δένδρων αναζήτησης»

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "«Μελέτη δομών τυχαίων δένδρων αναζήτησης»"

Transcript

1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Διπλωματική εργασία «Μελέτη δομών τυχαίων δένδρων αναζήτησης» Όνομα: ΔΗΜΗΤΡΑ ΚΑΤΑΝΟΥ Επιβλέπων καθηγητής: Παναγιώτης Μποζάνης Βόλος, Φεβρουάριος 2011

2 Μελέτη δομών τυχαίων δένδρων αναζήτησης Δήμητρα Κατάνου Παναγιώτης Μποζάνης Επίκουρος Καθηγητής Παν. Θεσσαλίας.. Δημήτριος Κατσαρός Λέκτορας Παν. Θεσσαλίας Βόλος, Φεβρουάριος 2011

3 Ευχαριστίες Αρχικά θα ήθελα να ευχαριστήσω θερμά τον καθηγητή μου, κ. Παναγιώτη Μποζάνη για την αμέριστη βοήθεια που μου προσέφερε σε όλες τις φάσεις συγγραφής αυτής της εργασίας και για τις πολύτιμες συμβουλές του πάνω σε ερωτήματα που προέκυπταν κατά τη διάρκεια της εκπόνησης της διατριβής. Στη συνέχεια, θα ήθελα να ευχαριστήσω τους γονείς μου, Γιάννη και Εύα, για τη στήριξη, που μου έδειξαν όλα αυτά τα χρόνια. Χωρίς την βοήθεια τους, την καθοδήγησή τους, αλλά κυρίως την αγάπη τους δε θα κατάφερνα να ολοκληρώσω τις σπουδές μου και να πραγματοποιήσω τα όνειρά μου. Τους οφείλω πολλά και τους υπερευχαριστώ. Τέλος, ένα πολύ μεγάλο ευχαριστώ για τις δύο αγαπημένες μου φίλες, Κατερίνα και Κυριακή Γρατσία, όχι μόνο για τη συμπαράστασή τους, αλλά και για όλα αυτά τα υπέροχα χρόνια που πορευτήκαμε μαζί μέσα από δυσκολίες αλλά κυρίως μέσα από πολύ ευτυχισμένες στιγμές, δημιουργώντας μια αληθινή, αδελφική σχέση.

4 Περίληψη Στην παρούσα διπλωματική εργασία έγινε μια μελέτη τυχαίων δομών και κυρίως, τυχαίων δυαδικών δένδρων αναζήτησης. Αφού παρουσιάστηκε μια θεωρητική προσέγγιση των δομών, έγινε μελέτη διαφόρων αλγορίθμων ενημέρωσης των δένδρων και περιγραφή τους σε ψευδογλώσσα, δηλαδή αλγόριθμοι ένθεσης και διαγραφής στοιχείων, πραγματοποιήθηκε η υλοποίηση τους σε γλώσσα προγραμματισμού Java και στη συνέχεια δόθηκε έμφαση στην ανάλυση της πολυπλοκότητας των τυχαίων δομών. Η διάρθρωση της ύλης έγινε ως εξής: Το Κεφάλαιο 1 αποτελεί μια εισαγωγή σε βασικές δομές, όπως η δομή λεξικού και τα δένδρα αναζήτησης. Αυτές οι έννοιες είναι χρήσιμες για τα επόμενα κεφάλαια. Επίσης γίνεται μια σύντομη αναφορά και περιγραφή και άλλων δομών δένδρων αναζήτησης. Στο Κεφάλαιο 2 γίνεται περιγραφή διάφορων τυχαίων δομών. Γίνεται αναλυτική περιγραφή των τυχαίων δένδρων αναζήτησης και περιγράφονται τυχαιοποιημένοι αλγόριθμοι για διάφορα μοντέλα των τυχαίων δένδρων. Παρουσιάζονται στιγμιότυπα διαδοχικών ενθέσεων/αποσβέσεων από τα δένδρα, ώστε να γίνεται κατανοητό από τον αναγνώστη πως αναπτύσσονται τα δένδρα. Στο Κεφάλαιο 3 γίνεται μελέτη για την απόδοση των αλγορίθμων που παρουσιάστηκαν στο προηγούμενο κεφάλαιο. Παρουσιάζονται οι γραφικές παραστάσεις που προέκυψαν από μετρήσεις Στο Κεφάλαιο 4 παραθέτουμε τις βασικές classes του κώδικα, από την υλοποίηση των αλγορίθμων.

5 Abstract This thesis is a study of random data structures and most importantly about random binary search trees. Having presented a theoretical approach to the structures, we studied various update algorithms of trees and described then in pseudocode, like insertion and deletion of data, they were implemented in Java and then we emphasized the analysis of the complexity of data structures. Chapter 1 is an introduction to basic structures such as the dictionary structure and the search trees. These concepts are useful in subsequent chapters. There is also quick reference and description of other search trees structures. In Chapter 2 there is a description of various random structures. There is a detailed description of random search trees and we describe randomized algorithms for various models of random trees. We present snapshots of subsequent insertions/deletions from the trees, in order to be understood by the reader, how the trees develop. In Chapter 3 there is a study of the performance of the algorithms presented in the previous chapters. We show the graphs obtained from measurements. In Chapter 4 we present the main classes of the code, from the implementation of the algorithms.

6 Περιεχόμενα 1 Εισαγωγικά 1.1 Δομή Λεξικού Δένδρα αναζήτησης Ορισμός Δυναμικών Δένδρων Δυαδικά Δένδρα Αναζητήσεως Δένδρα AVL Ερυθρόμαυρα δένδρα Άλλοι τύποι ισοζυγισμένων δένδρων αναζήτησης Τυχαίες Δομές και Τυχαιοποιημένοι Αλγόριθμοι 2.1 Τυχαίες Δομές Λίστες Αναπηδήσεως Treaps Τυχαία δυαδικά δένδρα αναζήτησης Τυχαιοποιημένοι αλγόριθμοι Randomized Binary Search Trees Random Root Model Priority Model No Extra Space Model Απόδοση 3.1 Μετρήσεις Γραφικές Παραστάσεις Randomized Binary Search Trees Random Root Model Priority Model No Extra Space Model Κώδικας 4.1 Randomized Binary Search Tree Random Root Model-Priority-No extra Space Βιβλιογραφία... 51

7 Κεφάλαιο 1 Εισαγωγικά 1.1 Δομή Λεξικού Έστω ένα σύνολο από διατεταγμένες δυάδες, όπου η κάθε δυάδα αποτελείται από ένα κλειδί, από ένα σύνολο διατεταγμένων κλειδιών και από μια συσχετιζόμενη πληροφορία. Αυτά τα ζεύγη ονομάζονται στοιχεία (items). Μια δομή επί αυτού του συνόλου ονομάζεται δομή λεξικού (dictionary data structure)[3]. Αυτή η δομή πρέπει να ικανοποίει τον αφηρημένο τύπο δεδομένων (ΑΤΔ), ο οποίος κάνει: Εύρεση ενός στοιχείου. Η αναζήτηση του στοιχείου γίνεται βάσει του κλειδιού του, κι επιστρέφεται η αντίστοιχη πληροφορία Ένθεση ενός στοιχείου. Γίνεται εισαγωγή ενός στοιχείου, το οποίο αποτελείται από μια πληροφορία info και ένα κλειδί key. Απόσβεση ενός στοιχείου. Η διαγραφή του στοιχείου γίνεται βάσει του κλειδιού. Σχήμα 1.1: Γραφική αναπαράσταση στοιχείου λεξικού 1

8 1.2 Δένδρα αναζήτησης Ορισμός Δυναμικών Δένδρων Τα δυναμικά δένδρα (dynamic trees)[3] είναι δένδρα τα οποία προκύπτουν με την ένθεση και απόσβεση κόμβων, δηλαδή με δύο πράξεις όπου η πρώτη προσθέτει ένα κόμβο ως αριστερό ή δεξί παιδί και η δεύτερη αφαιρεί έναν κόμβο Δυαδικά Δένδρα Αναζητήσεως Τα δυαδικά δένδρα αναζητήσεως (binary search trees)[3] προκύπτουν από τα δυναμικά δυαδικά δένδρα βάσει της δομής Λεξικού. Για κάθε κόμβο u του δυαδικού δένδρου αναζήτησης ισχύει ότι το κλειδί του αριστερού παιδιού του u είναι μικρότερο από αυτό του u και το κλειδί του δεξιού παιδιού του u είναι μεγαλύτερο από του u. Οι τρεις βασικές πράξεις σε ένα δυαδικό δένδρο αναζήτησης είναι: Αναζήτηση στοιχείου. Η αναζήτηση γίνεται με βάση το κλειδί ενός κόμβου και σε περίπτωση που βρεθεί, επιστρέφεται η πληροφορία του. Εισαγωγή στοιχείου. Η εισαγωγή γίνεται μόνο όταν το στοιχείο δεν υπάρχει ήδη μέσα στο δένδρο. Διαγραφή στοιχείου. Η διαγραφή περιλαμβάνει μια αναζήτηση του στοιχείου βάσει του κλειδιού του και σε περίπτωση που βρεθεί διαγράφεται. Σχήμα 1.2: Γραφική αναπαράσταση κόμβου δυαδικού δένδρου αναζήτησης 2

9 1.2.3 Δένδρα AVL Το δένδρο AVL[3] είναι ένα δυαδικό δένδρο στο οποίο μπαίνουν όρια στο ύψος του, δηλαδή τα ύψη των υποδένδρων κάθε εσωτερικού κόμβου του, διαφέρουν το πολύ κατά ένα. Το AVL χαρακτηρίζεται από τις επαναζυγιστικές πράξεις (rebalancing operations ), οι οποίες προσπαθούν να διατηρήσουν τη διαφορά ύψους στη μονάδα. Οι βασικές πράξεις στα AVL δένδρα είναι: Αναζήτηση στοιχείου. Η αναζήτηση ενός στοιχείου γίνεται με βάση το κλειδί του, όπως και στα δυαδικά δένδρα αναζήτησης. Εισαγωγή στοιχείου. Σε περίπτωση παραβίασης της συνθήκης ισοζύγισης μετά την ένθεση ενός κόμβου, χρειάζεται να γίνει μια απλή περιστροφή ή μια διπλή περιστροφή ώστε να επανέλθει η ισορροπία στο δένδρο. Διαγραφή στοιχείου. Και εδώ, μόλις διαγραφεί ο κόμβος, χρειάζεται επαναζύγιση για τη διατήρηση της ισορροπίας. Τα δένδρα AVL επιδεικνύουν λογαριθμική συμπεριφορά και για τις τρεις πράξεις. Σχήμα 1.3: Παράδειγμα επαναζυγιστικής πράξης με την εισαγωγή του στοιχείου Ερυθρόμαυρα δένδρα Το ερυθρόμαυρο red-black[3] δένδρο είναι ένα δυαδικό δένδρο όπου όλοι οι κόμβοι του είναι χρωματισμένοι, κόκκινοι ή μαύροι ως εξής: η ρίζα και τα φύλλα είναι μαύρα, κάθε κόκκινος κόμβος έχει μαύρα παιδιά και όλα τα μονοπάτια από τη ρίζα προς τα φύλλα έχουν τον ίδιο αριθμό μαύρων κόμβων. Οι βασικές πράξεις στα ερυθρόμαυρα δένδρα είναι: Αναζήτηση στοιχείου. Η αναζήτηση ενός στοιχείου γίνεται με βάση το κλειδί του, όπως και στα δυαδικά δένδρα αναζήτησης. Εισαγωγή στοιχείου. Η ένθεση του στοιχείου γίνεται όπως και στα απλά αζύγιστα δυαδικά δένδρα. Σε περίπτωση που παραβιαστεί κάποιος από τους κανόνες του ορισμού, αυτό λύνεται είτε με απλή/διπλή περιστροφή ή με αντιστροφή χρωμάτων. 3

10 Απόσβεση στοιχείου. Η διαγραφή γίνεται κανονικά εάν ο κόμβος που στεγάζει το στοιχείο είναι κόκκινος. Σε περίπτωση που είναι μαύρος όμως, χρειάζονται να γίνουν κάποιες επιπλέον ενέργειες για την αποκατάσταση της ισορροπίας, όπως περιστροφές ή αλλαγή χρώματος. Σχήμα 1.4: Παράδειγμα αντιστροφής χρωμάτων με την ένθεση του στοιχείου Άλλοι τύποι ισοζυγισμένων δένδρων αναζήτησης Κάνουμε μια σύντομη αναφορά σε άλλους τύπους δένδρων αναζήτησης. Δένδρα-(a, b) Τα δένδρα-(a, b)[3] αποτελούν ισοζυγισμένα δένδρα τέτοια ώστε όλα τα φύλλα τους έχουν το ίδιο βάθος, η ρίζα έχει τουλάχιστον δύο παιδιά και το πολύ b, όπου b 2α, α 2 και το πλήθος των παιδιών των υπόλοιπων εσωτερικών κόμβων είναι μεταξύ α και b. BB[a] δένδρα Τα δένδρα BB[a][9] ή weight-balanced trees είναι δυαδικά δένδρα αναζήτησης που είναι κατασκευασμένα βάσει των πιθανοτήτων αναζήτησης του κάθε κόμβου. Σε κάθε υποδένδρο, ρίζα είναι ο κόμβος με το μεγαλύτερο βάρος, δηλαδή με την μεγαλύτερη πιθανότητα. Έχουν αρκετές ομοιότητες με τα treaps, που θα εξετάσουμε σε επόμενο κεφάλαιο. Height-ratio balanced trees Τα δένδρα height-ratio balanced[10] είναι παρόμοια με τα weight balanced trees, όμως είναι κατασκευασμένα βάσει του ύψους. 4

11 Κεφάλαιο 2 Τυχαίες Δομές και Τυχαιοποιημένοι Αλγόριθμοι 2.1 Τυχαίες Δομές Οι τυχαίες δομές (randomized) αποτελούν κι αυτές δομές λεξικού, οι οποίες βασίζουν την προσαρμογή τους στις μεταβολές του υποκείμενου συνόλου, σε τυχαίες επαναζυγιστικές πράξεις, σε αντίθεση με τις δομές που εξετάσαμε πιο πάνω, οι οποίες λύνουν το πρόβλημα λεξικού, ωστόσο η αποτελεσματικότητα τους βασίζεται σε συμμετρικές επαναζυγιστικές πράξεις, γεγονός που αυξάνει την πολυπλοκότητα και την δυσκολία της υλοποίησης. Οι τυχαίες δομές έχουν απλούστερη υλοποίηση και χαμηλότερο βαθμό πολυπλοκότητας καθώς βασίζονται στην τυχαιότητα των δεδομένων Λίστες Αναπηδήσεως Οι λίστες αναπηδήσεως (skip lists)[8] είναι δομές που βασίζονται σε παράλληλες συνδεδεμένες λίστες. Αυτό που πετυχαίνουμε με τις λίστες αναπηδήσεως, είναι ότι σε μια αναζήτηση δε χρειάζεται να εξετάζουμε όλους τους κόμβους μιας λίστας αλλά με τη χρήση δεικτών μπορούμε να υλοποιήσουμε λίστες υψηλότερου επιπέδου, οι οποίες περιέχουν τα μισά ή και λιγότερα στοιχεία από την αρχική. Όλες οι πράξεις εγγυώνται λογαριθμικό κόστος. Σχήμα 2.1: Λίστα Αναπηδήσεως Στο σχήμα 2.1 βλέπουμε την αρχική διασυνδεδεμένη λίστα που περιλαμβάνει όλα τα στοιχεία ενώ στο δεύτερο επίπεδο μπορούμε να μειώσουμε τα στοιχεία που θα 5

12 εξετάσουμε σε μια αναζήτηση σε [n/2]+1, με τη χρήση δεικτών προς τους κόμβους που βρίσκονται δυο θέσεις πιο μπροστά. Στα επόμενα επίπεδα μειώνονται ακόμα περισσότερο οι κόμβοι, καθώς οι δείκτες τώρα δείχνουν σε στοιχεία που βρίσκονται τοποθετημένα 4 θέσεις πιο μπροστά και έτσι τα στοιχεία μειώνονται σε [n/4]+2. Έτσι το κόστος αναζητήσεως μειώνεται σε λογαριθμικό Treaps Οι δομές treaps (δεν υπάρχει μετάφραση του όρου) προκύπτουν από τη συγχώνευση των δομών tree και heap (σωρός). Αυτό που τα διαφοροποιεί από τα δένδρα αναζητήσεως είναι ότι το κάθε στοιχείο, εκτός από το κλειδί που το χαρακτηρίζει, σχετίζεται και με μια προτεραιότητα (priority), δηλαδή έναν αριθμό από ένα ολικώς διατεταγμένο σύμπαν. Συνεπώς, το treap αποτελείται από ένα δυαδικό δένδρο αναζήτησης, όπου οι κόμβοι ακολουθούν, ως προς τα κλειδιά τη συμμετρική διάταξη, ενώ, ως προς τις προτεραιότητες ακολουθούν τη διάταξη σωρού 1. Τελικά, το treap αποτελεί ένα δένδρο αναζητήσεως χωρίς τις προτεραιότητες, ενώ, ως προς αυτές ένας κόμβος διαθέτει στοιχείο με μεγαλύτερο αριθμό προτεραιότητας από του πατέρα του. Οι βασικές πράξεις των treaps είναι: Αναζήτηση στοιχείου. Η αναζήτηση ενός στοιχείου γίνεται με βάση το κλειδί του, όπως και στα δυαδικά δένδρα αναζήτησης. Εισαγωγή στοιχείου. Το στοιχείο εισάγεται στο δένδρο βάσει του κλειδιού του σε έναν κόμβο-φύλλο και στη συνέχεια βάσει της προτεραιότητας του, όσο η συνθήκη σωρού παραβιάζεται προάγουμε τον κόμβο, με δεξιές ή αριστερές περιστροφές. Απόσβεση στοιχείου. Το στοιχείο που πρόκειται να διαγραφεί, εντοπίζεται και με διαδοχικές δεξιές ή αριστερές απλές περιστροφές υποβιβάζεται μέχρι να βρεθεί σε θέση φύλλου, όπου και διαγράφεται. Και εδώ, όπως και στις skip lists, το κόστος και των τριών πράξεων είναι λογαριθμικό. Στο επόμενο σχήμα παρουσιάζεται ένα treap, όπου σε κάθε κόμβο αναγράφονται οι δυο τιμές με τον εξής συμβολισμό: [κλειδί: προτεραιότητα]. 1 Στη διάταξη σωρού μέγιστου στοιχείου, το στοιχείο κάθε κόμβου είναι μεγαλύτερο από αυτά των παιδιών του ενώ στη διάταξη σωρού ελάχιστου στοιχείου, συμβαίνει το αντίθετο. 6

13 Σχήμα 2.2: Παράδειγμα ενός treap Τυχαία δυαδικά δένδρα αναζήτησης Τα τυχαία δυαδικά δένδρα αναζήτησης (random binary search trees) είναι δυαδικά δένδρα αναζήτησης που προκύπτουν κάνοντας μόνο τυχαίες ενθέσεις στοιχείων. Μια εισαγωγή σε ένα δυαδικό δένδρο αναζήτησης είναι τυχαία μόνο εάν για κάθε κλειδί που εισάγεται, η πιθανότητα να βρεθεί σε οποιοδήποτε από τα διαστήματα που καθορίζουν τα κλειδιά που βρίσκονται ήδη μέσα στο δένδρο, είναι ίδια. Η αναμενόμενη συμπεριφορά όλων των πράξεων στα τυχαία δυαδικά δένδρα αναζήτησης είναι O(log n). 2.2 Τυχαιοποιημένοι αλγόριθμοι Εξετάζουμε τυχαιοποιημένους αλγορίθμους εισαγωγής και διαγραφής στοιχείων σε διάφορα ισοδύναμα μοντέλα που δυναμικά διατηρούν δομή λεξικού σε ένα δυαδικό δένδρο αναζήτησης. Δεν μας ενδιαφέρει η τυχαιότητα των στοιχείων που εισάγονται ή διαγράφονται αλλά μπορούμε να παράγουμε αυτήν την τυχαιότητα μέσα από τους αλγορίθμους ένθεσης- απόσβεσης. Όλοι οι αλγόριθμοι που παρουσιάζονται παρακάτω εξασφαλίζουν τυχαιότητα δηλαδή τα δένδρα που παράγονται μετά την εφαρμογή αυτών των αλγορίθμων παραμένουν τυχαία δυαδικά δένδρα αναζήτησης. Οι αλγόριθμοι που προϋπήρχαν[1] βασίζονταν στην τυχαία σειρά εισαγωγής και διαγραφής στοιχείων, δηλαδή οι ερευνητές εξέταζαν την τυχαιότητα στα δεδομένα και έτσι ενώ οι αλγόριθμοι εισαγωγής εξασφάλιζαν τυχαιότητα, δεν υπήρχε κάποιος αλγόριθμος διαγραφής που να εξασφαλίζει τυχαιότητα. Έτσι υιοθέτησαν την ιδέα ότι 7

14 η τυχαιότητα πρέπει να παραχθεί μέσα στους ίδιους τους αλγορίθμους. Έτσι οι παρακάτω αλγόριθμοι βασίζουν τις τυχαίες επιλογές τους είτε στα μεγέθη των υποδένδρων, στα priorities ή σε τελείως τυχαίες επιλογές Randomized Binary Search Trees Τα Randomized Binary Search Trees (RBST) στην ουσία αποτελούν τυχαία δυαδικά δένδρα αναζήτησης, άσχετα από τη σειρά που τα στοιχεία εισάγονται ή διαγράφονται. Τα RBST έχουν κι αυτά εγγυημένα αναμενόμενη λογαριθμική συμπεριφορά. Εκτός από τον παραπάνω ορισμό για τα τυχαία δυαδικά δένδρα αναζήτησης, υπάρχει και ο εξής: Έστω Τ ένα δυαδικό δέντρο αναζήτησης μεγέθους n. -- Αν n = 0, τότε Τ = και είναι ένα τυχαίο δυαδικό δέντρο αναζήτησης (το συμβολίζει το κενό δέντρο ή τον εξωτερικό κόμβο) -- Αν n>0, το δέντρο Τ είναι ένα τυχαίο δυαδικό δέντρο αναζήτησης αν και μόνο αν και τα δύο υποδένδρα του, το αριστερό L και το δεξί R, είναι ανεξάρτητα τυχαία δυαδικά δένδρα αναζήτησης και Pr { size (L) = i size (T) = n =, i=0,, n-1, n>0 (1) Οι αλγόριθμοι ένθεσης και διαγραφής των RBST διατηρούν την τυχαιότητα, βασίζοντας τις τυχαίες επιλογές τους σε δομικές πληροφορίες, δηλαδή στο μέγεθος του δένδρου, σε αντίθεση με τα treaps που βασίζονται σε τυχαίους αριθμούς, τα priorities. Εισαγωγή στοιχείου Εφαρμόζουμε τον κάτωθι αλγόριθμο Αλγόριθμος 1 Εισαγωγή Node insert ( int x, Node T ) { int n, r; n = T size; r= random ( 0, n ); if ( r ==n ) return insert_at_root ( x, T ); if ( x < T key ) T left = insert( x, T left ); 8

15 else T right = insert( x, T right ); return T; Υποθέτουμε ότι το κάθε στοιχείο του δένδρου αποτελείται από ένα κλειδί και όχι κάποια άλλη συσχετιζόμενη πληροφορία, και ότι όλα τα κλειδιά είναι μη αρνητικοί ακέραιοι. Η ιδιότητα που προκύπτει από την σχέση (1) είναι ότι κάθε κλειδί του δένδρου μεγέθους N, έχει την ίδια πιθανότητα να γίνει ρίζα του δένδρου, η οποία είναι 1/n. Με σκοπό να παράγουμε ένα τυχαίο δυαδικό δέντρο, το κλειδί, το οποίο δεν υπάρχει στο δένδρο από πριν, έχει πιθανότητα να γίνει η ρίζα του δένδρου ή να εισαχθεί σε κάποιο από τα δύο υποδένδρα της ρίζας. Το πεδίο size δεν θα αλλάζει, για λόγους απλότητας. Αρχικά επιλέγουμε έναν τυχαίο αριθμό r μεταξύ (0 n) όπου n είναι το μέγεθος του δένδρου. Αν το δένδρο είναι αρχικά άδειο τότε θα δημιουργηθεί ένα δένδρο με μοναδικό κόμβο-ρίζα με κλειδί x και δύο άδεια υποδένδρα. Αν το δένδρο δεν είναι άδειο τότε το x μπορεί να γίνει ρίζα του δένδρου με πιθανότητα 1/(n+1) ή να εισαχθεί αναδρομικά στο αριστερό ή δεξί υποδένδρο του Τ, ανάλογα με τη σχέση του x με το κλειδί της ρίζας, με πιθανότητα 1 1/(n + 1) = n/(n + 1). Αλγόριθμος 2 Εισαγωγή στη ρίζα Node insert_at_root ( int x, Node T ) { Node S, G; split( x, T, &S, &G ); T = new_node( ); T key = x; T left =S; T right = G; return T; Στον αλγόριθμο 2 περιγράφεται πως εισάγουμε τον κόμβο με κλειδί x στο δένδρο, στη θέση της ρίζας και πως διασπάμε το δένδρο σε δύο υποδένδρα Τ < και Τ > με τη βοήθεια της split. void split ( int x, Node T, Node *S, Node *G ) { if ( T == ) { *S = *G = ; return; if ( x < T key ) { *G = T; split ( x, T left, S, &( *G left ) ); 9

16 *S = T; split ( x, T right, &( *S right ), G ); return; Η split λειτουργεί ως εξής: αν το δένδρο είναι άδειο τα Τ < και Τ > θα είναι επίσης άδεια. Αλλιώς αν x < T key τότε το δεξί υποδένδρο του Τ και το Τ ανήκουν στο Τ >. Για να υπολογίσουμε το Τ < και το υπολειπόμενο κομμάτι του Τ >, κάνουμε μια αναδρομική κλήση split(x, T left). Αν x > T key, πράττουμε ανάλογα. Ο αλγόριθμος εισαγωγής πάντα διατηρεί τυχαιότητα. Αποδεικνύεται ότι μετά την εφαρμογή της split σε ένα random binary search tree τότε και τα δύο υποδένδρα που παράγονται αποτελούν random binary search trees. Άρα καταλήγουμε στο εξής: αν σε ένα random binary search tree εισάγουμε ένα στοιχείο, τότε παράγεται ένα νέο random binary search tree που περιέχει αυτό το στοιχείο[1]. Στο σχήμα 2.3 βλέπουμε 9 διαδοχικές ενθέσεις στοιχείων σε ένα αρχικά άδειο δένδρο. Με κόκκινο χρώμα εικονίζεται ο κόμβος με το νέο στοιχείο. Όπως παρατηρούμε υπάρχει περίπτωση το στοιχείο που εισάγεται να γίνει ρίζα του δέντρου, όπως οι κόμβοι 50, 76, και 85, να γίνει ρίζα κάποιου υποδένδρου, όπως οι κόμβοι 34 και 37 ή να εισαχθεί σε θέση φύλλου όπως ο κόμβος

17 Σχήμα 2.3: (α)-(θ) Διαδοχικές ενθέσεις των 82, 50, 76, 89, 95, 57, 34, 37, 85 Να τονίσουμε σε αυτό το σημείο ότι αυτό το δένδρο που προκύπτει είναι ένα από τα πολλά που μπορούν να προκύψουν, καθώς λόγω των τυχαίων επιλογών η θέση που μπορεί να καταλάβει ένα στοιχείο μετά την εισαγωγή του στο δένδρο δεν είναι πάντα η ίδια, δηλαδή ένα στοιχείο μπορεί να γίνει ρίζα του δένδρου, ρίζα ενός από τα υποδένδρα ή να μπει σε μια θέση-φύλλο. Για παράδειγμα στο στάδιο όπου εισάγεται το στοιχείο με κλειδί 89, τα άλλα δύο πιθανά δένδρα που θα μπορούσαν να προκύψουν εκτός από αυτό του σχήματος (δ) είναι αυτά που φαίνονται στο σχήμα

18 Σχήμα 2.4: Πιθανά δένδρα μετά την ένθεση του στοιχείου 89 Διαγραφή στοιχείου Εφαρμόζουμε τον κάτωθι αλγόριθμο Αλγόριθμος 3 Διαγραφή Node delete ( int x, Node T ) { Node Aux; if ( T == ) return ; if ( x < T key ) T left = delete ( x, T left ); else if ( x > T key ) T right = delete ( x, T right ); else { Aux = join ( T left, T right ); free_node ( T ); T = Aux; return T; Αλγόριθμος 4 Συνένωση των δύο RBSTs Node join ( Node L, Node R ) { int m, n, r, total; m = L size; n = R size; total = m + n; 12

19 if ( total == 0 ) return ; r = random ( 0, total 1 ); if ( r < m ) { L right = join ( L right, R ); return L; else { R left = join ( L, R left ); return R; Ο αλγόριθμος της διαγραφής χρησιμοποιεί την μέθοδο join, η οποία συνενώνει τα δύο υποδένδρα που προκύπτουν μετά τη διαγραφή της ρίζας, σε ένα καινούριο δέντρο θέτοντας ως ρίζα, τη ρίζα του δεξιού ή του αριστερού υποδένδρου. Όπως και στο αλγόριθμο εισαγωγής, έτσι και στον αλγόριθμο διαγραφής διατηρείται η τυχαιότητα κι αυτό προέρχεται από την ιδιότητα της join. Η συνένωση δύο τυχαίων δυαδικών δένδρων αναζήτησης παράγει ένα τυχαίο δυαδικό δένδρο αναζήτησης. Άρα και εδώ αν σε ένα random binary search tree διαγραφεί ένα στοιχείο τότε παράγεται ένα νέο random binary search tree που περιέχει τα ίδια στοιχεία εκτός από αυτό που διαγράφηκε[1]. Στο σχήμα 2.5 βλέπουμε 8 διαδοχικές αποσβέσεις στοιχείων από ένα δένδρο. Με κόκκινο χρώμα εικονίζεται ο κόμβος που πρόκειται να διαγραφεί. Όπως παρατηρούμε υπάρχει περίπτωση το στοιχείο που διαγράφεται να είναι η ρίζα του δέντρου, όπως στην περίπτωση που διαγράφονται οι κόμβοι 85, 57, 76 και 82 όπου επιλέγεται ως ρίζα του νέου δέντρου η ρίζα του αριστερού ή δεξιού υποδένδρου, το στοιχείο που διαγράφεται να είναι κάποιος εσωτερικός κόμβος, όπως ο κόμβος οπότε πάλι έχουμε αλλαγές στο δέντρο και ο κόμβος που διαγράφεται να είναι φύλλο. όπως οι κόμβοι 34, 95 και 89 οπότε δεν γίνεται κλήση της join. 13

20 Σχήμα 2.5: (α)-(θ) Διαδοχικές αποσβέσεις των 85, 37, 34, 57, 95, 89, 76, Random Root Model Το random root model (μοντέλο τυχαίας ρίζας) αναφέρεται σε ένα τυχαίο δυαδικό δέντρο αναζήτησης όπου κάθε κόμβος του χαρακτηρίζεται από ένα κλειδί. Σε αυτό το μοντέλο τυχαία επιλέγεται ένα από τα n κλειδιά, ώστε να γίνει ρίζα του δέντρου. Έτσι τα δεξιά και αριστερά υποδένδρα θα δημιουργήσουν αναδρομικά τυχαία δένδρα αναζήτησης για τα υπόλοιπα κλειδιά. Αυτό το μοντέλο έχει αρκετές ομοιότητες με το randomized binary search tree, όπως για παράδειγμα ότι και σε αυτό οι αλγόριθμοι ένθεσης/διαγραφής βασίζουν τις τυχαίες επιλογές τους στο μέγεθος των δένδρων. 14

21 Εισαγωγή στοιχείου Εφαρμόζουμε τον κάτωθι αλγόριθμο Αλγόριθμος 5 Εισαγωγή Node Generic-Insert ( int x, Node T ) { if ( Is-Null ( T ) ) T NewNode( x ); else if ( newroot (x, T) ) Root-Insert ( x, T ); else if ( x < T key ) Generic-Insert ( x, T left ); else Generic-Insert( x, T right ); Αλγόριθμος 6 Εισαγωγή στη ρίζα Node Root-Insert ( int x, Node T ) { if ( Is-Null ( T ) ) T NewNode ( x ); else if ( x < T key ) Root-Insert ( x, T left ); Rotate-Right ( T ); else Root-Insert( x, T right ); Rotate-Left ( T ); Η διαδικασία εισαγωγής ενός στοιχείου ξεκινάει ελέγχοντας αν το νέο στοιχείο πρόκειται να γίνει η ρίζα του δέντρου. Αυτός ο έλεγχος πραγματοποιείται με την κλήση της newroot. Αν το αποτέλεσμα της κλήσης της newroot είναι μηδέν τότε το αντικείμενο θα εισαχθεί αναδρομικά στο κατάλληλο υποδένδρο. Αν όμως το αποτέλεσμα είναι θετικό, που αυτό σημαίνει ότι το αντικείμενο πρόκειται να γίνει η νέα ρίζα του δένδρου, τότε το δένδρο πρέπει να διασπαστεί στο σημείο που θα εισαχθεί και τα δύο υποδένδρα που προκύπτουν θα είναι το αριστερό και δεξί υποδένδρο της νέας ρίζας. Αυτό υλοποιείται μέσω μιας απλής αναδρομής που περιλαμβάνει περιστροφές, δηλαδή το αντικείμενο εισάγεται κανονικά στην κατάλληλη θέση ως φύλλο και στη συνέχεια περιστρέφεται μέχρι να φτάσει στη θέση 15

22 της ρίζας. Οι διαδικασίες Rotate-Right και Rotate-Left είναι οι κλασικές διαδικασίες περιστροφής δένδρου. Η υλοποίηση της newroot σχετίζεται με την πληροφορία για το μέγεθος του δένδρου ή του υποδένδρου που εξετάζουμε κάθε φορά, η οποία αποθηκεύεται στον εκάστοτε κόμβο. Υλοποιείται ως εξής σε αυτό το μοντέλο: int newroot ( Node Τ ){ r = random( 0, Τ size ); if ( r == Τ size ) return 1; else return 0; Στο σχήμα 2.6 βλέπουμε 8 διαδοχικές ενθέσεις στοιχείων σε ένα αρχικά άδειο δένδρο. Με κόκκινο χρώμα εικονίζεται ο κόμβος με το νέο στοιχείο. Στο σχήμα φαίνονται επίσης και οι διαδοχικές περιστροφές που γίνονται σε περίπτωση που το στοιχείο θα γίνει ρίζα του δένδρου ή κάποιου υποδένδρου. Για παράδειγμα τα στοιχεία 83, 90 και 73 πρόκειται να μπουν στη θέση της ρίζας του δένδρου όταν εισάγονται, οπότε αρχικά μπαίνουν σε θέση-φύλλο και περιστρέφονται μέχρι να φτάσουν στη θέση-ρίζα. 16

23 17

24 Σχήμα 2.6(α)-(η): Διαδοχικές ενθέσεις των 75, 83, 90, 60, 77, 73, 55, 19 18

25 Διαγραφή στοιχείου Εφαρμόζουμε τον κάτωθι αλγόριθμο Αλγόριθμος 7 Διαγραφή Node Generic-Delete ( int x, Node T ) { if ( T = null ) return; if ( x < T key ) Generic-Delete( x, T left ); else if ( x > T key ) Generic-Delete( x, T right ); else Root-Delete( T ); Αλγόριθμος 8 Διαγραφή της ρίζας Node Root-Delete ( int x, Node T ) { if ( IsLeaf ( T ) ) T null; else if ( Lchild-Wins ( T ) ) Rotate-Right ( T ); Root-Delete ( T right ); else Rotate-Left ( T ); Root-Delete ( T left ); Η διαδικασία της διαγραφής ενός στοιχείου με κλειδί x, ξεκινάει με την αναζήτηση του κόμβου που στεγάζει αυτό το κλειδί. Αυτός ο κόμβος υπάρχει περίπτωση να είναι η ρίζα του δένδρου ή η ρίζα κάποιου υποδένδρου. Σε αυτήν την περίπτωση πρέπει τα δύο υποδένδρα που προκύπτουν μετά την διαγραφή, να συνενωθούν σε ένα. Αυτό επιτυγχάνεται με τη χρήση της Root-Delete η οποία περιστρέφει αναδρομικά τον κόμβο μέχρι να φτάσει σε θέση φύλλου και τον διαγράφει. Το αν η περιστροφή θα είναι δεξιά ή αριστερή καθορίζεται από το αποτέλεσμα της κλήσης της Lchild-Wins. Αν το αποτέλεσμα της είναι 0, τότε θα γίνει αριστερή περιστροφή, αλλιώς θα γίνει δεξιά. Η υλοποίηση της Lchild-Wins σχετίζεται με την πληροφορία για το μέγεθος του δένδρου ή του υποδένδρου που εξετάζουμε κάθε φορά, η οποία αποθηκεύεται στον εκάστοτε κόμβο. Υλοποιείται ως εξής σε αυτό το μοντέλο: 19

26 int Lchild-Wins ( Node T ) { if ( T left size > T right size) return 1; else return 0; Στο σχήμα 2.7 βλέπουμε 8 διαδοχικές αποσβέσεις στοιχείων. Με κόκκινο χρώμα εικονίζεται ο κόμβος με το στοιχείο που πρόκειται να διαγραφεί. Το στοιχείο αν δε βρίσκεται σε θέση φύλλο, με διαδοχικές περιστροφές το «κατεβάζουμε» σε θέση φύλλο και το διαγράφουμε. Όταν το στοιχείο αφήσει την παλιά του θέση, την καταλαμβάνει η ρίζα του υποδένδρου του με το μεγαλύτερο μέγεθος. Για παράδειγμα, όταν πρόκειται να διαγραφεί το στοιχείο 73, επιλέγεται το στοιχείο 90 καθώς στο υποδένδρο που είναι ρίζα υπάρχουν ακόμη τρία στοιχεία ενώ στο αριστερό υποδένδρο του 73, υπάρχει μόνο ένα. Έτσι το 73 υποβιβάζεται σε θέσηφύλλο και διαγράφεται. 20

27 21

28 Σχήμα 2.7(α)-(η): Διαδοχικές αποσβέσεις των 19, 55, 73, 77, 60, 90, 83, Priority Model Το priority model (μοντέλο προτεραιότητας) αποτελεί ένα δυαδικό δέντρο αναζήτησης που ουσιαστικά λειτουργεί ως treap, καθώς τα στοιχεία που το αποτελούν, χαρακτηρίζονται εκτός από το κλειδί, και από μια προτεραιότητα. Οι 22

29 προτεραιότητες p 1,, p n είναι τυχαίοι αριθμοί, έστω επιλεγμένοι από την ομοιόμορφη κατανομή πιθανότητας στο διάστημα [0, 1]. Έτσι κατασκευάζεται το treap που αποτελείται από τα ζευγάρια { (a 1, p 1 ),, (a n, p n ). Σε κάθε κόμβο αποθηκεύεται ένα ζευγάρι (α i, p i ) το οποίο ακολουθεί τη συμμετρική διάταξη ως προς τα κλειδιά α i και σέβεται τη διάταξη σωρού μέγιστου στοιχείου ως προς τις προτεραιότητες p i. Οι αλγόριθμοι εισαγωγής/διαγραφής βασίζουν τις τυχαίες επιλογές τους στα priorities. Εισαγωγή στοιχείου Ο αλγόριθμος της εισαγωγής είναι ίδιος με αυτόν του random root model. Η μοναδική διαφοροποίηση που έχουν είναι στην υλοποίηση της ρουτίνας newroot, η οποία σχετίζεται με την προτεραιότητα του κάθε στοιχείου, κάτι που δεν υπάρχει στο προηγούμενο μοντέλο. Έτσι, σε αυτό το μοντέλο ο έλεγχος για το αν το νέο στοιχείο που εισάγεται θα γίνει ρίζα του δένδρου γίνεται ως εξής: int newroot (Item x, Node T) { if (x priority > T priority) return 1; else return 0; Στο σχήμα 2.8 φαίνονται οι διαδοχικές ενθέσεις 8 στοιχείων με κλειδιά και προτεραιότητες, που φαίνονται στον πίνακα Keys Priorities Με κόκκινο χρώμα εικονίζεται ο κόμβος με το νέο στοιχείο. Στο σχήμα φαίνονται επίσης και οι διαδοχικές περιστροφές που γίνονται σε περίπτωση που το στοιχείο θα γίνει ρίζα του δένδρου ή κάποιου υποδένδρου. Για παράδειγμα τo στοιχείo 82 πρόκειται να γίνει η νέα ρίζα του δένδρου όταν εισάγεται, οπότε αρχικά μπαίνει σε θέση-φύλλο και περιστρέφεται μέχρι να φτάσει στη θέση-ρίζα. 23

30 24

31 Σχήμα 2.8(α)-(η): Διαδοχικές ενθέσεις των 27, 67, 22, 92, 58, 57, 21,

32 Διαγραφή στοιχείου Ο αλγόριθμος της διαγραφής είναι ίδιος με αυτόν του random root model. Η μοναδική διαφοροποίηση που έχουν βρίσκεται στην υλοποίηση της ρουτίνας Lchild- Wins, η οποία σχετίζεται με την προτεραιότητα του κάθε στοιχείου, κάτι που δεν υπάρχει στο προηγούμενο μοντέλο. Έτσι, σε αυτό το μοντέλο ο έλεγχος για το αν το στοιχείο που θα διαγραφεί, θα περιστραφεί δεξιά ή αριστερά με σκοπό να αποκοπεί, γίνεται ως εξής: int Lchild-Wins ( Node T ) { if ( T left priority > T right priority) return 1; else return 0; Στο σχήμα 2.9 βλέπουμε την διαγραφή 7 στοιχείων από ένα δένδρο. Παρατηρούμε ότι ένα στοιχείο που πρόκειται να διαγραφεί, αντικαθίσταται από τη ρίζα του υποδένδρου της με το μεγαλύτερο priority. Στη συνέχεια περιστρέφεται διαδοχικά σε θέση-φύλλο, όπου και διαγράφεται. Σχήμα 2.9(α)-(ζ): Διαδοχικές αποσβέσεις των 82, 21, 57, 58, 92, 22, 67,

33 2.2.4 No Extra Space Model Το μοντέλο αυτό είναι ισοδύναμο με τα προηγούμενα αλλά η διαφορά του με αυτά είναι ότι στους κόμβους του δένδρου δεν αποθηκεύεται κάποια επιπλέον πληροφορία, δηλαδή δεν αποθηκεύεται ούτε το μέγεθος του υποδένδρου που αντιστοιχεί στον κάθε κόμβο, ούτε η προτεραιότητα. Εισαγωγή στοιχείου Ο αλγόριθμος της εισαγωγής είναι ίδιος με αυτόν του random root model. Η μοναδική διαφοροποίηση που έχουν είναι στην υλοποίηση της ρουτίνας newroot. Στα δύο προηγούμενα μοντέλα, η απόφαση για το αν το στοιχείο που εισαγόταν θα γινόταν ή όχι ρίζα του δένδρου, βασιζόταν είτε στο μέγεθος του δένδρου ή στην προτεραιότητα των κόμβων. Σε αυτό το μοντέλο όμως που δεν υπάρχει καμία επιπλέον πληροφορία αποθηκευμένη στους κόμβους, ας δούμε πως λαμβάνεται η απόφαση. Για το στοιχείο που πρόκειται να εισαχθεί επιλέγουμε τυχαία έναν αριθμό p από μια συνεχή κατανομή πιθανότητας, έστω D. Για κάθε στοιχείο που υπάρχει ήδη στο δένδρο, στο σύνολο Μ, επιλέγουμε από έναν τυχαίο αριθμό από την D. Διατρέχουμε το δένδρο και αν έστω και ένας από αυτούς τους αριθμούς είναι μεγαλύτερος από τον p τότε σταματάμε τη διέλευση του δένδρου και η κλήση της newroot επιστρέφει 0. Αν όμως αυτό δεν ισχύει για κανένα στοιχείο του δένδρου, τότε επιστρέφει 1 και το στοιχείο εισάγεται στη ρίζα του δένδρου. int newroot ( Node Τ ){ p = random(); foreach k belongs to M if ( p < p.k ) return 1; else return 0; 27

34 Κεφάλαιο 3 Απόδοση 3.1 Μετρήσεις Στα απλά αζύγιστα δυαδικά δένδρα το κόστος οποιασδήποτε πράξης είναι γραμμικό σε σχέση με το ύψος τους. Αυτό που θέλουμε να αποδείξουμε είναι ότι στα τυχαία δυαδικά δένδρα αναζήτησης το κόστος όλων των πράξεων που εξετάσαμε είναι λογαριθμικό. Έτσι, προκειμένου να το αποδείξουμε, ακολουθήσαμε την εξής διαδικασία για όλους τους αλγορίθμους που περιγράψαμε: Αρχικά, ξεκινήσαμε με τη διαδικασία της ένθεσης. Εισαγάγαμε σε ένα αρχικά άδειο δένδρο εκατό χιλιάδες στοιχεία. Με έναν μετρητή, μετρούσαμε το κόστος της ένθεσης κάθε πενήντα στοιχεία, δηλαδή μετρούσαμε τους κόμβους που συναντούσε το στοιχείο που εισαγόταν, σε δύο περιπτώσεις. Στην πρώτη περίπτωση μηδενίζαμε τον μετρητή κάθε πενήντα στοιχεία και βρίσκαμε το κόστος διαιρώντας με το πενήντα. Στη δεύτερη περίπτωση δε μηδενίζαμε τον μετρητή αλλά διαιρούσαμε με τον συνολικό αριθμό των πράξεων που προηγήθηκαν. Στη συνέχεια, προχωρήσαμε με τη διαδικασία της διαγραφής και διαγράψαμε τα εκατό χιλιάδες στοιχεία που ενθέσαμε προηγουμένως. Με έναν άλλο μετρητή μετρούσαμε το κόστος της διαγραφής κάθε πενήντα στοιχεία. Τα κόστη προέκυψαν όπως και στη διαδικασία της εισαγωγής. Με τη χρήση του προγράμματος Matlab, προέκυψαν οι παρακάτω γραφικές παραστάσεις καθώς εισαγάγαμε τα κόστη που προέκυψαν στα προηγούμενα βήματα. 28

35 3.2 Γραφικές Παραστάσεις Παρατηρώντας τις γραφικές παραστάσεις που προέκυψαν, καταλήγουμε στο συμπέρασμα ότι το κόστος όλων των πράξεων στα τυχαία δένδρα αναζήτησης είναι λογαριθμικό, δηλαδή O(log n), όπου n είναι οι κόμβοι του δένδρου Randomized Binary Search Trees 24 Insertion με μηδενισμό του counter κάθε 50 insertions Counter/ # of Nodes x

36 20 Insertion χωρίς μηδενισμό του counter Counter / # of insertions # of Nodes x Deletion με μηδενισμό του counter κάθε 50 deletions Counter / # of Nodes x

37 21.5 Deletion χωρίς μηδενισμό του counter 21 Counter / # of deletions # of Nodes x Random Root Model 24 Insertion με μηδενισμό του counter κάθε 50 insertions Counter / # of Nodes x

38 22 Insertion χωρίς μηδενισμό του counter Counter / # of Insertions # of Nodes x Deletion με μηδενισμό του counter κάθε 50 deletions Counter / # of Nodes x

39 21.5 Deletion χωρίς μηδενισμό του counter Counter / # of Deletions # of Nodes x Priority Model 24 Insertion με μηδενισμό του counter κάθε 50 insertions Counter / # of Nodes x

40 22 Insertion χωρίς μηδενισμό του counter Counter / # of Insertions # of Nodes x Deletion με μηδενισμό του counter κάθε 50 deletions Counter / # of Nodes x

41 21.2 Deletion χωρίς μηδενισμό του counter Counter / # of Deletions # of Nodes x No Extra Space Model 24 Insertion με μηδενισμό του counter κάθε 50 insertions Counter / # of Nodes x

42 22 Insertion χωρίς μηδενισμό του counter Counter / # of Insertions # of Nodes x

43 Κεφάλαιο 4 Κώδικας Σε αυτό το κεφάλαιο παραθέτουμε τον κώδικα της υλοποίησης των αλγορίθμων που παρουσιάσαμε στο δεύτερο κεφάλαιο. Η υλοποίηση έγινε σε γλώσσα προγραμματισμού Java. Το πρώτο μέρος αποτελεί την υλοποίηση των randomized binary search trees. Στο δεύτερο μέρος έχουμε την υλοποίηση των υπόλοιπων μοντέλων, η οποία είναι ενιαία για όλα, εκτός από την υλοποίηση των μεθόδων newroot και LchildWins. 4.1 Randomized Binary Search Tree Κώδικας 1 Ορισμός κόμβου του RBST //Αρχικά ορίζουμε την class Node, δηλαδή τον κόμβο του RBST public class Node { private int key; private Node left,right,parent; public Node(){ public Node(int k, Node r, Node l,node p){ //3 δείκτες προς τους γειτονικούς κόμβους //απλός constructor //constructor όπου καθορίζονται τα περιεχόμενα key=k; //του κάθε κόμβου right=r; left=l; parent=p; //Μέθοδοι που καθορίζουν κι επιστρέφουν τα στοιχεία του κόμβου και μια που μετράει τους κόμβους public int getkey(){ return key; public void setkey(int k){ key=k; public Node getparent(){ return parent; 37

44 public void setparent(node v){ parent=v; public Node getright(){ return right; public void setright(node v){ right=v; public Node getleft(){ return left; public void setleft(node v){ left=v; public int count(node v) { Node r= getright(); Node l= getleft(); int c; if(v==null){c=0; c = 1; if ( r!=null ) c += r.count(r); if ( l!=null ) c += left.count(l); return c; //δεξιά subtrees //αριστερά subtrees Κώδικας 2 Ορισμός Binary Tree //Η class BinaryTree ορίζει ένα απλό διασυνδεδεμένο δένδρο public class BinaryTree { private Node Root; public BinaryTree(){ //Απλός constructor που καθορίζει ένα άδειο δένδρο Root=null; public Node getroot(){ return Root; public void setroot(node v){ Root=v; public boolean isroot(node v){ return(v==root); public boolean isleft(node v){ if(v==root){ return false; 38

45 return(v==v.getparent().getleft()); public boolean isright(node v){ if(v==root){ return false; return(v==v.getparent().getright()); Κώδικας 3 Randomized Binary Search Trees //Η βασική μας class, η TotalRandomBST η οποία καθορίζει ένα τυχαίο δυαδικό δένδρο αναζήτησης //και σε αυτήν υλοποιούμε τις πράξεις ένθεσης και διαγραφής στοιχείων στο δένδρο public class TotalRandomBST extends BinaryTree { Node S,G; private static Random ran; public static int counter1=0; public static int counter2=0; TotalRandomBST(){ super(); //Μετρητές για τους κόμβους που συναντάμε σε μια ένθεση //και σε μια απόσβεση //Constructor /* Ενθέτει ένα νέο στοιχείο, με κλειδί x στο RBST με ρίζα τον κόμβο Τ */ public Node insert(int x, Node T){ if(t==null){ return insert_at_root(x,t); //Αν το δένδρο είναι άδειο //εισάγει το στοιχείο στη ρίζα int n; n=t.count(t); ran=new Random(); int r=ran.nextint(n)+1; if(r==n){ counter1++; return insert_at_root(x,t); Node N; //Επιστρέφει έναν τυχαίο αριθμό //βασισμένο στο μέγεθος του δένδρου //Αν r=n, εισάγει το στοιχείο στη ρίζα if(x<t.getkey()){ counter1++; if(t.getleft()==null){ //Όταν ο Τ δεν έχει αριστερό παιδί N=new Node(x,null,null,null); //εισάγουμε το κλειδί x, δημιουργώντας T.setLeft(N); //ένα νέο κόμβο ως αριστερό παιδί του Τ N.setParent(T); 39

46 T.setLeft(insert(x,T.getLeft()));//Αναδρομικά εισάγουμε το x αριστερά του T counter1++; if(t.getright()==null){ //Όταν ο Τ δεν έχει δεξί παιδί N=new Node(x,null,null,null); //εισάγουμε το κλειδί x, δημιουργώντας T.setRight(N); //ένα νέο κόμβο ως δεξί παιδί του Τ N.setParent(T); T.setRight(insert(x,T.getRight())); //Αναδρομικά εισάγουμε το x στα δεξιά του T return T; /* Ενθέτει ένα νέο στοιχείο, με κλειδί x, στη ρίζα του δένδρου, αντικαθιστώντας την παλιά Τ*/ public Node insert_at_root(int x, Node T){ if(t==null){ T=new Node(x,null,null,null); setroot(t); T.setKey(x); split(x,t); Node p=t.getparent(); Node temp=t; Node big=temp.getright(); Node small=temp.getleft(); //Όταν το δένδρο είναι άδειο, δημιουργούμε //ένα νέο κόμβο, ως ρίζα του δένδρου //Καλούμε την split, που δημιουργεί 2 υποδένδρα T=new Node(); T.setKey(x); T.setRight(G); T.setLeft(S); if(p==null){ setroot(t); T.setParent(p); temp.setparent(t); //Αν ο νέος κόμβος δεν έχει πατέρα, τον θέτουμε ως ρίζα //Αλλιώς τον συνδέουμε με τον T //Θέτουμε ως πατέρα του προηγούμενου κόμβου, το νέο if(big!=null){ if(big.getkey()>t.getkey()) { big.setparent(t); 40

47 return T; if(small!=null){ if(small.getkey()<t.getkey()) { small.setparent(t); /* Το δένδρο με ρίζα Τ διασπάται σε 2 υποδένδρα S(T<) και G(T>), που περιέχουν τα keys που είναι μικρότερα από το x και μεγαλύτερα από το x, αντίστοιχα*/ public void split(int x, Node T){ Node Temp; if(t==null){ S=G=null; return; if(x<t.getkey()){ G=T; Temp=G; split(x,t.getleft()); Temp.setLeft(G); G=Temp; //Αν ο κόμβος είναι άδειος, τότε και τα S και G είναι άδεια //Αναδρομικά διασπάμε το αριστερό υποδένδρο S=T; Temp=S; split(x,t.getright()); //Αναδρομικά διασπάμε το δεξί υποδένδρο Temp.setRight(S); S=Temp; return; /* H delete διαγράφει από το δένδρο με ρίζα Τ τον κόμβο με κλειδί x, αν υπάρχει */ public Node delete(int x, Node T){ Node Aux; if(t==null){ return null; //Αν το δένδρο είναι άδειο, επιστρέφει null 41

48 if(x<t.getkey()){ counter2++; T.setLeft(delete(x,T.getLeft()));//Αναδρομικά αναζητούμε το x στα αριστερά του T else if(x>t.getkey()){ counter2++; T.setRight(delete(x,T.getRight())); //Αναδρομικά αναζητούμε το x στα δεξιά του T counter2++; Node temp=t.getparent(); Aux=join(T.getLeft(),T.getRight()); T=Aux; if(temp==null){ setroot(aux); if(aux!=null){ Aux.setParent(temp); return T; //Καλούμε τη join /* H join συνενώνει τα αριστερά και δεξιά υποδένδρα του κόμβου που διαγράφεται */ public Node join(node L, Node R){ int m,n, r, total; if(l==null){ m=0; m=l.count(l); if(r==null){ n=0; n=r.count(r); //Στο m αποθηκεύουμε το μέγεθος του αριστερού υποδένδρου //Στο n αποθηκεύουμε το μέγεθος του δεξιού υποδένδρου total=m+n; if(total==0){ return null; 42

49 ran=new Random(); r=ran.nextint(total); //Επιστρέφει έναν τυχαίο αριθμό βασισμένο στα μεγέθη των υποδένδρων if(r<m){ Node Rt=L.getRight(); L.setRight(join(Rt,R)); return L; Node Lt=R.getLeft(); R.setLeft(join(L,Lt)); return R; 4.2 Random Root Model-Priority-No extra Space Κώδικας 4 Ορισμός κόμβου //Αρχικά ορίζουμε την class Node, δηλαδή τον κόμβο των διαφόρων μοντέλων τυχαίων δένδρων public class Node{ private int key; private double priority; //Προστίθεται και μια προτεραιότητα private Node left, right, parent; public int size=0; public Node(){ public Node(int k, double pr, Node r, Node l, Node p){ key=k; priority=pr; right=r; left=l; parent=p; public int getkey(){ return key; public void setkey(int k){ key=k; public double getpriority(){ return priority; public void setpriority(double pr){ priority=pr; 43

50 public Node getparent(){ return parent; public void setparent(node v){ parent=v; public Node getright(){ return right; public void setright(node v){ right=v; public Node getleft(){ return left; public void setleft(node v){ left=v; public int getsize(){ //Ορίζουμε το μέγεθος ενός κόμβου Node r= getright(); Node l= getleft(); int c; if((getright()==null)&&(getleft()==null)&&(getkey()==0)){c=0; c = 1; if ( r!=null ) c += r.getsize(); // δεξιά subtrees if ( l!=null ) c += l.getsize(); //αριστερά subtrees return c; Η class BinaryTree είναι ίδια με την BinaryTree του RBST public class Item{ Κώδικας 5 Ορισμός Item private int key; private double priority; public Item(int k, double pr){ key=k; priority=pr; public int getkey(){ return key; public void setkey(int k){ key=k; 44

51 public double getpriority(){ return priority; public void setpriority(double pr){ priority=pr; Κώδικας 6 Ισοδύναμος και για τα 3 μοντέλα //Η class Total καθορίζει τα 3 μοντέλα που περιγράψαμε, το Random Root, το μοντέλο με τα //priorities και το μοντέλο χωρίς επιπλέον αποθηκευτικό χώρο public class Total extends BinaryTree{ public static int counter1=0; public static int counter2=0; //Μετρητές public Total(){ super(); /* Ενθέτει ένα νέο Item x στο δένδρο με ρίζα Τ */ public void GInsert(Item x, Node T){ Node Tnew; if(t==null){ //Αν το δένδρο είναι άδειο, δημιουργούμε έναν κόμβο, και τον θέτουμε T=new Node(0,0,null,null,null); //ως ρίζα setroot(t); T.setKey(x.getKey()); T.setPriority(x.getPriority()); if(newroot(x,t)>0){//αν το αποτέλεσμα της κλήσης της newroot είναι θετικό counter1++; //εισάγουμε το στοιχείο στη ρίζα του δένδρου RootInsert(x,T); if(x.getkey()<t.getkey()){ //Αλλιώς το εισάγουμε σε κάποιο //από τα 2 υποδένδρα counter1++; if(t.getleft()==null){ Tnew=new Node(0,0,null,null,null); Tnew.setKey(x.getKey()); Tnew.setPriority(x.getPriority()); T.setLeft(Tnew); Tnew.setParent(T); GInsert(x,T.getLeft()); 45

52 counter1++; if(t.getright()==null){ Tnew=new Node(0,0,null,null,null); Tnew.setKey(x.getKey()); Tnew.setPriority(x.getPriority()); T.setRight(Tnew); Tnew.setParent(T); GInsert(x,T.getRight()); /* Ενθέτει το Item x στο δένδρο/υποδένδρο αντικαθιστώντας τη ρίζα του*/ public void RootInsert(Item x, Node T){ Node Told; if(t==null){ //Αν το δένδρο είναι άδειο T=new Node(0,0,null,null,null); setroot(t); T.setKey(x.getKey()); T.setPriority(x.getPriority()); if(x.getkey()<t.getkey()){ if(t.getleft()==null){ Told=T; T=new Node(0,0,null,null,null); T.setKey(x.getKey()); T.setPriority(x.getPriority()); Told.setLeft(T); T.setParent(Told); if(isleft(t)){ RotateRight(T,T.getParent()); //Δεξιά περιστροφή return; RotateLeft(T,T.getParent()); //Αριστερή περιστροφή return; counter1++; RootInsert(x,T.getLeft()); T=T.getLeft(); RotateRight(T,T.getParent()); return; 46

53 if(t.getright()==null){ Told=T; T=new Node(0,0,null,null,null); T.setKey(x.getKey()); T.setPriority(x.getPriority()); Told.setRight(T); T.setParent(Told); if(isleft(t)){ RotateRight(T,T.getParent()); return; RotateLeft(T,T.getParent()); return; counter1++; RootInsert(x,T.getRight()); T=T.getRight(); RotateLeft(T,T.getParent()); return; /* Διαγράφει ένα στοιχείο βάσει του κλειδιού του, a, από το δένδρο με ρίζα Τ */ public void GDelete(int a, Node T){ if(t==null){ return; Node delnode=findnode(a,t); if(delnode==null){ return; if(a<t.getkey()){ counter2++; GDelete(a,T.getLeft()); else if(a>t.getkey()){ counter2++; //Αναζήτηση του κόμβου //Αναδρομικά στα αριστερά //Αναδρομικά στα δεξιά 47

54 GDelete(a,T.getRight()); counter2++; RootDelete(T); //Διαγραφή της ρίζας /* Διαγραφή της ρίζας του δένδρου, με ρίζα Τ */ public void RootDelete(Node T){ if((t.getleft()==null)&&(t.getright()==null)){ if(isroot(t)){ setroot(null); if(isleft(t)){ T.getParent().setLeft(null); T.getParent().setRight(null); T.setParent(null); T=null; if((t.getleft()!=null)&&(t.getright()!=null)){ if(lchildwins(t)==1){ RotateRight(T.getLeft(),T); RootDelete(T); return; RotateLeft(T.getRight(),T); RootDelete(T); return; else if((t.getleft()!=null)&&(t.getright()==null)){ RotateRight(T.getLeft(),T); RootDelete(T); return; else if((t.getleft()==null)&&(t.getright()!=null)){ RotateLeft(T.getRight(),T); //Αναδρομικά το περιστρέφουμε σε //θέσηφύλλο //και το διαγράφουμε 48

55 RootDelete(T); return; NewRoot: για το μοντέλο RandomRoot: public int newroot(item x, Node T){ Random rans=new Random(); int r=rans.nextint(t.getsize())+1; if(r==t.getsize()){ return 1; return 0; //Επιλέγεται ένας τυχαίος αριθμός, βασισμένος //στο μέγεθος του δένδρου για το μοντέλο Priority: public int newroot(item x, Node T){ if(x.getpriority()>t.getpriority()){ return 1; return 0; //Συγκρίνει τα priorities για το μοντέλο χωρίς Extra Space: public int newroot(item x, Node T){ Random ran=new Random(); double p=ran.nextdouble(); //Επιλέγεται ένας τυχαίος αριθμός //από μια κατανομή if(preorder(t,p)==0){ //Αν είναι μικρότερος από όλους τους return 0; //τυχαίους αριθμούς που έχουν δοθεί //στα υπόλοιπα στοιχεία, τότε return 0 return 1; //Αλλιώς return 1 public int preorder(node t,double p){ //H pre-order διατρέχει αναδρομικά Random ran=new Random(); // όλα τα στοιχεία του δένδρου και συγκρίνει double p2=ran.nextdouble (); //τους τυχαίους αριθμούς που έχουν if(p2>p){ 49

56 return 0; if(t.getleft()!=null){ return(preorder(t.getleft(),p)); if(t.getright()!=null){ return(preorder(t.getright(),p)); return 1; LchildWins για το μοντέλο RandomRoot: public int LchildWins(Node T){ if(t.getleft().getsize()>t.getright().getsize()){ return 1; return 0; //Συγκρίνει τα μεγέθη των υποδένδρων για το μοντέλο Priority: public int LchildWins(Node T){ if(t.getleft().getpriority()>t.getright().getpriority()){ return 1; return 0; //Συγκρίνει τα priorities 50

57 Βιβλιογραφία [1] Martinez, C., Roura, S.: Randomized Binary Search Trees. J. ACM 45(2), (1998). [2] Seidel, R.: Maintaining Ideally Distributed Random Search Trees without Extra Space. Festschrift Mehlhorn, LNCS 5760, pp , [3] Π.Δ. Μποζάνης, Δομές Δεδομένων: Ταξινόμηση και αναζήτηση με Java, Θεσσαλονίκη, Εκδόσεις Τζιόλα, [4] Roura, S., Martinez, C Randomization of search trees by subtree size. In Proceedings of the 4th European Symposium on Algorithms (ESA), J. Dıaz and M. Serna, eds. Lecture Notes in Computer Science, vol Springer-Verlag, New York, pp [5] Seidel, R., Aragon, C.R.: Randomized Search Trees. Algorithmica 16(4/5), (1996). [6] Mehlhorn, K.: Data structures and Algorithms 3. Springer, Heidelberg (1984). [7] Pugh, W Skip lists: A probabilistic alternative to balanced trees. Commun. ACM 33, 6 (June), [8] Nievergelt, J., Reingold, E Binary search trees of bounded balance. Siam J. Comput. 2, 1, [9] Gonnet, G., Olivie, H., and Wood, D Height-ratio-balanced trees. Comput. J. 26,

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 12: Δέντρα ΙΙ -Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης(ΔΔΑ) - Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου - Εισαγωγή

Διαβάστε περισσότερα

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης (ΔΔΑ) Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου Εισαγωγή στοιχείου

Διαβάστε περισσότερα

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

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 7: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου Διδάσκων:

Διαβάστε περισσότερα

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

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 22: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης - Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου

Διαβάστε περισσότερα

AVL-trees C++ implementation

AVL-trees C++ implementation Τ Μ Η Μ Α Μ Η Χ Α Ν Ι Κ Ω Ν Η / Υ Κ Α Ι Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ AVL-trees C++ implementation Δομές Δεδομένων Μάριος Κενδέα 31 Μαρτίου 2015 kendea@ceid.upatras.gr Εισαγωγή (1/3) Δυαδικά Δένδρα Αναζήτησης:

Διαβάστε περισσότερα

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

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Υλικό από τις σηµειώσεις Ν. Παπασπύρου, 2006 Δέντρα δυαδικής αναζήτησης Δενδρικές δοµές δεδοµένων στις οποίες Όλα τα στοιχεία στο αριστερό υποδέντρο της ρίζας είναι

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διάλεξη Ε4: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, Δυαδικά Δένδρα Αναζήτησης Ισοζυγισμένα Δένδρα & 2-3 Δένδρα Διδάσκων: Κωνσταντίνος

Διαβάστε περισσότερα

Red-black δέντρα (Κεφ. 5)

Red-black δέντρα (Κεφ. 5) Red-black δέντρα (Κεφ. ) Δομές Δεδομένων Παπαγιαννόπουλος Δημήτριος 30 Μαρτίου 07 30 Μαρτίου 07 papagianno@ceid.upatras.gr . Εισαγωγή Περιεχόμενα. Ορισμός red-black δέντρων 3. Αναζήτηση σε red-black δέντρα

Διαβάστε περισσότερα

Κεφάλαιο 10 Ψηφιακά Λεξικά

Κεφάλαιο 10 Ψηφιακά Λεξικά Κεφάλαιο 10 Ψηφιακά Λεξικά Περιεχόμενα 10.1 Εισαγωγή... 213 10.2 Ψηφιακά Δένδρα... 214 10.3 Υλοποίηση σε Java... 222 10.4 Συμπιεσμένα και τριαδικά ψηφιακά δένδρα... 223 Ασκήσεις... 225 Βιβλιογραφία...

Διαβάστε περισσότερα

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης 1. Στόχος του εργαστηρίου Στόχος του δέκατου εργαστηρίου

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 8: Γραμμική Αναζήτηση και Δυαδική Αναζήτηση-Εισαγωγή στα Δέντρα και Δυαδικά Δέντρα-Δυαδικά Δέντρα Αναζήτησης & Υλοποίηση ΔΔΑ με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ισοζυγισμένα Δέντρα - Υλοποίηση AVL-δέντρων

Διαβάστε περισσότερα

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Διάλεξη 14: Δέντρα IV - B-Δένδρα ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 14: Δέντρα IV - B-Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - 2-3 Δένδρα, Εισαγωγή και άλλες πράξεις - Άλλα Δέντρα: Β-δένδρα, Β+-δέντρα,

Διαβάστε περισσότερα

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

Κεφάλαιο 6 Ουρές Προτεραιότητας Κεφάλαιο 6 Ουρές Προτεραιότητας Περιεχόμενα 6.1 Ο αφηρημένος τύπος δεδομένων ουράς προτεραιότητας... 114 6.2 Ουρές προτεραιότητας με στοιχειώδεις δομές δεδομένων... 115 6.3 Δυαδικός σωρός... 116 6.3.1

Διαβάστε περισσότερα

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

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1 Διασυνδεδεμένες Δομές Δυαδικά Δέντρα Προγραμματισμός II 1 lalis@inf.uth.gr Δέντρα Τα δέντρα είναι κλασικές αναδρομικές δομές Ένα δέντρο αποτελείται από υποδέντρα, καθένα από τα οποία μπορεί να θεωρηθεί

Διαβάστε περισσότερα

9. Κόκκινα-Μαύρα Δέντρα

9. Κόκκινα-Μαύρα Δέντρα Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 9. Κόκκινα-Μαύρα Δέντρα 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 9/12/2016 Δέντρα,

Διαβάστε περισσότερα

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

Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης Περιεχόμενα 7.1 Ο αφηρημένος τύπος δεδομένων λεξικού... 133 7.1.1 Διατεταγμένα λεξικά... 134 7.2 Στοιχειώδεις υλοποιήσεις με πίνακες και λίστες... 135 7.2.1

Διαβάστε περισσότερα

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Εξεταστική Ιανουαρίου 2014 Διδάσκων : Ευάγγελος Μαρκάκης 20.01.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες και

Διαβάστε περισσότερα

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Δέντρα Αναζήτησης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Το πρόβλημα Αναζήτηση Θέλουμε να διατηρήσουμε αντικείμενα με κλειδιά και να μπορούμε εκτός από

Διαβάστε περισσότερα

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε για κάθε λειτουργία; χρόνο εκτέλεσης Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή μετά από Περιστροφές x αριστερή περιστροφή από το x y α β y

Διαβάστε περισσότερα

Κεφάλαιο 8 Ισορροπημένα Δένδρα Αναζήτησης

Κεφάλαιο 8 Ισορροπημένα Δένδρα Αναζήτησης Κεφάλαιο 8 Ισορροπημένα Δένδρα Αναζήτησης Περιεχόμενα 8.1 Κατηγορίες ισορροπημένων δένδρων αναζήτησης... 155 8.1.1 Περιστροφές... 156 8.2 Δένδρα AVL... 157 8.2.1 Αποκατάσταση συνθήκης ισορροπίας... 158

Διαβάστε περισσότερα

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 16: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Ουρά Προτεραιότητας Η δομή

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Red-Black Δέντρα. Red-Black Δέντρα

Red-Black Δέντρα. Red-Black Δέντρα Red-Black Δέντρα v 6 3 8 4 z Red-Black Δέντρα Περίληψη Από τα (2,4) δέντρα στα red-black δέντρα Red-black δέντρο Ορισμός Ύψος Εισαγωγή αναδόμηση επαναχρωματισμός Διαγραφή αναδόμηση επαναχρωματισμός προσαρμογή

Διαβάστε περισσότερα

Red- black δέντρα Εκτενείς Δομές Δεδομένων (Κεφ. 5)

Red- black δέντρα Εκτενείς Δομές Δεδομένων (Κεφ. 5) ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Red- black δέντρα Εκτενείς Δομές Δεδομένων (Κεφ. ) Δομές Δεδομένων Μπαλτάς Αλέξανδρος 4 Μαρτίου 0 ampaltas@ceid.upatras.gr Περιεχόμενα. Εισαγωγή. Ορισμός red- black

Διαβάστε περισσότερα

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

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 14: Δέντρα IV B Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: 2 3 Δένδρα, Εισαγωγή και άλλες πράξεις Άλλα Δέντρα: Β δένδρα, Β+ δέντρα, R δέντρα Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ231

Διαβάστε περισσότερα

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 16: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Ουρά Προτεραιότητας (Priority

Διαβάστε περισσότερα

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

Ουρά Προτεραιότητας (priority queue) Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει δύο βασικές λειτουργίες : Εισαγωγή στοιχείου με δεδομένο κλειδί. Επιστροφή ενός στοιχείου με μέγιστο (ή ελάχιστο) κλειδί και διαγραφή

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

Κεφάλαιο 11 Ένωση Ξένων Συνόλων Κεφάλαιο 11 Ένωση Ξένων Συνόλων Περιεχόμενα 11.1 Εισαγωγή... 227 11.2 Εφαρμογή στο Πρόβλημα της Συνεκτικότητας... 228 11.3 Δομή Ξένων Συνόλων με Συνδεδεμένες Λίστες... 229 11.4 Δομή Ξένων Συνόλων με Ανοδικά

Διαβάστε περισσότερα

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

Ενότητα 7 Ουρές Προτεραιότητας Ενότητα 7 Ουρές Προτεραιότητας ΗΥ240 - Παναγιώτα Φατούρου Ουρές Προτεραιότητας Θεωρούµε ένα χώρο κλειδιών U και έστω ότι µε κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type).

Διαβάστε περισσότερα

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

ιαφάνειες παρουσίασης #10 (β) ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr)

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 16 Δένδρα (Trees) 1 / 42 Δένδρα (Trees) Ένα δένδρο είναι ένα συνδεδεμένο γράφημα χωρίς κύκλους Για κάθε

Διαβάστε περισσότερα

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

Διαβάστε περισσότερα

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε μία αναδρομική συνάρτηση που θα παίρνει ως παράμετρο ένα δείκτη στη ρίζα ενός δυαδικού δένδρου και θα επιστρέφει το βαθμό του

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative

Διαβάστε περισσότερα

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

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS) ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS) Ταχεία Αναζήτηση Σε πίνακα: δυαδική αναζήτηση (binary search) σε ταξινοµηµένο πίνακα O(log n) Σε δένδρο: αναζήτηση σε ισοζυγισµένο δένδρο O(log n) Σε λίστα: Μπορούµε

Διαβάστε περισσότερα

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε για κάθε λειτουργία; χρόνο εκτέλεσης Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή μετά από Περιστροφές x αριστερή περιστροφή από το x y α β y

Διαβάστε περισσότερα

Εκτενείς Δομές Δεδομένων

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

Διαβάστε περισσότερα

Διάλεξη 18: B-Δένδρα

Διάλεξη 18: B-Δένδρα Διάλεξη 18: B-Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή & Ισοζυγισμένα Δένδρα 2-3 Δένδρα, Περιγραφή Πράξεων της Εισαγωγής και άλλες πράξεις Β-δένδρα Διδάσκων: Κωνσταντίνος

Διαβάστε περισσότερα

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M Δοµές Δεδοµένων & Ανάλυση Αλγορίθµων 3ο Εξάµηνο Δέντρα Δυαδικά Δέντρα Δυαδικά Δέντρα Αναζήτησης (inary Search Trees) http://aetos.it.teithe.gr/~demos/teaching_r.html Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Διαβάστε περισσότερα

Εκτενείς Δομές Δεδομένων

Εκτενείς Δομές Δεδομένων Εκτενείς Δομές Δεδομένων Εισαγωγή Δομές που βασίζονται σε συγκρίσεις : Ισοζυγισμένα δέντρα εύρεσης ( δέντρα τα φύλλα των οποίων απέχουν της ίδιας τάξεως μεγέθους, απόσταση απο τη ρίζα) Υψοζυγισμένα δέντρα

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 6. Δυαδικά Δέντρα 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 18/11/2016 Εισαγωγή Τα

Διαβάστε περισσότερα

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

Ενότητα 7 Ουρές Προτεραιότητας Ενότητα Ουρές Προτεραιότητας ΗΥ4 - Παναγιώτα Φατούρου Ουρές Προτεραιότητας Θεωρούµε ένα χώρο κλειδιών U και έστω ότι µε κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type). Έστω

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Ενότητα 13: B-Δέντρα/AVL-Δέντρα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων Ενότητα 13: B-Δέντρα/AVL-Δέντρα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε

Διαβάστε περισσότερα

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990, ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Τμήμα Πληροφορικής & Τηλεπικοινωνιών Μια σημείωση από τον Α. Δελή για το άρθρο: W. Pugh, Skip Lists: A Probabilistic Alternative to Balanced Trees, Comms of the ACM, 33(), June 10,

Διαβάστε περισσότερα

Μπαλτάς Αλέξανδρος 21 Απριλίου 2015

Μπαλτάς Αλέξανδρος 21 Απριλίου 2015 ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ B- Trees Δομές Δεδομένων Μπαλτάς Αλέξανδρος 21 Απριλίου 2015 ampaltas@ceid.upatras.gr Περιεχόμενα 1. Εισαγωγή 2. Ορισμός B- tree 3. Αναζήτηση σε B- tree 4. Ένθεση σε

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 20: Δυαδικό Δέντρο Αναζήτησης Δυαδικό δέντρο Κάθε κόμβος «γονέας» περιέχει δύο δείκτες που δείχνουν σε δύο κόμβους «παιδιά» του ιδίου τύπου. Αν οι δείκτες προς αυτούς

Διαβάστε περισσότερα

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ Δομές Δεδομένων Τι θα δούμε Ουρές προτεραιότητας Πράξεις Διωνυμικές Ουρές Διωνυμικά Δέντρα Διωνυμικοί Σωροί Ουρές Fibonacci Αναπαράσταση Πράξεις Ανάλυση Συγκρίσεις Ουρές προτεραιότητας

Διαβάστε περισσότερα

Συγκρίσιμα Αντικείμενα (comparable)

Συγκρίσιμα Αντικείμενα (comparable) Συγκρίσιμα Αντικείμενα (comparable) public class Student implements Comparable{ public String lastname; public String firstname; public int am; public int compareto(object s) throws ClassCastException{

Διαβάστε περισσότερα

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ισοζυγισμένα Δέντρα Υλοποίηση AVL δέντρων Εισαγωγή Κόμβων και Περιστροφές σε AVL δέντρα

Διαβάστε περισσότερα

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Ενότητα 9 (Union-Find) ΗΥ240 - Παναγιώτα Φατούρου 1 Έστω ότι S 1,, S k είναι ξένα υποσύνολα ενός συνόλου U, δηλαδή ισχύει ότι S i S j =, για κάθε i,j µε i j και S 1 S k = U. Λειτουργίες q MakeSet(X): επιστρέφει

Διαβάστε περισσότερα

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

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Αφηρημένες

Διαβάστε περισσότερα

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Η διαδικασία PercolateDown, Δημιουργία Σωρού O Αλγόριθμος Ταξινόμησης HeapSort Υλοποίηση, Παραδείγματα

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι - Δυαδικά Δένδρα (binary trees) - Δυαδικά Δένδρα Αναζήτησης (binary search trees) 1 Δυαδικά Δένδρα Ορισμοί Λειτουργίες Υλοποιήσεις ΑΤΔ Εφαρμογές 2 Ορισμοί (αναδρομικός ορισμός) Ένα δένδρο t είναι ένα πεπερασμένο

Διαβάστε περισσότερα

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

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, ορισμοί, πράξεις και αναπαράσταση στη μνήμη ΔυαδικάΔένδρακαιΔυαδικάΔένδραΑναζήτησης ΕΠΛ 231 Δομές

Διαβάστε περισσότερα

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ισοζυγισμένα Δέντρα Υλοποίηση AVL δέντρων Εισαγωγή Κόμβων και Περιστροφές σε AVL δέντρα

Διαβάστε περισσότερα

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

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Δένδρα (Trees) Βασικές Έννοιες. Δυαδικά Δένδρα. Δυαδικά Δένδρα Αναζήτησης. AVL Δένδρα. Δένδρα: Βασικές Έννοιες Ορισμοί Λειτουργίες Υλοποιήσεις ΑΤΔ Δένδρο: μοντέλο ιεραρχικής

Διαβάστε περισσότερα

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 1 2 3 4 5 πλήθος κορυφών πλήθος ακμών Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από

Διαβάστε περισσότερα

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε για κάθε λειτουργία; χρόνο εκτέλεσης Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή μετά από Περιστροφές x αριστερή περιστροφή από το x y α β y

Διαβάστε περισσότερα

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ Δομές Δεδομένων Παπαγιαννόπουλος Δημήτριος 30 Μαρτίου 2017 18 Μαΐου 2017 papagianno@ceid.upatras.gr 1 Περιεχόμενα Ουρές προτεραιότητας Πράξεις Διωνυμικές Ουρές Διωνυμικά Δέντρα Διωνυμικοί

Διαβάστε περισσότερα

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης Δοµές Δεδοµένων 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης Περίληψη Quicksort Χαρακτηριστικά επιδόσεων Μη αναδροµική υλοποίηση Δέντρα Μαθηµατικές ιδιότητες Δοµές Δεδοµένων 11-2

Διαβάστε περισσότερα

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S Μελετάμε την περίπτωση όπου αποθηκεύουμε ένα (δυναμικό) σύνολο στοιχειών,, τα οποίo είναι υποσύνολο του. Υποστηριζόμενες λειτουργίες αναζήτηση(s,x): εισαγωγή(s,x): διαγραφή(s,x): διάδοχος(s,x): προκάτοχος(s,x):

Διαβάστε περισσότερα

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά EPL231: Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά Αναδρομή Η αναδρομή εμφανίζεται όταν μία διεργασία καλεί τον εαυτό της Υπάρχουν

Διαβάστε περισσότερα

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης Δοµές Δεδοµένων 18η Διάλεξη Ισορροπηµένα δέντρα Ε. Μαρκάκης Περίληψη Επανάληψη των Τυχαιοποιηµένων ΔΔΑ, Στρεβλών ΔΔΑ, Δέντρων 2-3-4 Δέντρα κόκκινου-µαύρου Λίστες Παράλειψης Χαρακτηριστικά επιδόσεων - συµπεράσµατα

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Ισοζυγισμένα υαδικά έντρα Αναζήτησης

Ισοζυγισμένα υαδικά έντρα Αναζήτησης Ισοζυγισμένα υαδικά έντρα Αναζήτησης ομές εδομένων 3ο εξάμηνο ιδάσκων: Χρήστος ουλκερίδης ιαφάνειες προσαρμοσμένες από το υλικό της Μαρίας Χαλκίδη Ισοζυγισμένα υαδικά έντρα Αναζήτησης Ισοζυγισμένα Α είναι

Διαβάστε περισσότερα

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Πτυχιακή Εξεταστική Ιούλιος 2014 Διδάσκων : Ευάγγελος Μαρκάκης 09.07.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες

Διαβάστε περισσότερα

ΔυαδικάΔΕΝΔΡΑΑναζήτησης

ΔυαδικάΔΕΝΔΡΑΑναζήτησης ΔυαδικάΔΕΝΔΡΑΑναζήτησης Ρίζα (κόμβος που δεν έχει γονέα) πρόγονοι απόγονοι γονέας παιδιά έντρο είναι µία συλλογή από στοιχεία, που ονοµάζονται κόµβοι και συνδέονται µεταξύ τους µε τη βοήθεια ακµών αδέλφια

Διαβάστε περισσότερα

Αναδρομικοί Αλγόριθμοι

Αναδρομικοί Αλγόριθμοι Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας ένα ή περισσότερα στιγμιότυπα του ίδιου προβλήματος. Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας

Διαβάστε περισσότερα

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 16: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Ουρά Προτεραιότητας Η δομή

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων Κατ οίκον Εργασία 3 Σκελετοί Λύσεων Άσκηση 1 (α) Έστω Α(n) και Κ(n) ο αριθμός των ακμών και ο αριθμός των κόμβων ενός αυστηρά δυαδικού δένδρου με n φύλλα. Θέλουμε να αποδείξουμε για κάθε n 1 την πρόταση

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας Περιεχόμενα 14.1 Διωνυμικά Δένδρα... 255 14.2 Διωνυμικές Ουρές... 258 14.1.1 Εισαγωγή στοιχείου σε διωνυμική ουρά... 258 14.1.2 Διαγραφή μεγίστου από διωνυμική

Διαβάστε περισσότερα

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

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ Ουρές Προτεραιότητας (Priority Queues) Θεωρούµε ότι τα προς αποθήκευση στοιχεία έχουν κάποια διάταξη (καθένα έχει µια προτεραιότητα). Τα προς αποθήκευση στοιχεία είναι

Διαβάστε περισσότερα

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης Ουρές Προτεραιότητας: Υπενθύμιση Σωροί / Αναδρομή / Ταξινόμηση Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς (Abstract Data Type) με μεθόδους: Μπορεί να υλοποιηθεί με

Διαβάστε περισσότερα

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη (Union-Find) ΗΥ240 - Παναγιώτα Φατούρου 1 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης Έστω ότι S 1,, S k είναι ξένα υποσύνολα ενός συνόλου U, δηλαδή

Διαβάστε περισσότερα

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

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 26: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας -Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι

Διαβάστε περισσότερα

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Σωρός Μεγίστου ως ΑΤΔ Ένας σωρός μεγίστου (max heap) είναι ένας ΑΤΔ που

Διαβάστε περισσότερα

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

Δομές Δεδομένων Ενότητα 5 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 5: Δυαδικά Δένδρα Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Διαβάστε περισσότερα

ΗΥ360 Αρχεία και Βάσεις εδοµένων

ΗΥ360 Αρχεία και Βάσεις εδοµένων ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων:. Πλεξουσάκης Tutorial B-Trees, B+Trees Μπαριτάκης Παύλος 2018-2019 Ιδιότητες B-trees Χρήση για μείωση των προσπελάσεων στον δίσκο Επέκταση των Binary Search Trees

Διαβάστε περισσότερα

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1 B-Δένδρα Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: 2-3 Δένδρα, Υλοποίηση και πράξεις Β-δένδρα ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1 2-3 Δένδρα Γενίκευση των δυαδικών δένδρων αναζήτησης.

Διαβάστε περισσότερα

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα). Κ08 Δομές Δεδομένων και Τεχνικές Προγραμματισμού Διδάσκων: Μανόλης Κουμπαράκης Εαρινό Εξάμηνο 2016-2017. Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Διαβάστε περισσότερα

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα Φεβρουαρίου 0 / ένδρα Ενα δένδρο είναι

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Insert(K,I,S) Delete(K,S) ΕΝΟΤΗΤΑ 5 ΣΥΝΟΛΑ & ΛΕΞΙΚΑ Φατούρου Παναγιώτα 1 Σύνολα (Sets) Τα µέλη ενός συνόλου προέρχονται από κάποιο χώρο αντικειµένων/στοιχείων (π.χ., σύνολα αριθµών, λέξεων, ζευγών αποτελούµενα από έναν αριθµό και

Διαβάστε περισσότερα

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε για κάθε λειτουργία; χρόνο εκτέλεσης Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή μετά από Περιστροφές x αριστερή περιστροφή από το x y α β y

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Μάθημα 22: Δυαδικά δέντρα (Binary Trees) Trees Page 1 Μάθημα 22: Δυαδικά δέντρα (Binary Trees) Ένα δένδρο είναι δυαδικό αν όλοι οι κόμβοι του έχουν βαθμό (degree)

Διαβάστε περισσότερα

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε για κάθε λειτουργία; χρόνο εκτέλεσης Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή μετά από Περιστροφές x αριστερή περιστροφή από το x y α β y

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 23: Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ισοζυγισμένα Δέντρα - Υλοποίηση AVL-δέντρων - Εισαγωγή Κόμβων και Περιστροφές σε AVL δέντρα Διδάσκων:

Διαβάστε περισσότερα

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης Δοµές Δεδοµένων 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης Ε. Μαρκάκης Περίληψη Δέντρα Δυαδικής Αναζήτησης Υλοποιήσεις εισαγωγής και αναζήτησης Χαρακτηριστικά επιδόσεων ΔΔΑ Εισαγωγή στη ρίζα ΔΔΑ Υλοποιήσεις

Διαβάστε περισσότερα

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

Ουρά Προτεραιότητας (priority queue) Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει τις ακόλουθες λειτουργίες PQinsert : εισαγωγή στοιχείου PQdelmax : επιστροφή του στοιχείου με το μεγαλύτερο* κλειδί και διαγραφή του

Διαβάστε περισσότερα