ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΟΜΕΣ Ε ΟΜΕΝΩΝ T. Σελλής ΑΝΟΙΞΗ 2003 ΑΣΚΗΣΗ #3 Ηµερ. Παράδοσης: 09/05/03 Ερώτηµα 1Α + + + LL + 110 + 115 110 110 RR 115 +, + 110 110 115 115 RL
+ 115 115 + 115 RL 115
+, + 115 RR 115 + 113 RL 115 113
(Στην τελευταία εισαγωγή φαίνονται αναλυτικά και οι δύο φάσεις της διπλής περιστροφής RL) 115 113 115 110 113 Ερώτηµα 1Β - 115 115 110 113
- 113 113 110-110 RR
- - RL
Ερώτηµα 2 + + +110 110 +115 110 115 110 115 + 110 115 + 110 115
+ 110 115 + 110 115 + 110 115 110 115
+ 110 115 +113 110 113 115 115 110 113 +117 115 110 113 117
+81 115 81 110 113 117 +75 115 75 81 110 113 117 +127 115 75 81 110 113 117 127 +130 115 75 81 110 113 117 127 130
115 75 81 110 113 117 127 130 +92 115 75 81 92 110 113 117 127 130 +101 115 75 81 92 101 110 113 117 127 130 +105 115 75 81 92 101 105 110 113 117 127 130
+ 115 75 81 93 101 105 110 113 117 127 130 115 75 81 93 101 105 110 113 117 127 130 115 75 81 92 101 105 110 113 117 127 130 Ερώτηµα 3 Ο µικρότερος αριθµός κλειδιών που πρέπει να εισάγουµε σ ένα Β-δένδρο βαθµού 4, ώστε να µεγαλώσει σε 3 επίπεδα είναι κλειδιά σε αύξουσα ή φθίνουσα σειρά (π.χ. τα : 1,2,3,4, ). Η λογική είναι η σειρά των αριθµών να είναι τέτοια ώστε να µην ίσο-κατανέµονται τα νέο εισαγόµενα κλειδιά στα φύλλα. Αντιθέτως θα πρέπει όσο το συντοµότερο δυνατό να γεµίζουµε κάποιο φύλλο, ώστε να το αναγκάζουµε να σπάει, οπότε να ανεβαίνει ένα κλειδί προς τα επάνω. Για παράδειγµα η σειρά 1,2, προσπαθεί συνεχώς να σπάσει το πιο δεξί φύλλο. Αν αφήσουµε όλους τους κόµβους µισογεµάτους (4 κλειδιά και η ρίζα 1), τότε τα κλειδιά στα 3 επίπεδα του δένδρου θα είναι ως εξής: 1 + 2*4 + 2*5*4 = 49 κλειδιά συνολικά στο δένδρο. Αναλυτικά στο πρώτο επίπεδο υπάρχει µόνο η ρίζα µε ένα κλειδί και δύο κόµβους παιδιά στο δεύτερο επίπεδο. Στο δεύτερο επίπεδο κάθε κόµβος θα έχει 4 κλειδιά δηλαδή θα υπάρχουν 8 κλειδιά στο δεύτερο
επίπεδο. Κάθε κόµβος θα έχει επιπλέον 5 (βαθµός δέντρου +1) παιδιά στο τρίτο επίπεδο. Εποµένως στο τρίτο επίπεδο θα έχουµε 10 κόµβους µε τέσσερα κλειδιά ο καθένας, δηλαδή 40 κλειδιά. Παράρτηµα ιαγραφή σε Β- έντρο ιαγραφή σε φύλλο Υποθέτουµε ότι έχουµε το δέντρο που προκύπτει από το ερώτηµα 2. 115 75 81 92 101 105 110 113 117 127 130 Και επιπλέον έστω ότι διαγράφουµε το κλειδί 117, οπότε και προκύπτει το δέντρο 115 75 81 92 101 105 110 113 127 130 Ο κόµβος µε το κλειδί έχει λιγότερα κλειδιά από το βαθµό του δέντρου (2). Για να επαναφέρουµε το δέντρο στη σωστή δοµή του ελέγχουµε τους γειτονικούς κόµβους. Προσοχή µόνο τα siblings δηλαδή τους γειτονικούς κόµβους που έχουν κοινό πατέρα µε τον κόµβο που µελετάµε. Στην περίπτωση αυτή έχουµε δύο επιλογές.
1 η Περίπτωση - αριστερός κόµβος Επειδή ο κόµβος αυτός έχει περισσότερα από D (βαθµός δέντρου) κλειδιά, µοιράζουµε τα κλειδιά των δυο κόµβων, µισά δεξιά και µισά αριστερά. Οπότε προκύπτει το δέντρο του παρακάτω σχήµατος. 115 75 81 92 101 105 110 113 127 130 Μοιράζοντας όµως τα κλειδιά αλλάζουµε τη λεξικογραφική σειρά των κόµβων όπως φαίνεται από τη διακεκοµµένη γραµµή (101 < 105 < 115 < 110 < 113 < < ). Συνεπώς τα κλειδιά 110 και 115 πρέπει να ανταλλάξουν θέσεις όπως φαίνεται στο επόµενο σχήµα. 110 75 81 92 101 105 113 115 127 130 Στο νέο σχήµα η λεξικογραφική σειρά είναι αύξουσα < 101 < 105 < 110 < 113 < 115 < < < 127 < 2 η Περίπτωση δεξιός κόµβος Στην περίπτωση που επιλέξουµε τον δεξιό κόµβο, επειδή αυτός έχει ακριβώς D (βαθµός δέντρου) κλειδιά, συγχωνεύουµε τους δύο κόµβους σε ένα, οπότε προκύπτει το παρακάτω δέντρο.
115 75 81 92 101 105 110 113 127 130 Στο παραπάνω δέντρο ο κόµβος (115,) έχει µόνο δύο παιδιά ενώ θα έπρεπε να έχει τρία. Συνεπώς πρέπει να κατεβάσουµε το κλειδί ένα επίπεδο πιο κάτω (το 115 δε µπορεί να κατέβει γιατί τότε θα είχαµε κόµβο µε 5 κλειδιά (101,105,110,113,115)). Οπότε προκύπτει το δέντρο 115 75 81 92 101 105 110 113 127 130 Ακολουθώντας τη διαδικασία που εφαρµόσαµε προηγουµένως συνεχίζουµε στο επόµενο επίπεδο. Ελέγχοντας τα siblings του κόµβου (115) έχουµε µόνο µία επιλογή. Να συγχωνεύσουµε τους κόµβους (,) και (115), οπότε έχουµε 115 75 81 92 101 105 110 113 127 130 Όπως και πριν ο κόµβος () έχει µόνο ένα παιδί αντί για δύο. Για το λόγο αυτό συγχωνεύεται µε τον κόµβο (,,115) και έχουµε
115 75 81 92 101 105 110 113 127 130 Στην περίπτωση αυτή φαίνεται πως µία συγχώνευση κόµβων σε ένα επίπεδο µπορεί να οδηγήσει σε συγχωνεύσεις σε υψηλότερα επίπεδα φτάνοντας µέχρι και τη ρίζα (οπότε και µειώνεται το ύψος του δέντρου). ιαγραφή σε εσωτερικό κόµβο Ας υποθέσουµε ότι έχουµε το αρχικό δέντρο και θέλουµε να διαγράψουµε ένα κλειδί σε εσωτερικό κόµβο, έστω το. 115 75 81 92 101 105 110 113 117 127 130 Στην περίπτωση αυτή αντικαθιστούµε το κλειδί αυτό µε το αµέσως επόµενο λεξικογραφικά κλειδί που βρίσκεται ΣΕ ΦΥΛΛΟ. Το ζητούµενο κλειδί είναι το 127 (βλέπε το παρακάτω σχήµα). Αν διαγράφαµε το, το κλειδί που θα επιλέγαµε θα ήταν το 101, δηλαδή το αµέσως µεγαλύτερο κλειδί που βρίσκεται σε φύλλο. Οπότε η διαγραφή σε εσωτερικό κόµβο µετατρέπεται σε διαγραφή σε φύλλο. 115 127 75 81 92 101 105 110 113 117 130
Ανακεφαλαιώνοντας έχουµε τα εξής 1) Αν η διαγραφή είναι σε φύλλο ακολουθούµε το βήµα 2, διαφορετικά o Αντικαθιστούµε το διαγραφέν κλειδί µε το αµέσως επόµενο λεξικογραφικά κλειδί που βρίσκεται σε φύλλο, οπότε και ανάγουµε τη διαγραφή σε διαγραφή σε φύλλο 2) Αν το φύλλο που περιείχε το κλειδί που διαγράφηκε έχει D ή περισσότερα κλειδιά η διαδικασία της διαγραφής ολοκληρώνεται αν όχι συνεχίζουµε στο βήµα 3 3) Ελέγχουµε τους αριστερά και δεξιά γειτονικούς κόµβους εφόσον υπάρχουν (γειτονικοί κόµβοι θεωρούνται οι κόµβοι που βρίσκονται στο ίδιο επίπεδο και έχουν κοινό γονέα µε τον κόµβο στον οποίο έγινε η διαγραφή) o Αν ο κόµβος που επιλέγουµε έχει D ακριβώς κλειδιά γίνεται συγχώνευση των κόµβων Ελέγχουµε αν ο γονέας έχει το απαιτούµενο αριθµό παιδιών, οπότε και µεταφέρουµε ένα κλειδί του γονέα στο επόµενο επίπεδο o ιαφορετικά µοιράζουµε τα κλειδιά µεταξύ των δύο κόµβων Ελέγχουµε αν η λεξικογραφική σειρά διατηρείται συµπεριλαµβανοµένου του γονέα. Αν όχι ανταλλάσσουµε κλειδιά µεταξύ παιδιών και γονέα, προκειµένου να επαναφέρουµε την αύξουσα λεξικογραφική σειρά 4) Ελέγχουµε αν ο γονέας έχει λιγότερα από D κλειδιά. Εάν ναι συνεχίζουµε από το βήµα 3 αλλά τώρα για τον κόµβο του γονέα. 5) Τέλος