Presentation is loading. Please wait.

Presentation is loading. Please wait.

תרגול 7 עצי B+ 17.04.2017.

Similar presentations


Presentation on theme: "תרגול 7 עצי B+ 17.04.2017."— Presentation transcript:

1 תרגול 7 עצי B+

2

3  מספר קבוע וקטן של רמות מהשורש לעלים. יתרונות לעומת קובץ סידרתי:
עצי B+: דרגת פיצול גבוהה. מנגנון לאיזון העץ.  מספר קבוע וקטן של רמות מהשורש לעלים. יתרונות לעומת קובץ סידרתי: גישה אקראית יעילה (קבועה - תלוי רק בגובה העץ ודרגת הפיצול). אפשרות להוספת רשומה ללא ארגון מחדש (לא צריך כתיבה של כל הקובץ מחדש). גישה יעילה לתת תחום (ע"פ המפתח הראשי).

4 הגדרת עץ B+ מדרגה m וקיבולת עלה B: לשורש דרגה (מספר בנים) d כך ש-
שימו לב בבקשה להבדל בין העצים הללו לעצים של קורס מבני נתונים, שם היה רק פרמטר אחד! הגדרת עץ B+ מדרגה m וקיבולת עלה B: לשורש דרגה (מספר בנים) d כך ש- לצומת פנימי דרגה d כך ש- מספר רשומות b בעלה מקיים הרשומות יושבות רק בעלים, וכל העלים באותו מרחק מהשורש. לצומת פנימי עם d בנים יש d-1 מפתחות מפרידים, כך שערכיהם מפרידים בין תתי העצים של הבנים, כלומר לכל מפתח המפריד בין שני תתי-עצים מתקיים: כלומר עץ מאוזן

5 כלומר איך נראה צומת פנימי?
אם דרגת העץ עבור צמתים פנימיים (כלומר פרמט m) הוא אכן m אזי מבנה של צומת פנימי יראה וזה אומר, שאם גודל מצביע (כלומר גודל כתובת) הוא נניח a וגודל מפתח ראשי (מפתח ייחודי כך שלכל רשומה יש ערך שונה) הוא K, אזי יוצא שגודל כל הצומת הוא (m-1)k+ma וזה כי צריך לתת מצביע לכל הבנים, והפרדה בין כולם. ומה תמיד שוכחים בחישוב? גם אם הצומת לא מלא כרגע (ויש לו רק שני בנים מתוך 8 בנים אפשריים, עדיין המקום שהוא תופס בזיכרון הוא כצומת מלא, כי כל הרעיון הוא שאין צורך לשכב את כל העץ בעת הכנסה או הוצאה, אלא רק את העלה הספציפי שעבר שינוי!!!!

6 וזה אומר, דאם גודל רשומה הוא q אז גודל של עלה בזיכרון הוא
ואיך נראה עלה? אם דרגת העץ עבור עלים פנימיים (כלומר פרמט B שהוא דרגה מקסימלית עבור עלה) הוא אכן b אזי מבנה של עלה הוא וזה אומר, דאם גודל רשומה הוא q אז גודל של עלה בזיכרון הוא qb באופן דומה לשקופית קודמת – זה נכון גם אם העלה לא מלא (ועוד מעט נראה שבדרך כלל הוא אכן לא מלא...) אלא עדיין מתמלא. כל עלה הוא בגודל כזה מהרגע שהוא נוצר. טיפ: שימו לב תמיד בשאלה בכמה אחוזים מלאים העלים. אם לא כתוב, אז יש תוחלת למספר הזה.

7 פעולות על עצי B+: חיפוש: יורדים מהשורש עד לעלה המתאים, בעזרת המפתחות המפרידים. הכנסה: מציאת העלה המתאים ע"י חיפוש. אם יש בעלה פחות מ-B רשומות, הוסף את הרשומה וסיים. אחרת – פצל את העלה לשני עלים: בעלה הישן רשומות ובעלה החדש רשומות, והוסף רקורסיבית מפתח מפריד לאב של העלה (יתכן שהוספה זו תגרום לפיצול נוסף, של צומת פנימי). אם יש פיצול בשורש – מוסיפים מעליו רמה נוספת. תהליך ההוספה מתבצע מלמטה למעלה, כדי לשמור על איזון העץ.

8 פעולות על עצי B+: 3. מחיקה: מציאת העלה המתאים ע"י חיפוש.
גזור ושמור (למבחן), כי אחרת עושים טעויות... פעולות על עצי B+: 3. מחיקה: מציאת העלה המתאים ע"י חיפוש. אם יש בעלה יותר מ רשומות, מחק את הרשומה וסיים. אחרת – אם ניתן להעביר רשומות מאח שכן באופן ששומר על קיבולת מינימאלית, העבר רשומות, ועדכן מפתח מפריד באב. אחרת – אחד שני אחים, ובטל רקורסיבית מפתח מפריד מהאב. אם לשורש נותר בן יחיד, הפוך אותו לשורש.

9 דוגמאות לפעולות על עצי B+ בדוגמה זו m=3,B=3
3 5 1 2 3 4 הוסף 8 השקף הזה נכון לחלוטין!!! האם כולם מבינים למה המפתח 5 עלה למעלה? כי נוצר מצב שבו 3,5,7 היו בצומת פנימי בשורש ולכן דרג השורש הייתה 4 שזה מעל המותר, ונוצר פיצול 3 1 2 3 4 5 6 7 8 7 5

10 דוגמאות לפעולות על עצי B+ בדוגמה זו m=3,B=3
1 2 3 4 5 6 7 8 7 5 מחק 3 5 7 5 6 7 8

11 דוגמאות לפעולות על עצי B+ בדוגמה זו m=3,B=3
5 7 5 6 7 8 מחק 5 שימו לב כי זה חשוב: כאשר 6 נשאר לבד, לא חיפשנו לצרף אותו למישהו אחר, אלא חיפשנו מי יצטרף אליו 4 7 1 2 4 6 7 8

12 שאלה מס' 1 בעץ B+ מדרגה m=3 וקיבולת עלה B=4 מוכנסת קבוצת רשומות שמפתחותיהן הינם 1,2,3,….,60. נתון כי בתחילה העץ ריק. א. הצע סדר הכנסה לעץ שבו מספר העלים הסופי גדול ככל האפשר. ציין את מספר העלים הדרוש. 1,2,3,…60 (כלומר בסדר עולה). אז מתקבל 29 עלים, מתוכם 28 מכילים 2 רשומות כל אחד ועלה אחד (אחרון) מכיל 4 רשומות.

13 בכל (*) יש פיצול של עלה, מתקבלים 15 עלים כל אחד מכיל 4 רשומות.
ב. הצע סדר הכנסה לעץ שבו מספר העלים הסופי קטן ככל האפשר. ציין את מספר העלים הדרוש. 1,2,3,4|5,6,7,8|9,10,11,12|13,14,15,16|17,18,19,…|57,58,59,60 1,2,5,6,9*,10,13*,14,17*,18,…,53*,54,57*,58,59*,3,4,7,8,11,12,15,16,19…55,56,60 בכל (*) יש פיצול של עלה, מתקבלים 15 עלים כל אחד מכיל 4 רשומות.

14 …… …… 1 2 5 6 9 …… 1 2 5 6 9 10 53 54 ….. …… …..

15 גובה מינימאלי ומקסימאלי של עץ B+:
נתון עץ B+ מדרגה m וקיבולת עלה B וקובץ עם n רשומות: עץ עם גובה מינימלי ו- עלים מקיים: עץ עם גובה מקסימלי ו- עלים מקיים:

16 עבור סדר הכנסה מסעיף א בשאלה 1 : עבור סדר הכנסה מסעיף ב בשאלה 1 :
שאלה מס' 2 ביחס לעץ וקבוצת המפתחות 1,2,3,4,…,60 האם ישנם סדרי הכנסה שונים המובילים לעצים שגובהם שונה? פתרון: עבור סדר הכנסה מסעיף א בשאלה 1 : עבור סדר הכנסה מסעיף ב בשאלה 1 : כלומר, שני סדרי ההכנסה יתנו עצים בגובה שונה.

17 הערה: תמיד קוראים וכותבים עלים שלמים, ולא חלקי עלים.
חישוב זמני גישה: כדי להקטין את מספר פעולות הקריאה/כתיבה, משתדלים לשמור בזיכרון הראשי חלק גדול ככל האפשר של העץ. בדרך כלל שומרים בדיסק רק עלים ורמה אחת של צמתים פנימיים מעל העלים. חישוב זמן גישה לרשומה במקרה זה כולל קריאה אקראית של צומת פנימי וקריאה אקראית של עלה. הערה: תמיד קוראים וכותבים עלים שלמים, ולא חלקי עלים. בהנחה שאין פיצול (או איחוד) עלים, זמן עדכון/הוספה/מחיקת רשומה כולל גישה אקראית לרשומה (קריאת עלה) + זמן של סיבוב שלם, עד להשלמת כתיבת העלה המעודכן לאותו מקום במסילה (בהנחה שגודל עלה קטן מגודל מסילה). זה לא כולל את הזמן שלוקח את הזמן למצוא את הרשומה הזאת בעץ

18 בדרך כלל נניח שבכל עלה קיים מצביע לעלה הבא.
בעץ B+ יש אפשרות לקרוא תת-תחום שממוין על פי המפתח הראשי של הקובץ. במקרה זה קוראים אקראית את הרשומה הראשונה בתת התחום, ואחר כך קוראים לפי הסדר, עלה אחרי עלה, את כל הרשומות השייכות לתת התחום. בדרך כלל נניח שבכל עלה קיים מצביע לעלה הבא. זמן הקריאה של כל עלה מחושב כזמן גישה אקראי, כיוון שעלים עוקבים ע"פ סדר לא יושבים זה אחרי זה פיסית.

19 שאלה מס' 3 נתון עץ B+, דרגה m=200.
שומרים על הדיסק שתי רמות – עלים ורמה אחת מעליהם. מספר הרשומות בעץ N. גודל רשומה 200Byte. גודל צומת פנימי 4Kbyte. גודל מסילה 50Kbyte. זמן תזוזת זרוע ממוצעת זמן סיבוב חשב זמן קריאה אקראית של רשומה וקריאה סדרתית של כל הקובץ עבור המקרים: א. גודל עלה 4Kbyte (20 רשומות). ב. גודל עלה 50Kbyte(250 רשומות).

20 זמן קריאת צומת פנימי או עלה: זמן קריאה אקראית – צומת פנימי + עלה:
פתרון: א. זמן קריאת צומת פנימי או עלה: זמן קריאה אקראית – צומת פנימי + עלה: גישה סדרתית – קריאה של כל העלים בקובץ: מספר העלים בעץ: זמן קריאה סדרתית של הקובץ: יש כאן הנחה סמויה... מה היא? שאין עלה או צומת ששבור בין שתי מסילות. הנחה זאת ממש מקלה עלינו.

21 שאלה מס' 3 נתון עץ B+, דרגה m=200.
שומרים על הדיסק שתי רמות – עלים ורמה אחת מעליהם. מספר הרשומות בעץ N. גודל רשומה 200Byte. גודל צומת פנימי 4Kbyte. גודל מסילה 50Kbyte. זמן תזוזת זרוע ממוצעת זמן סיבוב חשב זמן קריאה אקראית של רשומה וקריאה סדרתית של כל הקובץ עבור המקרים: א. גודל עלה 4Kbyte (20 רשומות). ב. גודל עלה 50Kbyte(250 רשומות).

22 זמן קריאה אקראית – צומת פנימי + עלה:
פתרון: ב. זמן קריאת צומת פנימי: זמן קריאת עלה: זמן קריאה אקראית – צומת פנימי + עלה: גישה סדרתית – קריאה של כל העלים בקובץ: מספר העלים בעץ: זמן קריאה סדרתית של הקובץ:

23 כאשר יש הרבה קריאות אקראיות, כדאי להגדיר עלים קטנים.
מסקנה: כאשר יש הרבה קריאות אקראיות, כדאי להגדיר עלים קטנים. כאשר יש הרבה קריאות סדרתיות, כדאי להגדיר עלים גדולים.


Download ppt "תרגול 7 עצי B+ 17.04.2017."

Similar presentations


Ads by Google