שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2018 - עץ חיפוש בינארי
ענה/י נכון/לא נכון לכל אחד מהסעיפים הבאים. מותר אך לא חובה לכתוב הסבר עד אורך של שורה לכל סעיף.
א) לכל קיים עץ חיפוש בינארי של איברים שגובהו
ב) ברשימה מקושרת באורך כדאי לשמור גם מצביע לאיבר האמצעי, כי בהשקעה של שטח, קיבלנו אפשרות לבצע חיפוש בינארי.
ג) באלגוריתם של Boyer & Moore בהגדרה של , נחפש לכל סיפא מופע מוקדם יותר, אך נדרוש שהאות הקודמת לסיפא תהיה שונה. אם נוריד דרישה זאת, האלגוריתם יכול לשגות.
ד) בטבלת Hash בגודל 2500 הוכנסו 1000 איברים ע"י שימוש ב־Hashing Uniform. הזמן הממוצע לחיפוש מוצלח, כאשר לכל איבר שהוכנס הסתברות שווה להופיע בחיפוש, הוא .
ה) נתון B-tree מדרגה שמכיל איברים. אם נכניס איבר נוסף לעץ ובשלב הבא נבטל אותו, העץ שמתקבל אחרי ביצוע שתי הפעולות יהיה תמיד זהה לעץ ממנו יצאנו.
ו) החסם התחתון למיזוג 2 סדרות ממוינות, אחת באורך ואחת באורך 3 הוא .
ז) לכל קיים עץ AVL המכיל קודקודים שסריקת ה־post-order שלו היא סדרה ממוינת.
ח) בכל רשימה מקושרת, קיים איבר אליו ניתן לגשת ב־ זמן.
ט) לכל קיים עץ בינארי המכיל בדיוק עלים ו־ קודקודים פנימיים.
י) זמן חיפוש איבר ברשימת דילוגים (skip-list) הוא במקרה הגרוע.
א) לכל קיים עץ חיפוש בינארי של איברים שגובהו
ב) ברשימה מקושרת באורך כדאי לשמור גם מצביע לאיבר האמצעי, כי בהשקעה של שטח, קיבלנו אפשרות לבצע חיפוש בינארי.
ג) באלגוריתם של Boyer & Moore בהגדרה של , נחפש לכל סיפא מופע מוקדם יותר, אך נדרוש שהאות הקודמת לסיפא תהיה שונה. אם נוריד דרישה זאת, האלגוריתם יכול לשגות.
ד) בטבלת Hash בגודל 2500 הוכנסו 1000 איברים ע"י שימוש ב־Hashing Uniform. הזמן הממוצע לחיפוש מוצלח, כאשר לכל איבר שהוכנס הסתברות שווה להופיע בחיפוש, הוא .
ה) נתון B-tree מדרגה שמכיל איברים. אם נכניס איבר נוסף לעץ ובשלב הבא נבטל אותו, העץ שמתקבל אחרי ביצוע שתי הפעולות יהיה תמיד זהה לעץ ממנו יצאנו.
ו) החסם התחתון למיזוג 2 סדרות ממוינות, אחת באורך ואחת באורך 3 הוא .
ז) לכל קיים עץ AVL המכיל קודקודים שסריקת ה־post-order שלו היא סדרה ממוינת.
ח) בכל רשימה מקושרת, קיים איבר אליו ניתן לגשת ב־ זמן.
ט) לכל קיים עץ בינארי המכיל בדיוק עלים ו־ קודקודים פנימיים.
י) זמן חיפוש איבר ברשימת דילוגים (skip-list) הוא במקרה הגרוע.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2018סמסטר ב
★★★★★
עץ חיפוש בינארירשימות מקושרותחיפוש בינאריאלגוריתמיםטבלאות גיבובעצי Bמיוןחסם תחתון למיוןעצי AVLעצים בינארייםסיבוכיות זמן
עבור על כל סעיף ובדוק האם הוא מתיישב עם ההגדרות והתכונות הבסיסיות של מבנה הנתונים או האלגוריתם המוזכר. שים לב למקרים הגרועים ביותר ולתנאים מיוחדים.
א) נכון. ניתן לבנות עץ כזה. למשל, ניקח שרשרת (עץ מנוון) באורך . לכל אחד מקודקודי השרשרת (פרט אולי לאחרון) נחבר תת-עץ חיפוש בינארי מאוזן לחלוטין בגודל . הגובה הכולל יהיה סכום גובה השרשרת וגובה העץ הקטן, כלומר .
ב) לא נכון. מצביע לאיבר האמצעי אכן תופס מקום של . עם זאת, כדי לבצע חיפוש בינארי, לאחר הגישה הראשונה לאמצע, יש צורך לגשת לאמצע של החצי הראשון או השני של הרשימה. ברשימה מקושרת, פעולה זו דורשת מעבר סדרתי על איברים, ולכן זמן הגישה אינו . לכן, חיפוש בינארי יעיל אינו אפשרי.
ג) נכון. כלל הסיומת הטובה (good-suffix rule) באלגוריתם Boyer-Moore מחפש הופעה קודמת של הסיומת שתאמה. הדרישה שהתו הקודם להופעה זו יהיה שונה מהתו שגרם לאי-התאמה היא קריטית. אם נשמיט דרישה זו, במקרים מסוימים (למשל, דפוס
ד) נכון. השאלה מתארת גיבוב אחיד (uniform hashing), והנוסחה הנתונה, , היא זמן החיפוש המוצלח הממוצע בשיטת כתובות פתוחות (open addressing) תחת ההנחה של מישוש אחיד (uniform probing). מקדם המילוי (load factor) הוא . הצבה בנוסחה נותנת: .
ה) לא נכון. פעולות ההכנסה והמחיקה ב-B-tree אינן בהכרח הופכיות זו לזו. למשל, הכנסת איבר יכולה לגרום לפיצול צומת. מחיקת אותו איבר לאחר מכן יכולה לגרום לצומת להיות בתת-תכולה, מה שיוביל לפעולת איזון. פעולת האיזון עשויה להיות מיזוג עם צומת שכן (שמחזיר למצב המקורי), אך גם עלולה להיות "השאלה" (rotation) מאיבר שכן, אם לשכן יש מספיק מפתחות. בחירה ברוטציה, כאשר היא אפשרית, יכולה להוביל למבנה עץ שונה מהמבנה המקורי.
ו) לא נכון. החסם התחתון למיזוג שתי סדרות ממוינות בגודל ו- (כאשר ) הוא . במקרה זה, ו-3, ולכן החסם הוא . לחלופין, ניתן לראות כי במקרה הגרוע ביותר נצטרך לבצע השוואות.
ז) נכון. עץ AVL שכל צומת פנימי בו מכיל רק ילד שמאלי הוא למעשה רשימה מקושרת "שמאלית". עץ כזה הוא עץ AVL חוקי (גובה כל תת-עץ ימני הוא -1, וגובה תת-עץ שמאלי יורד ב-1 בכל רמה, כך שהפרש הגבהים תמיד 1). סריקת post-order בעץ כזה תבקר תחילה בכל תת-העץ השמאלי (עד לעלה), תדפיס את ערך הצומת, ואז תעלה למעלה. תהליך זה יוביל להדפסת האיברים מהקטן לגדול, כלומר סדרה ממוינת.
ח) נכון. בכל רשימה מקושרת (לא ריקה), ניתן לגשת לאיבר הראשון (ה-head) בזמן של , מכיוון שתמיד נשמר מצביע אליו.
ט) לא נכון. בעץ בינארי (לא ריק), מספר העלים ומספר הקודקודים הפנימיים בעלי שני בנים קשורים על ידי הנוסחה . מספר הקודקודים הפנימיים הכולל הוא (בעלי בן אחד ובעלי שני בנים). אם הוא מספר העלים, אז . אם מספר הקודקודים הפנימיים הוא , אז . מהצבת נקבל , כלומר . זה אפשרי. אבל השאלה היא "בכל עץ בינארי". בעץ בינארי *מלא* (full binary tree), כל קודקוד פנימי הוא בעל שני בנים (), ולכן מספר הקודקודים הפנימיים הוא , לא . לכן הטענה לא נכונה באופן כללי. אם הכוונה לעץ בינארי כלשהו, אז הטענה נכונה, אך לרוב בהקשר זה הכוונה לעצים מלאים או שלמים. בהינתן הניסוח, התשובה המדויקת היא שהקשר אינו מתקיים לכל עץ.
י) נכון. רשימת דילוגים (skip-list) מספקת ביצועים ממוצעים של לפעולות חיפוש, הכנסה ומחיקה. עם זאת, במקרה הגרוע ביותר (worst-case), המבנה ההסתברותי של הרשימה עלול להתנוון למצב בו כל האיברים נמצאים רק ברמה התחתונה, ללא "קיצורי דרך" ברמות הגבוהות. במצב זה, הרשימה מתנהגת כרשימה מקושרת רגילה, וחיפוש ידרוש מעבר סדרתי על כל האיברים, כלומר זמן של .
ב) לא נכון. מצביע לאיבר האמצעי אכן תופס מקום של . עם זאת, כדי לבצע חיפוש בינארי, לאחר הגישה הראשונה לאמצע, יש צורך לגשת לאמצע של החצי הראשון או השני של הרשימה. ברשימה מקושרת, פעולה זו דורשת מעבר סדרתי על איברים, ולכן זמן הגישה אינו . לכן, חיפוש בינארי יעיל אינו אפשרי.
ג) נכון. כלל הסיומת הטובה (good-suffix rule) באלגוריתם Boyer-Moore מחפש הופעה קודמת של הסיומת שתאמה. הדרישה שהתו הקודם להופעה זו יהיה שונה מהתו שגרם לאי-התאמה היא קריטית. אם נשמיט דרישה זו, במקרים מסוימים (למשל, דפוס
baba בטקסט ...ababa...), האלגוריתם עלול לבצע הזזה שתוביל לאותה אי-התאמה בדיוק, וכך להיכנס ללולאה אינסופית.ד) נכון. השאלה מתארת גיבוב אחיד (uniform hashing), והנוסחה הנתונה, , היא זמן החיפוש המוצלח הממוצע בשיטת כתובות פתוחות (open addressing) תחת ההנחה של מישוש אחיד (uniform probing). מקדם המילוי (load factor) הוא . הצבה בנוסחה נותנת: .
ה) לא נכון. פעולות ההכנסה והמחיקה ב-B-tree אינן בהכרח הופכיות זו לזו. למשל, הכנסת איבר יכולה לגרום לפיצול צומת. מחיקת אותו איבר לאחר מכן יכולה לגרום לצומת להיות בתת-תכולה, מה שיוביל לפעולת איזון. פעולת האיזון עשויה להיות מיזוג עם צומת שכן (שמחזיר למצב המקורי), אך גם עלולה להיות "השאלה" (rotation) מאיבר שכן, אם לשכן יש מספיק מפתחות. בחירה ברוטציה, כאשר היא אפשרית, יכולה להוביל למבנה עץ שונה מהמבנה המקורי.
ו) לא נכון. החסם התחתון למיזוג שתי סדרות ממוינות בגודל ו- (כאשר ) הוא . במקרה זה, ו-3, ולכן החסם הוא . לחלופין, ניתן לראות כי במקרה הגרוע ביותר נצטרך לבצע השוואות.
ז) נכון. עץ AVL שכל צומת פנימי בו מכיל רק ילד שמאלי הוא למעשה רשימה מקושרת "שמאלית". עץ כזה הוא עץ AVL חוקי (גובה כל תת-עץ ימני הוא -1, וגובה תת-עץ שמאלי יורד ב-1 בכל רמה, כך שהפרש הגבהים תמיד 1). סריקת post-order בעץ כזה תבקר תחילה בכל תת-העץ השמאלי (עד לעלה), תדפיס את ערך הצומת, ואז תעלה למעלה. תהליך זה יוביל להדפסת האיברים מהקטן לגדול, כלומר סדרה ממוינת.
ח) נכון. בכל רשימה מקושרת (לא ריקה), ניתן לגשת לאיבר הראשון (ה-head) בזמן של , מכיוון שתמיד נשמר מצביע אליו.
ט) לא נכון. בעץ בינארי (לא ריק), מספר העלים ומספר הקודקודים הפנימיים בעלי שני בנים קשורים על ידי הנוסחה . מספר הקודקודים הפנימיים הכולל הוא (בעלי בן אחד ובעלי שני בנים). אם הוא מספר העלים, אז . אם מספר הקודקודים הפנימיים הוא , אז . מהצבת נקבל , כלומר . זה אפשרי. אבל השאלה היא "בכל עץ בינארי". בעץ בינארי *מלא* (full binary tree), כל קודקוד פנימי הוא בעל שני בנים (), ולכן מספר הקודקודים הפנימיים הוא , לא . לכן הטענה לא נכונה באופן כללי. אם הכוונה לעץ בינארי כלשהו, אז הטענה נכונה, אך לרוב בהקשר זה הכוונה לעצים מלאים או שלמים. בהינתן הניסוח, התשובה המדויקת היא שהקשר אינו מתקיים לכל עץ.
י) נכון. רשימת דילוגים (skip-list) מספקת ביצועים ממוצעים של לפעולות חיפוש, הכנסה ומחיקה. עם זאת, במקרה הגרוע ביותר (worst-case), המבנה ההסתברותי של הרשימה עלול להתנוון למצב בו כל האיברים נמצאים רק ברמה התחתונה, ללא "קיצורי דרך" ברמות הגבוהות. במצב זה, הרשימה מתנהגת כרשימה מקושרת רגילה, וחיפוש ידרוש מעבר סדרתי על כל האיברים, כלומר זמן של .