המחלקה למדעי המחשב מבני נתונים 202-1-1031 מבחן מועד א', 05/07/2015 13:30, חומר עזר משך הבחינה פרופ' איתן בכמט, פרופ' פז כרמי, דר' צחי רוזן, דר' דקל צור, פרופ' מיכאל אלקין, גב' אירינה רבייב. עמית בן בסט, הדסה דלטרוף, אריאל הנמן, יקים סילברמן, ענר בן משה אפרים, עומרית פילצר, דולב סוקר, תומר כהן, נטע סטייברג, עמית רוקח אסור שלוש שעות ענו על ארבע השאלות הבאות על גבי הטופס ובמקומות המתאימים. המחברת תשמש לטיוטה בלבד! אנו לא אוספים את מחברות הטיוטה והן יילקחו לגריסה. בסעיפים בהם קיימת דרישת זמן לאלגוריתם שעליכם להציע, יש לתת הסבר מספק שאכן עמדתם בדרישת הזמן שבשאלה. ניתן להשתמש במבני נתונים ואלגוריתמים שנלמדו בכיתה ללא פירוט של המימוש שלהם אלא אם השאלה דורשת במפורש פירוט של המימוש. במידה וקיים יותר ממימוש אחד ניתן לבחור כל מימוש שמתאים לזמני הריצה המבוקשים ולתנאי השאלה. במידה ואינכם יודעים את התשובה לסעיף כלשהו, רשמו "לא יודע/ת" במקום תשובה( ותזכו ב- 20% מניקוד הסעיף. לא ניתן לכתוב לא יודע על חלק מסעיף. אסור לחרוג מהשורות. תתכננו מראש את תשובתכם. בהצלחה! 4 3 הטבלה לשימוש הבודקים בלבד 2 1 שאלה ציון 1
ד א ב ג א ב ג ד ה ו ז המחלקה למדעי המחשב שאלה 25 1 נק', 5 נק' לכל סעיף( לכל אחת מהטענות הבאות יש לסמן את התשובה הנכונה מתוך מספר תשובות מוצעות. יש להסביר את תשובה בקצרה במקום המיועד. תשובה נכונה ללא הסבר תזכה בנקודה אחת בלבד. יהי T עץ AVL ויהיו x y שני עלים כלשהם בעץ. נסמן depth(x ו-( depth(y עומקים של x ו- הערך המקסימאלי שיכול לקבל הביטוי depth(x-depth(y הינו: בy -T..0.1.2 אף אחת מהתשובות לעיל. נוכל ברקורסיה לבנות עץ AVL בו עומק מינימלי של עלה הוא n ועומק מקסימלי של עלה הוא 2n וכך נקבל הפרש n, כלומר ההפרש בין עומק מינימלי ומקסימלי של עלים הוא לא חסום. עבור n=o נקח עץ עם קדקד יחיד. נניח נכונות הטענה עבור n ואז עבור 1+n נקח קדקד שורש, כאשר בבנו השמאלי מושרש עץ AVL בו עומק עלה מינימלי הוא n ועומק עלה מקסימלי הוא 2n, ובבנו הימני מושרש עץ AVL כלשהוא בגובה 1+2n למשל עץ בינארי מושלם(. עומק מינימלי של עלה בעץ החדש יהיה 1+n מתקבל מצד שמאל( ועומק מקסימלי של עלה יהיה 2n+2=2(n+1 מתקבל מצד ימין( כנדרש. גם דוגמא עם הפרשי עומקים של 3 מספיקה כהסבר כמובן(.1 לאיזה מהמבנים הבאים יש זמן ריצה הארוך ביותר בחיפוש אחר איבר? טבלת Hash שבה פותרים התנגשויות על ידי שרשור. עץ- B עם.t=2 מערך לא ממוין. עץ חיפוש בינארי. עץ.AVL א+ג+ד. א+ב+ג..2 בטבלת האש בה כל האיברים ממופים לאותו תא והאיבר המבוקש אחרון בשרשור זמן החיפוש יהיה ליניארי. כנ"ל גם במערך לא ממוין במקרה בו נעבור על כל האיברים עד שנמצא את האיבר המבוקש. כנ"ל בעץ חיפוש בינארי שכולו ענף אחד ארוך באורך n יש רק בנים ימניים למשל( והאיבר המבוקש נמצא בעלה. בשני המקרים האחרים זמן החיפוש חסום אסימפטוטית ע"י גובה העץ ומכיוון שבשני מקרים אילו מדובר בעצים מאוזנים נקבל log(n. 2
ו א ב ג ד ה א ב ג ד ה המחלקה למדעי המחשב יהיו T1 ו- T2 שני עצי- B בגובה h עם דרגת מינימום 3=t. נסמן ע"י num1 ו- num2 את מספר הצמתים ב- T1 וב- T2 בהתאמה. הערך המקסימאלי שיכול לקבל הביטוי num1 num2.(1.(h h.(2. (h t.(h 3 אף אחת מהתשובות לעיל. הינו:.3 הערך המקסימלי יתקבל כאשר המונה הינו הגדול ביותר האפשרי והמכנה הקטן ביותר האפשרי. מספר הצמתים המקסימלי יתקבל כאשר כל צומת פנימי הוא מלא, כלומר יש לו 2t בנים. מספר הצמתים המינימלי יתקבל כאשר לשורש בן יחיד ולכל שאר הצמתים הפנימיים t בנים. כפי שראינו בכיתה בכל המקרים מספר הצמתים הוא θ של מספר העלים ולכן מספר הצמתים המקסימלי הוא.θ(2 h ובחלוקתם נקבל θ(t h ומספר הצמתים המינימלי הוא θ((2t h 4. כמה עצים פורשים מינימאליים שונים קיימים לגרף הבא? 0 1 2 4 אף אחת מהתשובות לעיל. באלגוריתם פרים או קרוסקל ישנה רק אפשרות אחת לבחירה כאשר מחליטים איזה מבין הצלעות במשקל 4 להוסיף. טיעון אלטרנטיבי יהיה שבעץ פורש מינימלי הצלע הכבדה ביותר בכל מעגל לא נמצאת. 3
א ב ג ד ה ו המחלקה למדעי המחשב נתונה מחסנית התומכת בפעולות: O(1 בזמן Pop( O(1 בזמן Push(x PopLog( בזמן (n - O(log השולפת log n איברים מראש המחסנית כאשר n הוא מספר האיברים הנוכחי במחסנית(.5 בהינתן סדרה כלשהי של n פעולות המתחילה במחסנית ריקה, זמן Amortized של פעולה במחסנית הוא: (log log n (n n log log n n log n (1 (log n כפי שראינו בתרגול נשלם שני אסימונים לכל פעולת,Push(x אחד עבור הפעולה עצמה ואסימון שני נשמר עבור הוצאה עתידית של x מהמבנה. נשלם 0 אסימונים לכל פעולת Pop( או PopLog( כאשר לכל שליפה של איבר מראש המחסנית יש לנו בצד שמור אסימון אחד עבור הוצאתו. שאלה 25 2 נק'( כתבו פסאודו קוד של אלגוריתם מיון ערימה (HeapSort ונתחו את זמן ריצה שלו. אתם יכולים להשתמש בפעולות BuildHeap ו- Heapify ללא צורך בכתיבת הקוד שלהם. הפתרון של שאלה זו הועבר בהרצאות. 4
המחלקה למדעי המחשב שאלה 25 3 נק'( נתון מערך A המכיל n איברים שונים זה מזה. זוג אינדקסים עוקבים (i,i+1 יקרא "זוג מפר" אם.A[i]>A[i+1] כאילו" אם קיימים לכל היותר log n זוגות מפרים. במילים אחרות ישנם מערך A בגודל n יקרא "ממוין ואין שום מידע נוסף על המערך. ש: A[i]>A[i+1] לכל היותר log n אינדקסים כך דוגמא למערך בגודל 8 "ממוין כאילו": בדוגמא: = 8,n,log n = 3 וישנם רק 2 זוגות עוקבים מפרים בדוגמא (2,3 ו-( 5,6. index 1 2 3 4 5 6 7 8 value 500 501 3 8 100 1 2 9 הציעו אלגוריתם יעיל ככל הניתן אשר מקבל מערך "ממוין כאילו" וממיין אותו. נתחו את זמן ריצה של האלגוריתם שהצעתם. נשים לב שהמקטעים בין הזוגות המפרים הינם ממוינים. ניתן במעבר יחיד על המערך לשמור מצביעים לכל תחילת המקטעים. כלומר, כעת יש לנו לכל היותר log(n+1 מקטעים ממוינים. כעת ניתן למזג את המקטעים למקטע ממוין יחיד בזמן log(log(n.o(n פתרון ראשון: בעזרת ערימה, כפי שראיתם בתרגול 9 פתרון שני: ממזגים בזוגות, את המקטע הראשון עם השני, השלישי עם הרביעי וכן הלאה. לאחר שלב זה נשאר עם לכל היותר (log(n+1/2 מקטעים ממוינים וכעת נמזג אותם בזוגות שוב, וחוזר חלילה עד שנקבל מקטע ממוין יחיד. נשים לב שכל שלב כלומר, מיזוג של כל זוגות המקטעים( לוקח זמן,O(n כי מיזוג של זוג מקטעים לוקח זמן אורך המקטעים O, ואורך סך כל מקטעים הוא n. סה"כ יש O(log(log(n שלבים, כי בכל שלב מספר המקטעים קטן בחצי. לכן סה"כ זמן הריצה של כל המיזוג הינו log(log(n.o(n סך כל זמן הריצה של המיון: log(log(n O(n+O(n log(log(n=o(n שגיאות נפוצות: אלגוריתמים ש רצו בזמן log(n O(n או אלגוריתמים שלא ציינו במפורש כיצד מבצעים את המיזוג מיזוג המקטעים בצורה סדרתית לוקח זמן log(n O(n ביותר( 5
המחלקה למדעי המחשב שאלה 25 4 נקודות( מחסנאים של מפעל BNE&Co נזקקים למבנה נתונים התומך באחסון וקבלת מידע על צינורות. לכל צינור p יש שני מאפיינים: אורך p.len נתון במטרים שלמים( ותאריך ייצור.p.prodDate הניחו כי לאורך ריצת המבנה, לכל הצינורות אורכים שונים אך יתכנו מספר צינורות בעלי תאריך ייצור זהה. כמו כן, ניתן להניח שבכל רגע נתון אין יותר מ- N צינורות במבנה. על המבנה נתונים לתמוך בפעולות הבאות: שם פעולה Init(N AddPipe(len,prodDate RemovePipe(len RemoveLongerThan(len ExistPipe(len HowMany(date תאור פעולה אתחול מבנה נתונים ריק. N הינו מספר מקסימאלי של צינורות שיכולים להיות במבנה ברגע נתון. הוספת צינור באורך len שיוצר בתאריך proddate למחסן. הפעולה נכשלת אם קיים צינור באורך.len זמן ריצה הדרוש O(N O(log n O(log n O(log n O(1 צפוי expected( O(1 צפוי expected( הוצאת צינור באורך len מהמחסן. הוצאה מהמחסן את הצינור הקצר ביותר שאורכו הוא לפחות.len החזרת YES אם קיים צינור באורך len במחסן, ו- NO אם לא קיים צינור באורך len במחסן. החזרת כמות הצינורות במבנה שיוצרו בתאריך.date הבהרה: n הינו מספר צינורות במבנה ברגע ביצוע הפעולה תמיד n(. N תארו בקצרה את מבנה הנתונים, ספקו אלגוריתם לכל אחת מהשיטות והוכיחו עמידה בזמני הריצה. פתרון: ראו קובץ נפרד של פתרון שאלה 4 6