Professional Documents
Culture Documents
DD05 Dendra 1
DD05 Dendra 1
Δεδομένων
VI -1
Δένδρα
Ελένη Γαλιώτου
ΔΕΝΔΡΑ
ΟΡΙΣΜΟΙ – ΤΡΟΠΟΙ ΔΙΑΣΧΙΣΗΣ -ΠΑΡΑΛΛΑΓΕΣ
ΔΕΝΔΡΟ (TREE)
Ορισμός:
Δένδρο (tree) είναι ένα σύνολο κόμβων που συνδέονται με ακμές
Από κάθε κόμβο μπορεί να ξεκινούν καμία, μία ή περισσότερες ακμές
Υπάρχει ένας μόνο κόμβος με την ονομασία ρίζα (root) από τον οποίο
ξεκινούν ακμές αλλά δεν καταλήγουν
Σε κάθε κόμβο (εκτός της ρίζας) καταλήγει μία μόνο ακμή
Μη-γραμμική δομή
Σχήμα 1.1. : Δενδρική
αναπαράσταση
Σχήμα 1.2:
Εναλλακτικές
αναπαραστάσεις του
ίδιου δένδρου
ΟΡΙΣΜΟΙ
• Ένας κόμβος α είναι ο πατέρας (father) των κόμβων β και γ, όταν από τον α
ξεκινούν ακμές που καταλήγουν στους β και γ.
• Αντίστοιχα, οι β και γ είναι τα παιδιά (children) του α.
• Η ορολογία αυτή επεκτείνεται σε προγόνους και απογόνους αντίστοιχα.
• Παράδειγμα: Στο σχήμα 1.1 ο κόμβος Γ είναι ο πατέρας των κόμβων Ζ, Η, Θ και
αυτοί είναι παιδιά του Γ
• Βαθμός (degree) ενός κόμβου: ο αριθμός των παιδιών του.
• Βαθμός ενός δένδρου: ο μέγιστος από τους βαθμούς των κόμβων του
• Στο σχήμα 1.1 ο βαθμός του κόμβου Β είναι 2 ενώ ο βαθμός του δένδρου είναι 3.
Γιατί;;
ΟΡΙΣΜΟΙ
• Ν-αδικά (n-ary) δένδρα: Δένδρα βαθμού n
• Συνήθως χρησιμοποιούνται: δυαδικά (binary), τριαδικά (ternary), τετραδικά
(quatree)
• Τερματικοί κόμβοι (terminal nodes) ή φύλλα (leaves): κόμβοι οι οποίοι δεν έχουν
παιδιά.
• Εσωτερικοί (internal) ή μη-τερματικοί κόμβοι (non-terminal nodes) ή κλαδιά
(branches): οι υπόλοιποι κόμβοι
• Επίπεδο ενός κόμβου: ο αριθμός των προγόνων του (μέχρι τη ρίζα) συν 1.
• Στο σχήμα 1.1, ο κόμβος Δ βρίσκεται στο επίπεδο 3
• Βάθος (depth) ή ύψος (height) ενός δένδρου: Το μέγιστο επίπεδο των
κόμβων του δένδρου
• Το δένδρο του σχήματος 1.1 έχει ύψος 4.
• Υποδένδρο: Το δένδρο που σχηματίζεται, αν ως ρίζα ληφθεί ένας
οποιοσδήποτε κόμβος.
ΠΟΣΟΤΙΚΑ ΣΤΟΙΧΕΙΑ
• Ένα δένδρο βαθμού d και ύψους h μπορεί να έχει το πολύ:
κόμβους
• Πλήρες (complete) δένδρο: Ένα δένδρο που περιέχει τον μέγιστο βαθμό
κόμβων
• Ένα πλήρες δυαδικό δένδρο με n κόμβους έχει ύψος log(n+1).
Μήκος μονοπατιού ενός κόμβου: ο αριθμός κόμβων που πρέπει να
περάσουμε για να φτάσουμε από την ρίζα στον κόμβο αυτόν.
Εσωτερικό μήκος μονοπατιού ενός δένδρου: Το άθροισμα του μήκους
των μονοπατιών όλων των κόμβων του δένδρου
Μέσο μήκος μονοπατιού: το πηλίκο του εσωτερικού μήκους μονοπατιού
δια το πλήθος των κόμβων
Για ένα πλήρες δένδρο ύψους h με πλήθος κόμβων n= 2h-1 που έχει καταχωρηθεί στον
πίνακα info() όπως στα προηγούμενα, ισχύουν τα εξής:
Για κάθε κόμβο i
Ο πατέρας του βρίσκεται στη θέση [i/2]. Αν i=1 τότε προφανώς πρόκειται για τη ρίζα
Το αριστερό του παιδί, βρίσκεται στη θέση 2i, αν 2i <= n.
Αν 2i > n, τότε ο κόμβος i δεν έχει αριστερό παιδί
Το δεξί του παιδί, βρίσκεται συνεχόμενα με το αριστερό στη θέση 2i+1, αν 2i+1 <= n.
Αν 2i+1 > n, τότε ο κόμβος i δεν έχει δεξί παιδί
Σχήμα 6: Για μη πλήρη δυαδικά δένδρα…
Αποθήκευση του δένδρου του σχήματος 4 με έναν πίνακα.
Για μη πλήρη δυαδικά δένδρα… (συν.)
1. Εξετάζουμε την τιμή της ρίζας του δένδρου σε σχέση με την τιμή του κόμβου
που ζητάμε
2. Αν ο ζητούμενος κόμβος είναι μικρότερος από τη ρίζα συνεχίζουμε με το
αριστερό υποδένδρο
3. Αν ο ζητούμενος κόμβος είναι μεγαλύτερος από τη ρίζα συνεχίζουμε με το δεξί
υποδένδρο
4. Αν βρεθεί ο ζητούμενος κόμβος ή φτάσουμε σε κενό δείκτη, η αναζήτηση
σταματά
Αλγόριθμος Search-Node
ΕΙΣΑΓΩΓΗ Η ΔΗΜΙΟΥΡΓΙΑ ΚΟΜΒΟΥ
• Σ’ ένα δένδρο αναζήτησης, νέοι κόμβοι εντάσσονται ως τερματικοί κόμβοι.
• Αρχικά, ακολουθείται η διαδικασία αναζήτησης για τον κόμβο που πρέπει να
προστεθεί
o Θα βρεθεί ένας κενός δείκτης
o Ο κόμβος προστίθεται με τρόπο ώστε ο κενός δείκτης να δείχνει τώρα σ’ αυτόν.
• Για τη διαδικασία αναζήτησης μπορεί να χρησιμοποιηθεί ο αλγόριθμος
Search_Node, αφού τροποποιηθεί κατάλληλα ώστε να παρέχει ως αποτέλεσμα
και τη θέση του πατέρα του προς δημιουργία κόμβου
• Όταν ένα δυαδικό δένδρο αναζήτησης πρόκειται να δημιουργηθεί για πρώτη
φορά:
o Ο πρώτος κόμβος που προσέρχεται γίνεται η ρίζα του δένδρου
o Ο επόμενος κόμβος γίνεται αριστερό ή δεξί παιδί της ρίζας ανάλογα με την τιμή του
o Για κάθε επόμενο κόμβο ακολουθείται η προηγούμενη διαδικασία
Σχήμα 8: Δημιουργία ενός δένδρου αναζήτησης
Οι προς διαγραφή
κόμβοι
παρουσιάζονται
γραμμοσκιασμένοι
Φυσική και λογική διαγραφή
• Η διαγραφή κόμβου όπως περιγράφηκε πριν, αναφέρεται ως φυσική διαγραφή
• Στις εφαρμογές, συνήθως προτιμάται η λογική διαγραφή
o Ένας κόμβος απλά σημειώνεται ως διαγραμμένος
o Απαιτείται ακόμη μία πληροφορία στον κόμβο: ενδείκτης εγκυρότητας του
κόμβου
o Μετά από κάποια δραστηριότητα επί του δένδρου, το ύψος μεγαλώνει ενώ
οι ακυρωμένοι κόμβοι καταλαμβάνουν θέσεις μνήμης
o => Δημιουργία νέου δένδρου χωρίς τους ακυρωμένους κόμβους
o Η αναδιοργάνωση μπορεί να γίνεται περιοδικά, όταν το ποσοστό των
ακυρωμένων κόμβων ξεπεράσει ένα συγκεκριμένο επίπεδο
Προτάσεις
➢ Η μέση τιμή του αριθμού των συγκρίσεων Cε για επιτυχημένη αναζήτηση σε πλήρες
δυαδικό δένδρο
Ορισμός: (Τέλεια) Ισοζυγισμένο δένδρο λέγεται το δυαδικό δένδρο που για κάθε
κόμβο, το δεξί και το αριστερό υποδένδρο έχουν διαφορά 1 το πολύ κόμβο.
Σχήμα 11:
Δένδρο ισοζυγισμένο
κατά ύψος
Χαρακτηριστικά δένδρων AVL
• Μετά από κάθε εισαγωγή ή διαγραφή παραμένουν ισοζυγισμένα σε
ύψος.
• Όταν γίνεται εισαγωγή / διαγραφή και παραβιάζεται ο ορισμός ισοζύγισης
o με κατάλληλο τρόπο γίνεται ένας αριθμός επαναζυγιστικών πράξεων
σε τοπικό επίπεδο (περιστροφές)
o => το δένδρο παραμένει ισοζυγισμένο
• Τα δένδρα AVL στη χειρότερη περίπτωση, επιδεικνύουν λογαριθμική
συμπεριφορά
Δενδρα ipr (Gonnet 1982)
Ανομοιογενές δένδρο
• Τερματικοί κόμβοι: Τελεστέοι.
• Εμφάνιση με την ίδια σειρά όπως και στην
παράσταση
• Εσωτερικοί κόμβοι: Τελεστές των πράξεων.
o Χαμηλότερα επίπεδα: κόμβοι των
οποίων οι πράξεις πρέπει να
προηγηθούν
Διασχίσεις - Μορφές
• Προδιατεταγμένη διάσχιση: Προθεματική (prefix) μορφή της παράστασης -
πολωνικός συμβολισμός
+ . αβ . γδ
• Μεταδιατεταγμένη διάσχιση: Μεταθεματική (postfix) μορφή της παράστασης –
ανάστροφος πολωνικός συμβολισμός
αβ .γδ . +
• Ενδοδιατεταγμένη διάσχιση: Ένθετη (infix) μορφή της παράστασης
α.β+γ.δ
• Χωρίς παρενθέσεις: Η σειρά των πράξεων επιβάλλεται από τη δομή του δένδρου
• Μία παράσταση με παρενθέσεις δεν μπορεί να παραχθεί με απλή
ενδοδιατεταγμένη διάσχιση του αντίστοιχου δένδρου
Πίνακας 1: Σχέση διάσχισης δένδρου και μορφή παράστασης
ΑΛΛΑ ΔΕΝΔΡΑ
Νηματοποιημένα δυαδικά δένδρα
• Δυαδικά δένδρα: Οι μισοί δείκτες προς τα παιδιά είναι κενοί (NULL)
• Είναι δυνατόν κάποιοι από αυτούς να δείχνουν σε άλλους κόμβους => δημιουργία
κύκλων
• Νήματα (threads): Ψευδοακμές που δημιουργούνται
• Διευκόλυνση εφαρμογών που εκμεταλλεύονται το δένδρο.
• Πρόβλημα: Ένας δείκτης είναι πραγματικός δείκτης ή νήμα;
• => Κάθε κόμβος συμπληρώνεται με μία λογική μεταβλητή που καθορίζει τον τύπο
του δείκτη
• Διάσχιση νηματοποιημένων δένδρων: χωρίς αναδρομή
Σχήμα 14: Δεξιό ενδονηματικό (right in-threaded) δένδρο
• Νήματα : Διακεκομμένες γραμμές (ψευδοακμές)
• Δεξιός δείκτης κάθε κόμβου που έχει την τιμή NULL
o Μεταβάλλεται ώστε να δείχνει τον επόμενο κόμβο
επίσκεψης λαμβάνοντας υπ’όψιν την
ενδοδιατεταγμένη διάσχιση
• Ο δείκτης του δεξιότερου κόμβου G διατηρεί την τιμή
NULL.
• Δύο ακόμη τύποι νηματοποιημένων δένδρων:
o Λαμβάνοντας υπ’ όψιν τους άλλους τρόπους
διάσχισης
Τετραδικά δένδρα