מלמ - שאלת רקורסיה לבחינת סיום מועד א

‫מכללת אורט בראודה‪ ,‬המחלקה להנדסת תכנה‬
‫א אביב תש"ע‪ ,‬מועד א'‬
‫‪ - 61145‬מבנה נתונים מ'‬
‫הערה מקדימה ‪:‬‬
‫הבחינות נבדקו בקפדנות וגם ברחמנות‪.‬‬
‫מי שמערער שייקח בחשבון שהבחינה כולה תיבדק שוב‪ ,‬והפעם בקפדנות יתרה‪ ,‬שמשמעותה שנקודות יכולות‬
‫גם לרדת‪.‬‬
‫לכן‪ ,‬השתדלו להגיש ערעור רק אם אתם בטוחים בנכונות פיתרונכם‪.‬‬
‫שאלה ‪ 62 [ 1‬נקודות]‬
‫‪ .1‬תהי ‪ H‬ערמת מקסימום עם ‪ n‬מפתחות שונים זה מזה‪ .‬תהי ‪ A‬סדרת המפתחות שמתקבלת בסריקת ‪ preorder‬של‬
‫‪ . H‬רשום מספר מקסימלי עבורו הטענה הבאה עדיין נכונה‪:‬‬
‫המפתח המינימלי בודאי לא נמצא בין __‪ _log n ‬המפתחות הראשונים ב‪. A -‬‬
‫כיוון שבסריקה הזו נדפיס לפי הסדר את השורש ונרד שמאלה – בטוח שהמפתח המינימלי הוא עלה‪ .‬כיוון שגובה העץ הוא ‪log‬‬
‫‪ n‬בדיוק אזי אילו יהיו ערכים שלא נמצאים בעלים עד העלה הראשון שנפגוש‬
‫‪ .2‬העץ הבא הוא עץ ‪ AVL‬אחרי שהורידו ממנו צומת ולפני הגילגולים‪ .‬יש לתקן את העץ‪ ,‬אם ישנם כמה שלבים יש‬
‫לשרטט כל שלב בנפרד‪ ,‬ולנמק מדוע התבצע גלגול מסוים‪ ,‬ולהראות את התוצאה‪:‬‬
‫‪11‬‬
‫‪5‬‬
‫‪17‬‬
‫‪7‬‬
‫‪22‬‬
‫‪2‬‬
‫‪6‬‬
‫‪21‬‬
‫‪1‬‬
‫‪3‬‬
‫‪4‬‬
‫צריך לעשות גלגול ‪ RL‬על ‪17‬‬
‫צריך לעשות גלגול ‪ RL‬על ‪17‬‬
‫‪11‬‬
‫‪5‬‬
‫‪21‬‬
‫‪22‬‬
‫‪17‬‬
‫‪2‬‬
‫‪7‬‬
‫‪6‬‬
‫‪4‬‬
‫עמוד ‪ 1‬מתוך ‪6‬‬
‫‪3‬‬
‫‪1‬‬
‫‪ - 61145‬מבנה נתונים מ'‬
‫מכללת אורט בראודה‪ ,‬המחלקה להנדסת תכנה‬
‫[עמוד זה הושאר ריק במתכוון]‬
‫צריך לעשות גלגול ‪ LL‬על ‪11‬‬
‫‪5‬‬
‫‪11‬‬
‫‪7‬‬
‫‪21‬‬
‫‪22‬‬
‫‪2‬‬
‫‪17‬‬
‫‪3‬‬
‫‪6‬‬
‫‪4‬‬
‫עמוד ‪ 2‬מתוך ‪6‬‬
‫‪1‬‬
‫א אביב תש"ע‪ ,‬מועד א'‬
‫מכללת אורט בראודה‪ ,‬המחלקה להנדסת תכנה‬
‫‪ - 61145‬מבנה נתונים מ'‬
‫א אביב תש"ע‪ ,‬מועד א'‬
‫שאלה ‪ 43 [ 6‬נקודות]‬
‫נגדיר מרחק בין שני צמתים בגרף לא מכוון כמספר הקשתות במסלול הקצר ביותר בין שני הצמתים‪ .‬נגדיר קוטר של גרף לא‬
‫מכוון להיות המקסימום‪ ,‬על כל זוגות הצמתים בגרף‪ ,‬של המרחק בין שני הצמתים‪.‬‬
‫בסעיפים הבאים אנו דנים בעצים בינאריים‪ .‬בכל צומת יש שני מצביעים לשני הבנים של הצומת‪ ,‬מצביע לאב של הצומת ושדה‬
‫אחד נוסף‪.‬‬
‫א‪ .‬תארו אלגוריתם אשר בהינתן עץ בינארי שלם מוצא את קוטר העץ‪ .‬סיבוכיות הזמן הנדרשת היא )‪ O(log n‬במקרה‬
‫הגרוע ביותר‪ ,‬כאשר ‪ n‬הוא מספר הצמתים בעץ (אפשר לכתוב ‪ .)pseudo-code‬נמקו מדוע האלגוריתם עומד‬
‫בסיבוכיות הנדרשת‪.‬‬
‫תשובה לא מנומקת לא תתקבל‪ .‬אין לחרוג מהמקום המוקצה לפתרון‪.‬‬
‫בעץ בינארי שלם המרחק הכי רחוק משורש העץ הינו עלה והוא במרחק לוגרתימי בגודל הנתונים‪ .‬לכן‪ ,‬בכדי למצוא את‬
‫הקוטר יש לרדת עד לעלה‪ .‬עבור כל רמה יש לעלות ב – ‪ 1‬ואז להכפיל את התוצאה בשתיים – מרחק בן שני עלים‬
‫שמחוברים רק על ידי השורש‪.‬‬
‫הערות‪ :‬מי שכתב שעושים סריקה (תחילית‪ ,‬תוכית או סופית) לא עומדים כמובן בתנאי השאלה כי זה לינארי‬
‫מי שכתב שעושים סריקה כו ויוצאים בעלה הראשון זה בסדר – מי שלא כתב את זה‪ ,‬כמו בהערה למעלה – לא קיבל‬
‫נקודות‪.‬‬
‫ב‪ .‬תארו אלגוריתם אשר בהינתן עץ בינארי כלשהו מוצא את קוטר העץ‪ .‬סיבוכיות הזמן הנדרשת היא )‪ O(n‬במקרה‬
‫הגרוע ביותר‪ ,‬כאשר ‪ n‬הוא מספר הצמתים בעץ וסיבוכיות המקום הנוסף היא )‪( O(1‬אפשר לכתוב ‪.)pseudo-code‬‬
‫נמקו מדוע האלגוריתם עומד בסיבוכיות הנדרשת‪.‬‬
‫משתמשים במשתנה הנוסף – פעם "הולכים" לימין ומוצאים את העלה הכי רחוק‪ .‬פעם לשמאל ומוצאים את העלה הכי רחוק‪.‬‬
‫מסכמים את התוצאה של שני הערכים וזה יהיה קוטר העץ‪ .‬כיוון שגרף התשתית של העץ הוא חסר מעגלים יש מסלול אחד‬
‫בלבד בין שני העלים הרחוקים‪ .‬מכיוון שתוספת המקום היא קבועה לא ניתן להשתמש ברקורסיה‪.‬‬
‫לכן מודדים את גובה העץ באופן הבא – בכל מקום עושים את המקסימום בין שני הילדים (בשדה הנוסף) ומוסיפים ‪.1‬‬
‫בשורש תת העץ מסכמים את שני השדות הנוספים של הילדים וזהו הקוטר ‪.‬‬
‫המרחק יהיה לינארי במקרה הגרוע גובה העץ – כיוון שזהו המקרה הגרוע ביותר‪.‬‬
‫לגבי הסריקה של עץ האלגוריתם הוא כזה – יש משתנה שנקרא לו ‪ max‬שהוא משתנה שיחזיר את הקוטר ‪ ,‬מאותחל ב‪.1-‬‬
‫כיוון אי אפשר לעשות רקורסיה – הבעייה השניה היא סריקת העץ – משתמשים במשתנה הנוסף בשביל לדעת מאין באנו‪.‬‬
‫בכל צומת בה עוברים בפעם הראשונה מסמנים ‪ -1‬בשדה הנוסף‪ ,‬ואז נדע שירדנו שמאלה‪.‬‬
‫כשמגיעים לצומת שהילד השמאלי שלה ריק מסמנים אותו ב – ‪ ,1‬אם הילד הימני ריק משאירים את התוצאה בצומת‪.‬‬
‫כשחוזרים מצד שמאל וכתוב ‪ -1‬מחליפים בגובה עד כה שהוא (גובה הבן השמאלי ‪ )1 +‬ועוברים ימינה‪.‬‬
‫כשחוזרים מצד ימין‪ ,‬רואים שכתוב מספר>‪ ,1‬אז יודעים שחזרנו מימין‪ .‬הגובה מצד ימין יהיה (הגובה של הבן הימני ‪.)1 +‬‬
‫עכשיו מסכמים את הגובה שחושב מימין ‪ +‬הגובה שרשום משמאל – אם התוצאה גבוהה ממה שרשום ב – ‪ max‬אזי מחליפים‬
‫אותה עם ‪.max‬‬
‫בצומת ההיא שמים את המקסימום בין שני הצדדים (זה שרשום וזה שחושב) וממשיכים למעלה‪.‬‬
‫עוצרים כשבאים מצד ימין וההורה הוא ‪ NULL‬ואז יודעים שסיימנו‪.‬‬
‫עמוד ‪ 3‬מתוך ‪6‬‬
‫מכללת אורט בראודה‪ ,‬המחלקה להנדסת תכנה‬
‫‪ - 61145‬מבנה נתונים מ'‬
‫א אביב תש"ע‪ ,‬מועד א'‬
‫שאלה ‪ 34 [ 4‬נקודות]‬
‫בסעיפים הבאים יש להחליט האם הטענה המופיעה בסעיף היא נכונה או לא‪ ,‬או לכתוב תשובה‪ .‬יש גם להסביר בקצרה את‬
‫הפתרון‪ .‬פיתרון ללא הסבר נכון לא יתקבל!!‬
‫‪.1‬נתון ‪ TRIE‬דחוס עבור רשימת מחרוזות‪ .‬המסלול הימני ביותר עבור ה ‪ TRIE‬משורטט בהמשך‪ ,‬כאשר המספר משמאל‬
‫לצומת מייצג את אורך המסלול מהשורש עד לאותו צומת‪ .‬נניח ש ‪ v‬היא המחרוזת הכי גדולה לקסיקוגרפית מכל המחרוזות‬
‫בעץ‪ .‬אנחנו מכניסים מחרוזת ‪ w‬שגדולה מ ‪ ,v‬ושאורך הפרפיקס המשותף שלה ושל ‪ v‬הוא ‪ .31‬אחרי הכנסת ‪ w‬ודחיסת העץ‪,‬‬
‫מה יהיו מספר הקשתות במסלול הימני ביותר בעץ‪.‬‬
‫‪1‬‬
‫‪13‬‬
‫‪22‬‬
‫‪41‬‬
‫‪63‬‬
‫‪4‬‬
‫נימוק‪ :‬כיוון שהמחרוזות האחרות משותפות במסלול קודם צריך לעשות הפרדה בין ‪ 22‬ל ‪ 41‬ושם יהפוך לשתי קשתות ‪ 22‬עד‬
‫‪ 31‬ואז מ‪ 32‬ועד הסוף‪ .‬אם נסתכל על המסלול הימני נראה שיש שם ‪ 4‬קשתות‬
‫‪ .6‬נניח שבנינו ‪ Btree‬כאשר ‪ .m = 63‬מה יהיה מספר העלים של העץ המינימלי כאשר עומקו הוא ‪?4‬‬
‫‪216‬‬
‫נימוק‪:‬כיוון שהעץ הוא מינימלי אזי מספר הילדים של השורש יהיה ‪ .2‬כל היתר יהיו ‪ 32‬ילדים שזה ‪ .m/2 ‬יש עוד ‪ 3‬פעמים ‪32‬‬
‫ילדים‪ .‬סה"כ ‪ 2  25  25  25 :‬שזה יוצא ‪. 216‬‬
‫עמוד ‪ 4‬מתוך ‪6‬‬
‫מכללת אורט בראודה‪ ,‬המחלקה להנדסת תכנה‬
‫א אביב תש"ע‪ ,‬מועד א'‬
‫‪ - 61145‬מבנה נתונים מ'‬
‫‪ .3‬נניח שאנחנו מבצעים ערבול כפול‪ .‬ונניח שגודל הטבלה שלנו היא ‪ . m = 2401‬הפונקציה ‪ r‬תהיה פונקצית הצעד‪ .‬מה‬
‫תהיה פונקצית צעד שתבטיח מציאת מקום בטבלה אם יש מקום ריק?‬
‫א‪12 .‬‬
‫ג‪49 .‬‬
‫ב‪35 .‬‬
‫ה‪98 .‬‬
‫ד‪63 .‬‬
‫נימוק‪ :‬כיוון של ‪ 2411‬ו ‪ 12-‬אין מחלק משותף גדול מ ‪.1‬‬
‫‪ .4‬ע"פ ההגדרה הפורמלית של ‪ O, , ‬נמקו מי מהתשובות הבאות נכונה‪:‬‬
‫א‪n + 3  O(n2) .‬‬
‫ג‪n + 3   (n2) .‬‬
‫ב‪n + 3  (n2) .‬‬
‫ה‪ .‬ב ו‪-‬ג‪.‬‬
‫ד‪ .‬א ו‪-‬ב‪.‬‬
‫נימוק‪ :‬כיוון שההגדרה אומרת ש )‪ fO(g‬אמ"ם קיימים ‪ n0‬ו‪ c-‬כך שלכל ‪ n>n0‬תמיד ‪fcg‬‬
‫‪ .5‬מי מהפונקציות הבאות עולה הכי מהר ל ‪-n‬ים גדולים מאוד‪:‬‬
‫א‪n22n(log n) .‬‬
‫ג‪n22n(log n)5 .‬‬
‫ב‪n23n(log n) .‬‬
‫ה‪n42n .‬‬
‫ד‪n23n(log n)2 .‬‬
‫נימוק‪ :‬כמובן ש ‪ 3n‬עולה הכי מהר והמכפלה הכי גדולה שלה היא ב ד‪.‬‬
‫‪ .6‬איזה ממבני הנתונים הבאים מממשים פעולת חיפוש (כמו במילון) לוגריתמית במקרה הגרוע לחיפוש‪.‬‬
‫א‪ .‬עץ חיפוש בינארי‬
‫ב‪ .‬עץ ‪AVL‬‬
‫ו‪ .‬ג‪ .‬ו‪ -‬ד‪.‬‬
‫ז‪ .‬א ו‪ -‬ד‪.‬‬
‫ג‪ .‬עץ ‪B+‬‬
‫ה‪ .‬ב ו‪-‬ג‪.‬‬
‫ד‪ .‬ערימה‬
‫נימוק‪ :‬ה – כיוון ששני העצים הללו הם היחידים שפעולת החיפוש היא לוגריתמית‪ .‬עץ חיפוש בינארי יכול להיות באורך ‪n‬‬
‫ובערימה החיפוש יהיה לכל גודלה‪.‬‬
‫‪ .7‬כמה עצים שונים יש כאן בהנחה שהעצים הם עצים כלליים לא מסודרים‪.‬‬
‫‪a‬‬
‫‪a‬‬
‫‪b‬‬
‫א‪1 .‬‬
‫‪a‬‬
‫‪b‬‬
‫ב‪2 .‬‬
‫ג‪3 .‬‬
‫‪a‬‬
‫‪b‬‬
‫ד‪4 .‬‬
‫‪c‬‬
‫ה‪5 .‬‬
‫נימוק‪ :‬בעצים לא מסודרים הסדר של הבנים לא חשוב‬
‫עמוד ‪ 5‬מתוך ‪6‬‬
‫‪c‬‬
‫‪b‬‬
‫‪ - 61145‬מבנה נתונים מ'‬
‫מכללת אורט בראודה‪ ,‬המחלקה להנדסת תכנה‬
‫א אביב תש"ע‪ ,‬מועד א'‬
‫‪ .8‬נניח שבונים טבלת ערבול בגודל ‪ b‬עם שרשראות עבור ‪ n‬מפתחות‪ .‬נניח שפונקצית הערבול מפזרת באופן אחיד את‬
‫המפתחות על פני הטבלה‪ .‬אזי המקרה הגרוע ביותר לחיפוש מפתח בטבלה הינו )‪.O(n/b‬‬
‫לא נכון‬
‫נימוק‪ :‬כיוון שהמקרה הגרוע ביותר הינו לינארי בגודל הקלט‪.‬‬
‫‪ .9‬בפונקציה הבאה ‪ a, b‬הם קבועים חיוביים‪.‬‬
‫‪T(n) = 2T(n/2) + bn‬‬
‫‪T(1) = a‬‬
‫הפונקציה מתארת את המקרה הגרוע של מיון מהיר‪.‬‬
‫לא נכון‬
‫נימוק‪ :‬כיוון שהמקרה הגרוע הוא כל פעם להוריד ‪ 1‬מ ‪.n‬‬
‫‪ .11‬פתרו את הפונקציה ב – ‪ 9‬עד הסוף ע"פ שיטת ההצבה‪.‬‬
‫= ‪T(n) = 2T(n/2) + bn‬‬
‫=‪2[2T(n/22) + bn/2] + bn = 22T(n/22) + 2bn = 22[2T(n/23) + bn/22] + 2bn‬‬
‫‪= 23T(n/23) + 3bn = . . = 2k(n/2k) + kbn‬‬
‫‪n/2k = 1  n = 2k  k = log n‬‬
‫)‪T(n) = na + log n b n = O(nlogn‬‬
‫עמוד ‪ 6‬מתוך ‪6‬‬