You are on page 1of 69

Δομές

Δεδομένων
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).
Μήκος μονοπατιού ενός κόμβου: ο αριθμός κόμβων που πρέπει να
περάσουμε για να φτάσουμε από την ρίζα στον κόμβο αυτόν.
Εσωτερικό μήκος μονοπατιού ενός δένδρου: Το άθροισμα του μήκους
των μονοπατιών όλων των κόμβων του δένδρου
Μέσο μήκος μονοπατιού: το πηλίκο του εσωτερικού μήκους μονοπατιού
δια το πλήθος των κόμβων

n: το πλήθος των κόμβων στο δένδρο,


ni: το πλήθος των κόμβων στο επίπεδο i
ΣΧΗΜΑ 2: ΠΛΗΡΗ ΔΕΝΔΡΑ
ΣΧΗΜΑ 3: ΑΠΟΘΗΚΕΥΣΗ ΔΕΝΔΡΩΝ
Τα δένδρα χρησιμοποιούνται για την αναπαράσταση δεδομένων (κόμβοι) και
τις συσχετίσεις τους (ακμές)
ΣΧΗΜΑ 4: ΑΠΟΘΗΚΕΥΣΗ ΔΕΝΔΡΩΝ ΜΕ ΠΙΝΑΚΕΣ
ΑΠΟΘΗΚΕΥΣΗ ΜΕ ΕΝΑ ΜΟΝΟ ΠΙΝΑΚΑ

• Παρατήρηση: Είναι πολύ αποδοτικό να κρατηθούν 2h-1 θέσεις μνήμης όπου


h το ύψος του δένδρου
• Σε κάθε θέση μπαίνει ένας κόμβος και η σχέση με τον πατέρα και τα παιδιά
του καθορίζεται από τις θέσεις.
• Για την καταχώρηση των κόμβων, πρώτα αριθμούνται κατά αύξουσα τάξη
αρχίζοντας από το επίπεδο 1, στη συνέχεια το επίπεδο 2, κοκ.
• Στο σχήμα 5 που ακολουθεί, φαίνεται η αρίθμηση των κόμβων ενός
πλήρους δυαδικού δένδρου ύψους 4.
• Με αυτή τη σειρά οι κόμβοι αποθηκεύονται σε ένα μονοδιάστατο πίνακα
• Ο i-οστός κόμβος είναι ο info(i)
Σχήμα 5: Αναπαράσταση πλήρους δυαδικού δένδρου με
έναν πίνακα
Αποθήκευση με έναν πίνακα (συν.)

Για ένα πλήρες δένδρο ύψους 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 με έναν πίνακα.
Για μη πλήρη δυαδικά δένδρα… (συν.)

• Σπατάλη μνήμης που εξαρτάται από το δένδρο…


• ΌΜΩΣ… Απαιτείται ένας πίνακας αντί για τρεις
• Επιλογή τρόπου: Απόφαση του σχεδιαστή της εφαρμογής!
ΔΥΑΔΙΚΑ ΔΕΝΔΡΑ ΑΝΑΖΗΤΗΣΗΣ
ΔΕΝΔΡΟ ΑΝΑΖΗΤΗΣΗΣ
Ορισμός: Δένδρο αναζήτησης είναι το δένδρο στο οποίο η τιμή κάθε κόμβου
είναι μεγαλύτερη από την τιμή όλων των κόμβων του αριστερού του
υποδένδρου και μικρότερη από την τιμή όλων των κόμβων του δεξιού του
υποδένδρου.
Τα δένδρα αναζήτησης είναι διατεταγμένα δένδρα, δηλ. δένδρα στα οποία
έχει σημασία η διάταξη των παιδιών κάθε κόμβου.
Τα δένδρα αναζήτησης χρησιμοποιούνται όταν είναι σημαντική η γρήγορη
προσπέλαση δεδομένων, που υπακούουν σε κάποια σειρά κατάταξης.
Σχήμα 7: Ένα δυαδικό δένδρο αναζήτησης
Αναζήτηση κόμβου σε δυαδικό δένδρο αναζήτησης

1. Εξετάζουμε την τιμή της ρίζας του δένδρου σε σχέση με την τιμή του κόμβου
που ζητάμε
2. Αν ο ζητούμενος κόμβος είναι μικρότερος από τη ρίζα συνεχίζουμε με το
αριστερό υποδένδρο
3. Αν ο ζητούμενος κόμβος είναι μεγαλύτερος από τη ρίζα συνεχίζουμε με το δεξί
υποδένδρο
4. Αν βρεθεί ο ζητούμενος κόμβος ή φτάσουμε σε κενό δείκτη, η αναζήτηση
σταματά
Αλγόριθμος Search-Node
ΕΙΣΑΓΩΓΗ Η ΔΗΜΙΟΥΡΓΙΑ ΚΟΜΒΟΥ
• Σ’ ένα δένδρο αναζήτησης, νέοι κόμβοι εντάσσονται ως τερματικοί κόμβοι.
• Αρχικά, ακολουθείται η διαδικασία αναζήτησης για τον κόμβο που πρέπει να
προστεθεί
o Θα βρεθεί ένας κενός δείκτης
o Ο κόμβος προστίθεται με τρόπο ώστε ο κενός δείκτης να δείχνει τώρα σ’ αυτόν.
• Για τη διαδικασία αναζήτησης μπορεί να χρησιμοποιηθεί ο αλγόριθμος
Search_Node, αφού τροποποιηθεί κατάλληλα ώστε να παρέχει ως αποτέλεσμα
και τη θέση του πατέρα του προς δημιουργία κόμβου
• Όταν ένα δυαδικό δένδρο αναζήτησης πρόκειται να δημιουργηθεί για πρώτη
φορά:
o Ο πρώτος κόμβος που προσέρχεται γίνεται η ρίζα του δένδρου
o Ο επόμενος κόμβος γίνεται αριστερό ή δεξί παιδί της ρίζας ανάλογα με την τιμή του
o Για κάθε επόμενο κόμβο ακολουθείται η προηγούμενη διαδικασία
Σχήμα 8: Δημιουργία ενός δένδρου αναζήτησης

Αρχική δημιουργία ενός


δένδρου αναζήτησης με τη
διαδοχική εισαγωγή των
κόμβων με τιμές
50, 10,60,40, 90,30
(με αυτή τη σειρά)
Διαγραφη ή ακύρωση κόμβου

• Αν ο κόμβος που πρέπει να διαγραφεί είναι φύλλο:


o Απλά διαγράφεται
• Αν έχει μόνο ένα παιδί, το οποίο είναι φύλλο:
Αντικαθίσταται από τον κόμβο-παιδί
• Αν έχει δύο παιδιά, αντικαθίσταται είτε:
o Από τον πιο δεξιό κόμβο του αριστερού υποδένδρου, είτε
o Από τον πιο αριστερό κόμβο του δεξιού υποδένδρου
Σχήμα 9: Διάφορες περιπτώσεις διαγραφής κόμβων

Οι προς διαγραφή
κόμβοι
παρουσιάζονται
γραμμοσκιασμένοι
Φυσική και λογική διαγραφή
• Η διαγραφή κόμβου όπως περιγράφηκε πριν, αναφέρεται ως φυσική διαγραφή
• Στις εφαρμογές, συνήθως προτιμάται η λογική διαγραφή
o Ένας κόμβος απλά σημειώνεται ως διαγραμμένος
o Απαιτείται ακόμη μία πληροφορία στον κόμβο: ενδείκτης εγκυρότητας του
κόμβου
o Μετά από κάποια δραστηριότητα επί του δένδρου, το ύψος μεγαλώνει ενώ
οι ακυρωμένοι κόμβοι καταλαμβάνουν θέσεις μνήμης
o => Δημιουργία νέου δένδρου χωρίς τους ακυρωμένους κόμβους
o Η αναδιοργάνωση μπορεί να γίνεται περιοδικά, όταν το ποσοστό των
ακυρωμένων κόμβων ξεπεράσει ένα συγκεκριμένο επίπεδο
Προτάσεις
➢ Η μέση τιμή του αριθμού των συγκρίσεων Cε για επιτυχημένη αναζήτηση σε πλήρες
δυαδικό δένδρο

όπου n = αριθμός των κόμβων, h = το ύψος


➢ Σε ένα πλήρες δυαδικό δένδρο οι μισοί κόμβοι βρίσκονται στο τελευταίο επίπεδο
Παραδείγματα:
o Πλήρες δένδρο, ύψος: 10, αριθμός κόμβων: 1023, μέσος αριθμός συγκρίσεων: 9
o Πλήρες δένδρο, ύψος: 20, αριθμός κόμβων: 220-1, μέσος αριθμός συγκρίσεων: 19
Προτάσεις (συν.)
➢ Η μέση τιμή του αριθμού των συγκρίσεων για την επιτυχή αναζήτηση Cε και την
ανεπιτυχή Ca σε ένα τυχαίο δένδρο συνδέονται με την ταυτότητα:
n = αριθμός κόμβων , h = ύψος
➢ Η μέση τιμή του αριθμού των συγκρίσεων για την επιτυχή αναζήτηση Cε και την
ανεπιτυχή Ca σε ένα τυχαίο δένδρο είναι:

Από τις σχέσεις αυτές προκύπτει ότι:


Πίνακας συγκρίσεων για επιτυχή αναζήτηση

Συμπέρασμα: Η αναζήτηση σε οποιοδήποτε δυαδικό δένδρο αναζήτησης


είναι κατά μέσο όρο 39% ακριβότερη από την αναζήτηση σε ένα πλήρες
δένδρο με τον ίδιο αριθμό κόμβων
ΙΣΟΖΥΓΙΣΜΕΝΑ ΔΕΝΔΡΑ
Ισοζυγισμένα δένδρα

Ορισμός: (Τέλεια) Ισοζυγισμένο δένδρο λέγεται το δυαδικό δένδρο που για κάθε
κόμβο, το δεξί και το αριστερό υποδένδρο έχουν διαφορά 1 το πολύ κόμβο.

Σχήμα 10: Ποιο από τα δύο


δένδρα είναι ισοζυγισμένο;
Γιατί;
Προτίμηση για ισοζυγισμένα δένδρα…

• Επιδιώκεται η δημιουργία ενός ισοζυγισμένου δένδρου διότι μειώνεται


κατά πολύ ο χρόνος αναζήτησης ενός συγκεκριμένου κόμβου
• Δηλ. μειώνεται το εσωτερικό μήκος μονοπατιού και το ύψος.
• Ο αριθμός των συγκρίσεων πλησιάζει πολύ τον αριθμό συγκρίσεων σε
ένα πλήρες δένδρο (που περιέχει ακριβώς 2h-1 κόμβους)
Δένδρα AVL (Adelson-Velskii & Landis (1962))
Ορισμός: Ένα δυαδικό δένδρο λέγεται ισοζυγισμένο κατά ύψος (height balanced
tree) αν για κάθε κόμβο, η διαφορά των υψών των δύο υποδένδρων είναι
μικρότερη ή ίση του 1.

Σχήμα 11:
Δένδρο ισοζυγισμένο
κατά ύψος
Χαρακτηριστικά δένδρων AVL
• Μετά από κάθε εισαγωγή ή διαγραφή παραμένουν ισοζυγισμένα σε
ύψος.
• Όταν γίνεται εισαγωγή / διαγραφή και παραβιάζεται ο ορισμός ισοζύγισης
o με κατάλληλο τρόπο γίνεται ένας αριθμός επαναζυγιστικών πράξεων
σε τοπικό επίπεδο (περιστροφές)
o => το δένδρο παραμένει ισοζυγισμένο
• Τα δένδρα AVL στη χειρότερη περίπτωση, επιδεικνύουν λογαριθμική
συμπεριφορά
Δενδρα ipr (Gonnet 1982)

• Πράξεις επαναζυγισμού κατά τις εισαγωγές και διαγραφές, αντίστοιχες


με αυτές των δένδρων AVL
• Το δένδρο παραμένει ισοζυγισμένο με κριτήριο τη μείωση του
εσωτερικού μονοπατιού ( Internal Path Reduction)
• Παρουσιάζουν καλύτερες επιδόσεις κατά την αναζήτηση με τίμημα το
αυξημένο κόστος εισαγωγής κόμβου
Άλλα ισοζυγισμένα δένδρα

• Δένδρα ισοζυγισμένα κατά βάρος, ισοζυγισμένα ευριστικά δένδρα,


δένδρα ισοζυγισμένα κατά δρόμο κ.α.
• Πλεονεκτήματα είτε στον χώρο μνήμης, είτε στις χρονικές επιδόσεις
• Χρήσιμα όταν το υλικό δεν είχε τις σημερινές δυνατότητες
• Στις εφαρμογές: Μετά από αρκετές εισαγωγές / διαγραφές κόμβων το
δένδρο δεν είναι πλέον ισοζυγισμένο και η επίδοσή του μειώνεται
• Μπορούμε να εκτιμήσουμε κατά πόσο έχει παραβιαστεί ο ισοζυγισμός
του δένδρου με βάση το πλήθος των κόμβων και το ύψος του όπως
διαμορφώνονται κατά την ενημέρωση του δένδρου
• Οταν το κρίνουμε καταφεύγουμε σε αναδιοργάνωση του δένδρου
Αναδιοργάνωση
• Το περιεχόμενο των κόμβων μεταφέρεται με οποιαδήποτε σειρά σε άλλη δομή,
π.χ. πίνακα
• Ο πίνακας ταξινομείται
• Λαμβάνεται το μεσαίο στοιχείο του πίνακα (διάμεσος) και γίνεται ρίζα του νέου
δένδρου
• Το μεσαίο στοιχείο του αριστερού υποπίνακα γίνεται αριστερό παιδί της ρίζας
• Το μεσαίο στοιχείο του δεξιού υποπίνακα γίνεται δεξί παιδί της ρίζας, κ.ο.κ.
• => Αναδρομικός αλγόριθμος όπου με τρόπο ανάλογο της δυαδικής αναζήτησης,,
για κάθε στοιχείο του πίνακα, καλείται ο αλγόριθμος δημιουργίας κόμβου.
• Αποτέλεσμα: Δημιουργία ενός (τέλεια) ισοζυγισμένου δένδρου
ΔΙΑΣΧΙΣΗ ΔΕΝΔΡΩΝ
Διάσχιση (traverse)
• Ορισμός: Διάσχιση δένδρου είναι η λειτουργία κατά την οποία πρέπει να
επισκεφθούμε κάθε κόμβο ακριβώς μία φορά
• Αναδρομικός ορισμός δένδρου: Ένα σύνολο κόμβων που συνδέονται με ακμές.
Υπάρχει ένας κόμβος που ονομάζεται ρίζα (root) στον οποίο δεν καταλήγουν αλλά από
τον οποίο ξεκινούν ακμές. Οι υπόλοιποι κόμβοι αποτελούν ξένα μεταξύ τους
υποδένδρα.
• 3 διαφορετικοί τρόποι επίσκεψης των κόμβων. Κάθε τρόπος απαιτεί την εκτέλεση των
παρακάτω:
1. Επίσκεψη της ρίζας
2. Επίσκεψη του αριστερού υποδένδρου
3. Επίσκεψη του δεξιού υποδένδρου
Οι διαδικασίες 2 & 3 απαιτούν επίσκεψη υποδένδρου που γίνεται επαναλαμβάνοντας
τις ίδιες διαδικασίες με την ίδια σειρά
Προδιατεταγμένη διάσχιση

Αν η σειρά προγματοποίησης των διαδικασιών είναι η ( 1, 2, 3 ) τότε η διάσχιση του


δένδρου λέγεται προδιατεταγμένη (preorder)

Σχήμα 12: Ένα δυαδικό δένδρο


Διάσχιση δένδρου του σχήματος 12:
Στην προδιατεταγμένη διάσχιση,
επισκεπτόμαστε τη ρίζα πριν από
τα παιδιά της
Μεταδιατεταγμένη διάταξη
• Αν η σειρά εκτέλεσης των προηγούμενων διαδικασιών γίνεται ( 2, 3, 1 ) δηλ.
o Επίσκεψη αριστερού υποδένδρου
o Επίσκεψη δεξιού υποδένδρου
o Επίσκεψη ρίζας
• τότε η διάσχιση του δένδρου λέγεται μεταδιατεταγμένη (postorder)
• και το αποτέλεσμα για το δένδρο του σχήματος 12 είναι
CEFDBGA
• Στην μεταδιατεταγμένη διάσχιση, επισκεπτόμαστε τη ρίζα μετά τα παιδιά της
Ενδοδιατεταγμένη διάταξη
• Αν η σειρά εκτέλεσης των προηγούμενων διαδικασιών γίνεται ( 2, 1, 3 ) δηλ.
o Επίσκεψη αριστερού υποδένδρου
o Επίσκεψη ρίζας
o Επίσκεψη δεξιού υποδένδρου
• τότε η διάσχιση του δένδρου λέγεται ενδοδιατεταγμένη (inorder)
• και το αποτέλεσμα για το δένδρο του σχήματος 12 είναι
• CBEDFAG
Στην ενδοδιατεταγμένη διάσχιση, επισκεπτόμαστε τη ρίζα μεταξύ των παιδιών της
Σημ. Αν η σειρά της επίσκεψης των υποδένδρων αντιστραφεί, δηλ. η
επίσκεψη του δεξιού να προηγείται αυτής του αριστερού
Μπορεί να υπάρξουν τρεις ακόμη μέθοδοι διάσχισης
Μετατροπή παραστάσεων
• Πολωνικός συμβολισμός: Τρόποι μετατροπής αριθμητικών παραστάσεων από την
ένθετη στην προθεματική και μεταθεματική μορφή.
• Διάσχιση δένδρων που απεικονίζουν παραστάσεις
• Μία παράσταση που περιέχει σταθερές, μεταβλητές, τελεστές, και παρενθέσεις
μπορεί να παρασταθεί με ένα δυαδικό δένδρο κατά μοναδικό τρόπο αν ληφθεί
υπ’όψιν η ιεραρχία των πράξεων.
• Σαρώνεται η παράσταση και βρίσκεται ο τελεστής με την μικρότερη ιεραρχία: =>
ρίζα του υποδένδρου και η παράσταση χωρίζεται σε αριστερό και δεξί υποδένδρο
• Επαναλαμβάνουμε για τις δύο υποπαραστάσεις κ.ο.κ.
• Τελευταίο στάδιο : τερματικοί κόμβοι με τελεστέους
Σχήμα 13: δένδρο απεικόνισης της παράστασης αβ + γδ

Ανομοιογενές δένδρο
• Τερματικοί κόμβοι: Τελεστέοι.
• Εμφάνιση με την ίδια σειρά όπως και στην
παράσταση
• Εσωτερικοί κόμβοι: Τελεστές των πράξεων.
o Χαμηλότερα επίπεδα: κόμβοι των
οποίων οι πράξεις πρέπει να
προηγηθούν
Διασχίσεις - Μορφές
• Προδιατεταγμένη διάσχιση: Προθεματική (prefix) μορφή της παράστασης -
πολωνικός συμβολισμός
+ . αβ . γδ
• Μεταδιατεταγμένη διάσχιση: Μεταθεματική (postfix) μορφή της παράστασης –
ανάστροφος πολωνικός συμβολισμός
αβ .γδ . +
• Ενδοδιατεταγμένη διάσχιση: Ένθετη (infix) μορφή της παράστασης
α.β+γ.δ
• Χωρίς παρενθέσεις: Η σειρά των πράξεων επιβάλλεται από τη δομή του δένδρου
• Μία παράσταση με παρενθέσεις δεν μπορεί να παραχθεί με απλή
ενδοδιατεταγμένη διάσχιση του αντίστοιχου δένδρου
Πίνακας 1: Σχέση διάσχισης δένδρου και μορφή παράστασης
ΑΛΛΑ ΔΕΝΔΡΑ
Νηματοποιημένα δυαδικά δένδρα
• Δυαδικά δένδρα: Οι μισοί δείκτες προς τα παιδιά είναι κενοί (NULL)
• Είναι δυνατόν κάποιοι από αυτούς να δείχνουν σε άλλους κόμβους => δημιουργία
κύκλων
• Νήματα (threads): Ψευδοακμές που δημιουργούνται
• Διευκόλυνση εφαρμογών που εκμεταλλεύονται το δένδρο.
• Πρόβλημα: Ένας δείκτης είναι πραγματικός δείκτης ή νήμα;
• => Κάθε κόμβος συμπληρώνεται με μία λογική μεταβλητή που καθορίζει τον τύπο
του δείκτη
• Διάσχιση νηματοποιημένων δένδρων: χωρίς αναδρομή
Σχήμα 14: Δεξιό ενδονηματικό (right in-threaded) δένδρο
• Νήματα : Διακεκομμένες γραμμές (ψευδοακμές)
• Δεξιός δείκτης κάθε κόμβου που έχει την τιμή NULL
o Μεταβάλλεται ώστε να δείχνει τον επόμενο κόμβο
επίσκεψης λαμβάνοντας υπ’όψιν την
ενδοδιατεταγμένη διάσχιση
• Ο δείκτης του δεξιότερου κόμβου G διατηρεί την τιμή
NULL.
• Δύο ακόμη τύποι νηματοποιημένων δένδρων:
o Λαμβάνοντας υπ’ όψιν τους άλλους τρόπους
διάσχισης
Τετραδικά δένδρα

• Εφαρμογές γραφικών ή επεξεργασίας εικόνας


o Ανάγκη για αποτελεσματική αποθήκευση σχημάτων, εικόνων, χαρτών κ.α.
o Μία εικόνα υποδιαιρείται σε μεγάλο αριθμό εικονοστοιχείων (pixels)
o Σε κάθε εικονοστοιχείο αντιστοιχεί μία τιμή που εκφράζει το χρώμα
• Αποθήκευση εικόνας
o Αποθήκευση τω τιμών όλων των εικονοστοιχείων που την αποτελούν ~ εξαιρετικά
μεγάλος αριθμός
• Με τη χρήση τετραδικών δένδρων : Σημαντική οικονομία
(α) Ένας χάρτης πέντε περιοχών χρωματισμένες με χρώματα 1 έως 5
(β) Προσέγγιση με εικονοστοιχεία
(γ) Συμπαγής απεικόνιση πίνακα εικονοστοιχείων
• Πίνακας εικονοστοιχείων: πολλά γειτονικά εικονοστοιχεία έχουν την ίδια τιμή
Ο πίνακας χωρίζεται σε 4 τετραγωνικούς υποπίνακες
• Αν κάθε υποπίνακας δεν είναι αμιγής (δεν έχει όλα τα εικονοστοιχεία στην ίδια τιμή)
Χωρίζεται σε 4 άλλους υποπίνακες κ.ο.κ, μέχρις ότου οι πίνακες να περιέχουν μόνο
ένα εικονοστοιχείο
• Ο πίνακας που προκύπτει μπορεί να παρασταθεί με ένα τετραδικό δένδρο
• Κάθε κόμβος (~ 4 τετραγωνικούς υποπίνακες) : Έχει 4 πεδία που κάθε ένα αντιστοιχεί
σε έναν υποπίνακα
• Κάθε πεδίο: μία μεταβλητή χρώματος , μία λογική σημαία, ένα δείκτη προς παιδί
• Αμιγής υποπίνακας:
η μεταβλητή χρώματος έχει την τιμή του αντίστοιχου χρώματος, η σημαία είναι
αληθής και ο δείκτης κενός
• Μη- αμιγής υποπίνακας:
η μεταβλητή χρώματος είναι 0, η σημαία είναι ψευδής και ο δείκτης δείχνει σε κάποιο
παιδί
Σχήμα 16: Τετραδικό δένδρο που αντιστοιχεί στον
χάρτη του σχήματος 15γ
Τετραδικό δένδρο
Κόμβος: Ένα τετράγωνο χωρισμένο σε 4 άλλα τετράγωνα

Αμιγής υποπίνακας: Στο αντίστοιχο τετραγωνίδιο φαίνεται η τιμή του χρώματος


Μη αμιγής υποπίνακας: Υπάρχει τόξο που παραπέμπει σε κόμβο- παιδί
Ψηφιακά δένδρα (digital trees)

• Ορισμός: Δένδρα οποιουδήποτε βαθμού των οποίων οι κόμβοι έχουν ως τιμή


ένα μόνο στοιχείο ενός αλφαβήτου
Π.χ. ψηφία 0 έως 9, γράμματα από Α έως Ω κλπ
• Αποθηκευμένη πληροφορία:
Σχηματίζεται από τη διαδρομή που ακολουθείται διατρέχοντας το δένδρο
από τη ρίζα μέχρι κάποιον τερματικό κόμβο
Σχήμα 14: Ψηφιακό δένδρο

• Τριψήφιοι κωδικοί αριθμοί:


123, 152, 154, 156, 173, 179
• Το αντίστοιχο ψηφιακό δένδρο
μπορεί να είναι έως και
δεκάτου βαθμού
Ψηφιακά δένδρα : Πλεονέκτημα
• Μπορούν να αποθηκεύσουν πληροφορίες μεταβλητού μήκους
• Παράδειγμα:
o Στο δένδρο του σχήματος 17 προστίθεται ο κωδικός 1234
o Δημιουργείται το δένδρο του σχήματος 18
o Ωστόσο δεν ξεχωρίζει ο κωδικός 123 από τον 1234
o Προστίθεται επιπλέον πληροφορία («μαύρη βούλα» στο σχήμα)
Ορίζει το τέλος ενός αποθηκευμένου κωδικού
• Υλοποίηση:
o Η «βούλα» είναι ένας δείκτης προς έναν άλλο κόμβο ή προς ένα στοιχείο άλλης
δομής (πίνακας ή αρχείο δίσκου) όπου υπάρχουν οι υπόλοιπες πληροφορίες που
αντιστοιχούν σε κάθε κωδικό
Σχήμα 18: Ψηφιακό δένδρο κωδικών μεταβλητού μήκους
Δομή trie

•Σημαντική υλοποίηση ψηφιακών δένδρων


Re(TRIE)val (Ανάκτηση) : «ΤΡΑΪ»
•Στους κόμβους υπάρχουν μόνο δείκτες σε συγκεκριμένες θέσεις
•Η πληροφορία του περιεχομένου εξάγεται έμμεσα από τη θέση που έχει ο
δείκτης
Παράδειγμα δομής trie
• ΑΦΜ όλων των φορολογημένων: 9-ψήφιοι ακέραιοι αριθμοί
• Δημιουργία 1000-δικού δένδρου δομής trie ύψους 3
• Κάθε κόμβος: διαθέτει μόνο 1000 δείκτες προς κόμβους – παιδιά
• Δομή του κόμβου: Μονοδιάστατος πίνακας 1000 θέσεων όπως ο επόμενος

• Κάθε δείκτης της ρίζας δείχνει σε ένα κόμβο 2ου επιπέδου


• Κάθε δείκτης κόμβων 2ου επιπέδου δείχνει σε ένα κόμβο 3ου επιπέδου
• Κόμβοι τελευταίου (3ου) επιπέδου: Περιέχουν δείκτες που παραπέμπουν είτε σε
άλλους κόμβους είτε σε άλλη δομή όπου υπάρχουν οι υπόλοιπες πληροφορίες για
έναν φορολογούμενο
Πώς βρίσκουμε τις πληροφορίες του φορολογούμενου με ΑΦΜ 123.456.789;
Παράδειγμα δομής trie (συνέχεια)
Αν κάποια ΑΦΜ δεν υπάρχουν, τότε πιθανόν να μην υπάρχουν και οι
αντίστοιχοι κόμβοι
Π.χ. Αν κανένα ΑΦΜ δεν αρχίζει από 5 τότε δεν υπάρχουν 100 υποδένδρα
δηλ. αυτά που δεικτοδοτούν οι θέσεις 500 έως 599 της ρίζας
Αναζήτηση σε δομή trie
• Απευθείας διάσχιση του δένδρου
• Δεδομένα του επόμενου αλγόριθμου:
o Root: δείκτης ρίζας
o code: πίνακας τριών θέσεων που περιέχει το ζητούμενο ΑΦΜ
o Π.χ. code(1) = 123, code(2) = 456, code(3) = 789
• Ο αλγόριθμος κάνει το πολύ 3 προσβάσεις σε κόμβους για να βρει το οποιοδήποτε
ΑΦΜ μέσα σε πιθανό σύνολο 1012 διαφορετικών τιμών
• Το δένδρο έχει πάρα πολλού κόμβους
o 1 η ρίζα, 1000 στο 2ο επίπεδο, 1000000 στο 3ο επίπεδο
Τελικά…
• Η δομή trie είναι σπάταλη αν υπάρχουν λίγες τιμές
… πολύ οικονομική αν υπάρχουν πολλές τιμές

• Μεγάλη χρήση: Εφαρμογές λεξικών ευρετηρίων, θησαυρών κλπ


o η αναζητούμενη πληροφορία είναι αλφαριθμητική
o ο τρόπος χρήσης δεν διαφέρει
o Ο δείκτης προς το παιδί που αντιστοιχεί στο χαρακτήρα κενό βρίσκεται στη 1η
θέση,
o Ο δείκτης που αντιστοιχεί στο γράμμα Α βρίσκεται στη 2η θέση
o Ο δείκτης που αντιστοιχεί στο γράμμα Β βρίσκεται στη 3η θέση κ.ο.κ.

You might also like