שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2021 - עצי B
א) נתון B-tree מסדר 9 בעל 4 רמות. האם הכנסת איבר חדש , והוצאתו מיד אח"כ תחזיר אותנו תמיד לצורת העץ המקורית?
ב) נתון B-tree מסדר 9 בעל 4 רמות. האם הוצאת איבר והכנסתו מיד אח"כ תחזיר אותנו תמיד לצורת העץ המקורית?
ב) נתון B-tree מסדר 9 בעל 4 רמות. האם הוצאת איבר והכנסתו מיד אח"כ תחזיר אותנו תמיד לצורת העץ המקורית?
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד ב · 2021 · סמסטר ב
★★★★★
עצי B
שקול תרחישים בהם פעולת ההכנסה/מחיקה גורמת לאיזון מחדש (פיצול, מיזוג או השאלה). בדוק האם לאלגוריתם האיזון יש בחירה בין מספר פעולות חוקיות, והאם בחירה מסוימת יכולה להוביל למבנה שונה.
שתי הטענות אינן נכונות. סדרת הפעולות המתוארת לא תמיד תחזיר את העץ למצבו המקורי. הסיבה המרכזית היא שאלגוריתמי האיזון של עץ B (B-tree) אינם בהכרח הפיכים, ובמצבים מסוימים קיימת יותר מדרך חוקית אחת לאזן את העץ.
א) הכנסה ואחריה מחיקה
לא, פעולה זו לא תמיד תחזיר את העץ לצורתו המקורית.
הסבר ודוגמה נגדית:
נבנה דוגמה נגדית עבור B-tree מסדר 9 (כלומר, כל צומת מכיל בין 4 ל-8 מפתחות, פרט לשורש).
נניח שקיים מצב בו לאחר הכנסה שגרמה לפיצול צומת, המחיקה גורמת לתת-קיבולת (underflow) בצומת שניתן לאזן בשתי דרכים שונות (מיזוג עם אח שמאלי או מיזוג עם אח ימני). אם האלגוריתם יבחר בדרך שאינה "הפוכה" לפיצול המקורי, העץ יתקבל במבנה שונה.
נניח את המצב ההתחלתי הבא:
1. הכנסת איבר חדש `x=185`:
2. מחיקת האיבר `x=185`:
ב) מחיקה ואחריה הכנסה
לא, גם פעולה זו לא תמיד תחזיר את העץ לצורתו המקורית.
הסבר ודוגמה נגדית:
הסיבה דומה: פעולת המחיקה עלולה לגרום לאיזון מחדש (למשל, השאלה מצומת אח - rotation) המשנה את מבנה העץ. ההכנסה שבאה לאחר מכן עשויה שלא לגרום לפעולת איזון כלל, ובכך להשאיר את העץ במבנה החדש והשונה.
נניח את המצב ההתחלתי הבא (עבור עץ מסדר 9):
1. מחיקת איבר `x` מהצומת `C3`:
2. הכנסת האיבר `x` בחזרה:
מכיוון שהצלחנו למצוא תרחיש בו העץ לא חוזר למצבו המקורי, התשובה היא לא.
א) הכנסה ואחריה מחיקה
לא, פעולה זו לא תמיד תחזיר את העץ לצורתו המקורית.
הסבר ודוגמה נגדית:
נבנה דוגמה נגדית עבור B-tree מסדר 9 (כלומר, כל צומת מכיל בין 4 ל-8 מפתחות, פרט לשורש).
נניח שקיים מצב בו לאחר הכנסה שגרמה לפיצול צומת, המחיקה גורמת לתת-קיבולת (underflow) בצומת שניתן לאזן בשתי דרכים שונות (מיזוג עם אח שמאלי או מיזוג עם אח ימני). אם האלגוריתם יבחר בדרך שאינה "הפוכה" לפיצול המקורי, העץ יתקבל במבנה שונה.
נניח את המצב ההתחלתי הבא:
- שורש:
[100, 200] - ילדים:
C1,C2,C3כאשר: C1מכיל 5 מפתחות (יותר מהמינימום).C2הוא צומת מלא המכיל 8 מפתחות (למשל,[110, 120, ..., 180]).C3מכיל 4 מפתחות (המספר המינימלי).
1. הכנסת איבר חדש `x=185`:
- האיבר
185מוכנס לצומתC2, מה שגורם לו להצפה (overflow) עם 9 מפתחות. - צומת
C2מתפצל: המפתח החציוני150עולה לשורש, והצומת מתפצל לשני צמתים חדשים,C2aו-C2b, שכל אחד מהם מכיל 4 מפתחות (המספר המינימלי). - העץ החדש:
- שורש:
[100, 150, 200] - ילדים:
C1,C2a=[110..140],C2b=[160..180, 185],C3
2. מחיקת האיבר `x=185`:
- האיבר
185נמחק מהצומתC2b, מה שמותיר אותו עם 3 מפתחות בלבד – מצב של תת-קיבולת (underflow). - כדי לאזן את
C2b, יש לבחון את אחיו. גם אחיו השמאלי (C2a) וגם אחיו הימני (C3) מכילים את מספר המפתחות המינימלי (4), ולכן לא ניתן לבצע השאלה. - חייבים לבצע מיזוג. לאלגוריתם יש שתי אפשרויות חוקיות: למזג את
C2bעםC2aאו למזג אתC2bעםC3. - אפשרות 1 (הפוכה לפיצול): מיזוג
C2bעםC2aיחד עם המפתח150מהשורש יחזיר אותנו למצב המקורי. - אפשרות 2 (מובילה למצב שונה): נניח שהאלגוריתם בוחר למזג את
C2bעם אחיו הימני,C3. הפעולה כוללת מיזוגC2b,C3, והמפתח המפריד ביניהם מהשורש (200). - העץ הסופי:
- שורש:
[100, 150] - ילדים:
C1,C2a, וצומת חדש ממוזג המכיל 8 מפתחות. - העץ הסופי שונה מהעץ המקורי (למשל, מפתחות השורש שונים). מכיוון שקיימת דרך ביצוע חוקית שאינה מחזירה את העץ למצבו המקורי, התשובה היא לא.
ב) מחיקה ואחריה הכנסה
לא, גם פעולה זו לא תמיד תחזיר את העץ לצורתו המקורית.
הסבר ודוגמה נגדית:
הסיבה דומה: פעולת המחיקה עלולה לגרום לאיזון מחדש (למשל, השאלה מצומת אח - rotation) המשנה את מבנה העץ. ההכנסה שבאה לאחר מכן עשויה שלא לגרום לפעולת איזון כלל, ובכך להשאיר את העץ במבנה החדש והשונה.
נניח את המצב ההתחלתי הבא (עבור עץ מסדר 9):
- שורש:
[100, 200] - ילדים:
C1,C2,C3כאשר: C1מכיל 4 מפתחות (מינימום).C2מכיל 5 מפתחות (יותר מהמינימום).C3מכיל 4 מפתחות (מינימום).
1. מחיקת איבר `x` מהצומת `C3`:
- נניח שאנו מוחקים מפתח מצומת
C3. הוא נותר עם 3 מפתחות, מצב של תת-קיבולת. - כדי לאזן את
C3, האלגוריתם בודק את אחיו,C2. מכיוון של-C2יש יותר ממספר המפתחות המינימלי, ניתן לבצע השאלה (rotation). - בפעולת ההשאלה, מפתח מההורה (
200) יורד ל-C3, והמפתח הגדול ביותר מ-C2(נניח150) עולה להורה במקום200. - העץ החדש:
- שורש:
[100, 150] - ילדים:
C1(נותר עם 4 מפתחות),C2(נותר עם 4 מפתחות),C3(כעת עם 4 מפתחות). - העץ מאוזן וחוקי, אך שונה מהמבנה המקורי (מפתחות השורש וחלוקת המפתחות בין
C2ו-C3השתנו).
2. הכנסת האיבר `x` בחזרה:
- האיבר
xיוכנס למקומו המתאים בעץ החדש (למשל, לצומתC3). - צומת
C3יכיל כעת 5 מפתחות. מאחר שזהו מספר חוקי (בין 4 ל-8), לא תתבצע פעולת איזון נוספת (כמו פיצול). - העץ הסופי נותר במבנה אליו הגיע לאחר פעולת ההשאלה, והוא שונה מהעץ המקורי.
מכיוון שהצלחנו למצוא תרחיש בו העץ לא חוזר למצבו המקורי, התשובה היא לא.