ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος ( ) Νίκος Παπασπύρου

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Δομές Δεδομένων και Αλγόριθμοι
Advertisements

Δυναμικοί πίνακες Πολλές δομές δεδομένων υλοποιούνται με χρήση πινάκων
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Διακριτά Μαθηματικά ΙI Δυαδικά Δέντρα Αναζήτησης
Διακριτά Μαθηματικά ΙI Δέντρα
Δομές Δεδομένων - Δυαδικά Δένδρα (binary trees)
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Ψηφιακά Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να χρησιμοποιήσουμε την παραπάνω αναπαράσταση.
Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL
1Πέτρος ΣτεφανέαςΠρογραμματιστικές Τεχνικές ΓΡΑΦΟΙ (GRAPHS) ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Νίκος Παπασπύρου.
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Ταξινόμηση και Αναζήτηση.
Lab 6: AVL Trees 29/10/20101ΕΠΛ231 - Δομές Δεδομένων και Αλγόριθμοι.
Διαίρει-και-Βασίλευε
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
A Balanced Tree Structure for Peer-to-Peer Networks
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
Διαφάνειες παρουσίασης #3
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Ουρά Προτεραιότητας: Heap
Γιάννης Σταματίου Αναδρομή και αναδρομικές σχέσεις
ΗΜΜΥ 111 ΔΟΜΗΜΕΝΟΣΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΩΣΤΑΣ ΚΟΝΤΟΓΙΑΝΝΗΣ Αναπληρωτής Καθηγητής Τμήμα ΗΜΜΥ Πολυτεχνείο Κρήτης.
Δομές Δεδομένων - Ισοζυγισμένα Δυαδικά Δένδρα (balanced binary trees)
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες:
Λεξικό, Union – Find Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο.
Quicksort Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 8-1 Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: 2-3 Δένδρα, Υλοποίηση και πράξεις Β-δένδρα B-Δένδρα.
EPL231 – Data Structures and Algorithms
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Διαφάνειες παρουσίασης #2
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
9-1 ΜΑΘΗΜΑ 9 ο Δυαδικά Δένδρα, Διάσχιση Δυαδικών Δένδρων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Ευρετήρια.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Συνδετικότητα γραφήματος (graph connectivity). α β Υπάρχει μονοπάτι μεταξύ α και β; Παραδείγματα: υπολογιστές ενός δικτύου ιστοσελίδες ισοδύναμες μεταβλητές.
ΔΠΘ-ΤΜΗΜΑ ΜΠΔ:ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΡΧΕΙΩΝ 1 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΡΧΕΙΩΝ ΔΕΝΔΡΑ.
17η Διάλεξη Ισορροπημένα δέντρα Ε. Μαρκάκης
Δυναμικός Κατακερματισμός
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
EPL231 – Data Structures and Algorithms
Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε χρόνο εκτέλεσης
Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε στοιχείο έχει ένα κλειδί από ολικά διατεταγμένο σύνολο Θέλουμε να υποστηρίξουμε δύο.
19η Διάλεξη Εξωτερική Αναζήτηση και Β-δέντρα Ε. Μαρκάκης
14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης Ε. Μαρκάκης
(2,4) Trees 11/15/2018 8:56 PM (2,4) Δέντρα (2,4) Δέντρα.
Δυναμικός Κατακερματισμός
Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
Μεταγράφημα παρουσίασης:

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος ( ) Νίκος Παπασπύρου Π.Δ. 407/80 Βασίλης Βεσκούκης Πέτρος Στεφανέας 1Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Διαφάνειες παρουσίασης #10 (β) 4 Δέντρα BST 4 Δέντρα AVL 4 Περιστροφή - Αναδιάταξη 4 Αλγόριθμοι

2Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Δέντρα δυαδικής αναζήτησης u Δενδρικές δομές δεδομένων στις οποίες l Ολα τα στοιχεία στο αριστερό υποδέντρο της ρίζας είναι μικρότερα από την ρίζα l Ολα τα στοιχεία στο δεξί υποδέντρο της ρίζας είναι μεγαλύτερα ή ίσα με την ρίζα l Το αριστερό και το δεξί υποδέντρο είναι δέντρα δυαδικής αναζήτησης u Binary Search Trees - BSTs

3Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Δέντρα δυαδικής αναζήτησης u Η γενική εικόνα ενός τέτοιου δέντρου >=

4Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Παραδείγματα δέντρων BST u Εγκυρα δέντρα

5Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Παραδείγματα δέντρων BST u Μη-έγκυρα δέντρα

6Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Διάσχιση δυαδικών δέντρων l Preorder: l Postorder: l Inorder:

7Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Ζύγισμα δέντρων BST u Ανάλογα με τη σειρά άφιξης των στοιχείων και τον τρόπο δημιουργίας του δέντρου BST, για τα ίδια στοιχεία δεν προκύπτει πάντα το ίδιο δέντρο u Το ύψος του δέντρου σχετίζεται με το χρόνο αναζήτησης ενός στοιχείου μέσα στο δέντρο

8Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Ζύγισμα δέντρων BST u Αναζήτηση με πολυπλοκότητα l Από Ο(Ν) [χειρότερη περίπτωση] l Μέχρι Ο(Log 2 N) [καλύτερη περίπτωση]

9Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Ζύγισμα δέντρων BST u Προκειμένου μια αναζήτηση να διατρέχει όσο το δυνατόν μικρότερο μέρος του δέντρου, αυτό πρέπει να είναι «ζυγισμένο» l «Ζυγισμένο»: το βάθος του αριστερού υποδέντρου δεν διαφέρει περισσότερο από 1 από αυτό του δεξιού (ιδανικά: είναι ίσα) u Αν κατά την προσθήκη νέων στοιχείων στο δέντρο η ζυγαριά «γείρει» δεξιά ή αριστερά, απαιτείται διόρθωση του δέντρου

10Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Παραδείγματα ζυγισμένων δέντρων

11Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Ζυγισμένα δέντρα u Η περίπτωση όπου το ύψος του αριστερού υποδέντρου είναι ακριβώς ίσο με το ύψος του δεξιού, δεν επιτυγχάνεται εύκολα u Αν από την παραπάνω περίπτωση υπήρχαν «μικρές» αποκλίσεις, οι επιδόσεις του δέντρου στην αναζήτηση δεν θα επηρεάζονταν ιδιαίτερα

12Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Δέντρα AVL u Ενα δέντρο AVL (Adelson-Velskii and Landis) είναι ένα δέντρο BST του οποίου το ύψος του αριστερού υποδέντρου διαφέρει από αυτό του δεξιού το πολύ κατά 1 u Το δεξί και αριστερό υποδέντρο ενός δέντρου AVL είναι επίσης δέντρα AVL u Το κενό δέντρο είναι δέντρο AVL Οι ιδιότητες αυτές διατηρούνται με παρεμβάσεις (αναδιάταξη) καθώς νέα στοιχεία προστίθενται στο δέντρο

13Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Δέντρα AVL

14Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Δέντρα AVL u Ενα δέντρο AVL λέγεται «ψηλό από αριστερά» όταν το ύψος του αριστερού υποδέντρου είναι μεγαλύτερο από αυτό του δεξιού (κατά πόσο;;;) u Αντίστοιχα για το «ψηλό από δεξιά» u Υπάρχουν αρκετοί τρόποι με τους οποίους η προσθήκη ή η διαγραφή στοιχείων σε ένα δέντρο AVL παραβιάζει τη συνθήκη χαρακτηρισμού του

15Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Αναδιάταξη δέντρων AVL u Η χαρακτηριστική ιδιότητα ενός δέντρου AVL μπορεί να παύει να ισχύει με την προσθήκη νέων στοιχείων u Η επαναφορά της ιδιότητας σε ισχύ, γίνεται με περιστροφή του δέντρου, ανάλογα με την περίπτωση αναδιάταξης που συντρέχει

16Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Απλή περιστροφή X Y Z k2 k1 h X YZ k2 k1 New item New Item

17Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Διπλή περιστροφή (α) k3 h D k2 k1 C B A k2 k1k3 C D BA

18Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Διπλή περιστροφή (β) k3 k2 k1 C B A D k3 k1 k2 C BA D

19Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Διπλή περιστροφή (γ) k3 k1 k2 C BA D k1 k3 C BA D

20Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Αναδιάταξη δέντρων AVL u Περιπτώσεις αναδιάταξης l ΑΑ: ένα αριστερό υποδέντρο ενός δέντρου AVL που είναι ψηλό από αριστερά, γίνεται επίσης ψηλό από αριστερά (left of left) l ΔΔ: τα αντίστοιχα για το δεξί υποδέντρο (right of right) l ΔΑ: ένα υποδέντρο ενός δέντρου AVL ψηλού από αριστερά, γίνεται ψηλό από δεξιά (right of left) l ΑΔ: ένα υποδέντρο ενός δέντρου AVL ψηλού από δεξιά, γίνεται ψηλό από αριστερά (left of right)

21Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Περιπτώσεις αναδιάταξης (α)

22Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Περιπτώσεις αναδιάταξης (β)

23Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Αναδιάταξη σε περίπτωση ΑΑ

24Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Αναδιάταξη σε περίπτωση ΔΔ

25Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Αναδιάταξη σε περίπτωση ΔΑ

26Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Αναδιάταξη σε περίπτωση ΑΔ

27Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Υλοποίηση δέντρων AVL στη C u Μια δομή δεδομένων Node key data left right bal End Node

28Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Εισαγωγή σε δέντρα AVL u H εισαγωγή νέων στοιχείων γίνεται στα φύλλα, όπως στα δέντρα BST u Εντοπίζεται το φύλλο στο οποίο θα γίνει η εισαγωγή και δημιουργείται νέος κόμβος u Γίνεται οπισθοδρόμηση μέχρι την κορυφή του δέντρου, με έλεγχο της ισχύος της συνθήκης ισορροπίας AVL σε κάθε βήμα προς τα πίσω, και επαναφορά σε ισορροπία, όπου απαιτείται

29Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Εισαγωγή σε δέντρα AVL u Διάγραμμα κλήσης μιας αναδρομικής συνάρτησης εισαγωγής

30Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές ΑΛΓΟΡΙΘΜΟΣ AVLInsert( ref root, val newPtr, ref taller ) 1 if (root null) 1 root = newPtr 2 taller = true 3 return root 2 end if 3 if (newPtr->key key) 1 root->left = AVLInsert (root->left, newPtr, taller) 2 if (taller) // Left subtree is taller 1 if (root left-high) 1 root = leftBalance (root, taller) 2 elseif (root even-high) 1 root->bal = left-high 3 else //Was right high -- now even high 1 root->bal = even-high 2 taller = false 4 end if 4 else// New data >= root data

31Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές (Συνέχεια) AVLInsert( ref root, val newPtr, ref taller )... 4 else// New data >= root data 1 root-> right = AVLInsert (root->right, newPtr, taller) 2 if (taller)// Right subtree is taller 1 if (root left-high) 1 root->bal = even-high 2 taller = false 2 elseif (root even-high)// Was balanced -- now right high 1 root->bal = right-high 3 else 1 root = rightBalance (root, taller) 4 end if 3 end if 5 end if 6 return root end AVLInsert

32Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές ΑΛΓΟΡΙΘΜΟΣ leftBalance (ref root, ref taller ) 1 leftTree = root-> left 2 if (leftTree left-high) // Case 1: Left of left. Single rotation right. 1 rotateRight (root) 2 root->bal = even-high 3 leftTree->bal = even-high 4 taller = false 3 else // Case 2: Right of left. Double rotation required. 1 rightTree = leftTree->right // adjust balance factors 2 if (rightTree->bal left-high) 1 root->bal = right-high 2 leftTree->bal = even-high 3 elseif (rightTree->bal = even-high) 1 leftTree->bal = even-high 4 else

33Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές (Συνέχεια) leftBalance (ref root, ref taller ) 4 else // rightTree->bal is right-high 1 root->bal = even-high 2 leftTree->bal = left-high 5 end if 6 rightTree->bal = even-high 7 root->left = rotateLeft (leftTree) 8 root = rotateRight (root) 9 taller = false 4 end if 5 return root end leftBalance

34Βασίλης ΒεσκούκηςΠρογραμματιστικές Τεχνικές Περισσότερα για δέντρα AVL u Διαγραφή στοιχείου l Διαβάστε αντίστοιχο download από τη σελίδα του μαθήματος u Βιβλιοθήκη συναρτήσεων l Μπορείτε να κατεβάσετε ένα σύνολο έτοιμων συναρτήσεων C για το χειρισμό δέντρων AVL από τη σελίδα web του μαθήματος