מבני נתונים 0571.1818 בהצלחה, ועד הנדסה הפקולטה להנדסה המחלקה להנדסת תעשייה סמסטר ב' תשע"ד בחינת מעבר מועד א' 47.7.9 משך הבחינה 3 :שעות ת7ז_______________ 7 מבחן בקורס "מבני נתונים" 17..-.1.1 מרצה :רעות נוחם מתרגל :שחר וינשטוק - חומר עזר 2 :דפים כתובים ומחשבון7 - נא להקפיד על כתב יד ברור - נא להקפיד על תשובות קצרות ובהירות (יתכן מצב שבו המוסיף גורע) - במהלך הבחינה יענו שאלות הבהרה המתייחסות לטופס הבחינה בלבד - יש לענות על כל השאלות .-9 - אסורה אחזקת טלפונים סלולאריים ,וכל מכשיר אלקטרוני אחר בקרבת מקום7 בהצלחה כל הזכויות שמורות © מבלי לפגוע באמור לעיל ,אין להעתיק ,לצלם ,להקליט ,לשדר ,לאחסן מאגר מידע ,בכל דרך שהיא ,בין מכנית ובין אלקטרונית או בכל דרך אחרת כל חלק שהוא מטופס הבחינה. עמוד 1מתוך 9 שאלה 02( 1נקודות) ענה נכון/לא נכון לגבי כל אחד מהמשפטים הבאים ,והסבר ב 3 -שורות לכל היותר את תשובתך 7נקודה תינתן עבור תשובה נכונה ועוד שלוש נקודות עבור הסבר מלא 7תשובה לא נכונה עשויה לזכות בניקוד חלקי אם ההסבר מעיד על הבנת הנקודה 7אם לדעתך המשפט נכון רק במקרים מסוימים ,פרט באילו מקרים 7יש לענות על שאלה זו בטופס הבחינה ,במקום המיועד. א 7בערימת מינימום ,ניתן למצוא את החציון בסיבוכיות לא נכון 7החציון לא נמצא במקום ספציפי בערימה ולכן כדי למצוא אותו יש לעבור על כל הערכים בערימה ולהשוות ביניהם7 ב 7נתונה נוסחת הנסיגה הבאה: ) ( ,אזי נכון 7לפי החלק השלישי של משפט המאסטר -שני התנאים מתקיימים7 ג7 נתונה טבלת :hash . 1 2 3 9 7 6 43 97 74 34 7. אם פונקציית ה hash-המשמשת להכנסת האיברים היא h(x)=x mod 7והטיפול בהתנגשויות מתבצע בשיטת ה- linear probingאזי 74הוכנס לטבלה אחרי 97ולפני 34בוודאות( 7ניתן להניח כי לא בוצעו מחיקות של ערכים מהטבלה) נכון 34 7צריך היה להיכנס לתא ,4מכיוון שהוא בתא 74 ,7נכנס לפניו 74 7צריך היה להיכנס לתא ,3מכיוון שהוא בתא 9אזי ש 97-מוקם לפניו בתא 73 ד 7ניתן למיין Kמספרים בזמן ע"י הכנסתם לעץ חיפוש בינארי וביצוע סריקת inorderשמחזירה אותם ממוינים לא נכון .הכנסה לעץ חיפוש בינארי לא מאוזן יכולה להתבצע במקרה הגרוע בסיבוכיות של לעשות הכנסות כאלו ,במקרה הגרוע נקבל 7מכיוון שיש 7לכן רק בהכנסות (עדיין לפני הסריקה) הסיבוכיות גבוהה יותר7 ה 7אם נמיין את הסדרה .1,.,2,.7,.4באמצעות מיון מיזוג ( )merge sortואת הסדרה 93,3.,21,71,7.באמצעות מיון ערימה ( )heap sortאז זמן הריצה בפועל יהיה זהה לא נכון .אמנם שני המיונים הללו מבוססי השוואות ולכן אין משמעות לערך המפתחות אלא רק ליחסים ביניהם, ושתי הסדרות לעיל מקיימות את אותו סדר היחס בין כל המפתחות אבל מכיוון שאלו מיונים שונים מס' הפעולות בפועל יהיה שונה 7אם הינו מריצים את שני הקלטים הללו באותו מיון אז זמן הריצה היה זהה7 עמוד 2מתוך 9 שאלה 02( 0נקודות) פיפ"א מעוניינת לנהל מידע אודות הנבחרות המשתתפות במונדיאל 721.9לכל נבחרת יש להחזיק מבנה נתונים נפרד (אך זהה לכל הנבחרות) המכיל את הנתונים אודות שחקני הנבחרת ,הניחו כי בכל נבחרת סדר גודל של nשחקנים 7לכל שחקן תיפתח רשומה הכוללת את השדות הבאים :שם השחקן ,מספר השחקן ,מס' הגולים שהבקיע במהלך הטורניר, מס' הדקות ששיחק במצטבר ומס' עבירות 7על מבנה הנתונים לאחסן שדות מהצורה (Name, number, goals, ) total_time, foulsולתמוך בפעולות הבאות: תיאור פעולה )Insert_player (Name, number, goals, total_time, fouls סיבוכיות נדרשת הכנסת שחקן חדש 7שחקן יכנס למבנה )O(log n הנתונים לראשונה רק כאשר הוא משחק בפועל ,אין הוצאה של שחקן7 Update_player (Name, number, add_goals, add_time, )add_fouls עדכון נתוני שחקן7 )O(log n לדוגמה הפעולה: )Update_player (Name,.1,2 , 67, 1 תוסיף לשחקן Nameשמספרו ,.1שני גולים 67 ,דקות משחק ו 1-עבירות )( Top_Scorer החזרת מלך השערים של הנבחרת )O(1 להלן דוגמה לשמות שחקני נבחרות יוון :דימיטריס סלפינגידיס ,דימיטריס פאפאדופולוס ,אברם פאפאדופולוס ,סוקראטיס פאפסטאטופולוס רוסיה -ואסילי ברזוצקי ,אלכסיי ברזוצקי ,אלכסיי יונוב7 הולנד -ג'ונתן דה גוזמן ,נייג'ל דה יונג ,סטפן דה פריי7 א 7מבנה נתונים מבוסס Hash-Tableבשיטת השרשור ,עם שמות השחקנים כמפתחות יכול להיות בעייתי במימוש מכיוון ש( :הקיפו את התשובה הנכונה) ( 9נק') ).התפלגות המפתחות (הפיזור שלהן) ב Hash-Table-של כל נבחרת כנראה לא תהיה אחידה )2 בחלק מהנבחרות ישנם שמות ארוכים מידי מכדי להכניס אותם לHash-Table- )3 שני שחקנים עם שם פרטי או שם משפחה דומה ישורשרו בוודאות לאותו התא בHash-Table- )9 לרוב התאים בטבלה יגובבו הרבה שחקנים ב 7הציעו מבנה הנתונים יעיל ,העומד בדרישות הסיבוכיות לניהול המידע 7( 7נק') ג7 עבור כל אחת מהפעולות תארו כיצד היא תתבצע (תיאור רעיון כללי ,אין צורך בפסאודו-קוד) והראו כי היא עומדת בסיבוכיות הנדרשת .1( .נק') ד 7פיפ"א מבקשת את היכולת להפיק את רשימת kהמבקיעים המצטיינים של הטורניר עד כה בסיבוכיות (הניחו 7)k<nהסבירו כיצד ניתן לעשות זאת מבלי לפגוע בסיבוכיות של הפעולות שתיארתם בסעיף ג' 6( 7נק') עמוד 3מתוך 9 א 7התשובה היא 7.הסבר Hash-Table :מניח התפלגות אחידה של המפתחות 7מכיוון שהשמות של שחקני כל נבחרת דומים זה לזה ,קשה ליצור Hash-Tableאחיד לכל הנבחרות שבו המפתחות יתפלגו בצורה אחידה 7התוצאה תהיה כניסה של הרבה מפתחות לאותו התא והסתברות גבוהה יותר לקבלת סיבוכיות על כל פעולה7 ב 7ניתן להשתמש בעץ אדום שחור -פעולת הכנסה ועדכון תיעשה ב- ,כדי למצוא את מלך השערים נשמור משתנה נוסף שיחזיק את השם של מלך השערים הנוכחי ומס' השערים שלו 7בכל עדכון מספר שערים של שחקן מסויים ,נשווה אותו למלך השערים ובמידת הצורך נעדכן 7הדבר אפשרי מכיוון שאין מחיקת שחקנים או שערים ולכן עדכון של מלך השערים יעשה רק בהכנסת שחקן חדש או בעדכון מס' שערים של שחקן 7אפשרות נוספת היא להחזיק ערימת מקסימום ,עם מספר השערים כמפתחות, בנפרד לעץ אדום שחור ולחבר במצביעים בין כל שחקן בעץ אדום שחור למס' השערים שלו בערימה7 (רעיון נכון אך יותר בזבזני מבחינת זכרון) ג 7הכנסת שחקן חדש -פעולת insertרגילה בעץ אדום שחור ,המפתחות יהיו מספרי השחקן (זה מפתח ייחודי כיוון שקיים עץ נפרד לכל נבחרת) 7כמו כן נשווה את מס' הגולים של השחקן למשתנה מלך השערים ונעדכן אותו במידת הצורך7 עדכון נתוני שחקן -פעולת searchרגילה בעץ אדום שחור ,עדכון הפרטים של הרשומה 7במקרה של שינוי מס' השערים ,השוואה עם המשתנה המחזיק את מס' השערים ושם השחקן ובמידת הצורך החלפה שלו7 מלך השערים -החזרה של שם השחקן מרשומת מלך השערים7 ד 7ניתן להחזיק ערימת מינימום בגודל ,לפי המפתחות של מספר השערים 7בכל פעם שמעדכנים מספר הבקעות לשחקן מסוים נבדוק תחילה האם הוא נמצא בערימת המינימום (משתנה שיהיה לכל רשומה, כל שחקן בערימה יהיה מקושר במצביע מהעץ שלו) ,במידה ולא -נשווה את מספר השערים שלו עם ראש הערימה ב- ובמידת הצורך נחליף ביניהם ב- מספר השערים שלו בערימה ב- ונוציא אותם- 7במידה והוא קיים ברשימה ,נעדכן את 7על מנת להפיק את הרשימה נעבור על כל הרשומות בערימה (אין דרישה להחזיר רשימה ממויינת)7 עמוד 4מתוך 9 שאלה 08( 3נקודות) מפעל מעוניין להחליט לגבי מדיניות תחזוקה עבור nחודשים למכונה חדשה שרכש 7ההחלטה שיש לקבל היא באלו חודשים לבצע תחזוקה למכונה (בכל חודש ניתן לבצע או לא לבצע תחזוקה) 7עלות התחזוקה בכל חודש תלויה בשני גורמים: החודש בו מבוצעת התחזוקה (בכל חודש תעריף שונה)7 הזמן שעבר ממועד התחזוקה האחרונה7 נתונה מטריצה Aבגודל של המטריצה (שורה עמודה ) ,תופיע המכילה את עלויות התחזוקה 7באיבר עלות התחזוקה בחודש כאשר פעולת התחזוקה הקודמת (האחרונה) בוצעה בחודש ( 7עבור העלות היא אינסוף) ,הניחו כי בחודש הראשון (חודש ).ובחודש האחרון (חודש )nחייבת להתבצע פעולת תחזוקה ושעלות התחזוקה בחודש .היא 7c דוגמה עבור 9חודשים: 4 ∞ ∞ ∞ ∞ 2 ∞ ∞ 120 250 3 ∞ ∞ ∞ 130 אם תבוצע תחזוקה בחודשים .,2,9העלות תהיה: 1 ∞ 100 150 300 1 2 3 4 ואם תבוצע תחזוקה בחודשים .,3,9העלות תהיה: נסתכל על תת בעיה של הבעיה הגדולה באופן הבא: לכל בין .ל n-נגדיר את להיות העלות המינימלית לתחזוקה עד לתקופה ( ,כולל תחזוקה בתקופה )7 א 7הציגו את נוסחת הרקורסיה המתאימה לבעיה (כלומר כיצד ניתן לעבור מתת בעיה לבעיה גדולה יותר?) התייחסו למקרה הבסיס וכתבו תיאור מילולי קצר של הנוסחה 4( 7נק') ב 7ממשו בפסאודו-קוד או בפייטון פונקציית תכנות דינמי: המוצאת את העלות הזולה ביותר לתחזוקת המכונה עבור nתקופות (אין צורך למצוא את התקופות בהן תתבצע תחזוקה אלא רק את העלות) ( 1נק') ג7 הראו חסם עליון הדוק ככל האפשר לפונק' שמימשתם בסעיף ב' 7( 7נק') ד 7כיצד תשתנה נוסחת הרקורסיה אם קיימת מגבלה על תחזוקה בשתי תקופות עוקבות כלומר לא ניתן לבצע תחזוקה גם בתקופה וגם בתקופה ? ( 6נק') עמוד 5מתוך 9 7נגדיר את א7 להיות עלות התחזוקה הזולה ביותר של המכונה מתקופה .ועד תקופה ,כאשר מבצעים תחזוקה בתקופה 7עבור כל נצטרך למצוא את ה -אשר מביא לעלות המינימלית הכוללת של התחזוקה כאשר מוגדר להיות התקופה האחרונה שבה ביצענו תחזוקה לפני תקופה 7 , מקרה בסיס- 7 נחפש את ב7 # bottom-up solution )cost(A,n # create list M = [0]*n M[0]=C # fill the list for i in range(1, n): = min for t in range(0, i-1): If M[t]+A[i,t] < min: ]min = M[t]+A[i,t M[i] = min ]return M[n ג 7האלגוריתם עובר בלולאה על כל הערכים של כל הערכים האפשריים של סיבוכיות של ובתוך הלולאה ישנה לולאה נוספת העוברת על 7חישוב כל ערך בתוך הלולאה הפנימית הוא ולכן נקבל 7 7השינוי היחיד הוא שנגביל את tלרוץ על כל התקופות האפשריות ד7 פרט לתקופה שלפני ( iולכן ירוץ עד ) עמוד 6מתוך 9 שאלה 02( 4נקודות) לשימושכם ,בסוף הטופס נתונים DIJKSTRA,BFS,DFS א 7נתון גרף לא מכוון עם משקלים חיוביים על הקשתות ,ונתונים צומת תארו אלגוריתם (תיאור מילולי בלבד) המוצא מסלול מ -ל -כך ש- 7 ,ושני צמתים הוא מינימלי מבין כל המסלולים העוברים בצומת 7מהי סיבוכיות האלגוריתם שהצעתם? ( .נק') ב 7נתון גרף צמתים לא מכוון עם משקלים חיוביים על הקשתות ,ונתונה תת קבוצה של צמתים 7תארו אלגוריתם (תיאור מילולי בלבד) המוצא מסלול מ -ל -כך ש- ,ושני הוא מינימלי מבין כל המסלולים העוברים בצומת אחד לפחות מתוך 7מהי סיבוכיות האלגוריתם שהצעתם? ( .1נק') ג7 , עבור גרף קשיר | | התקבלו בהרצת BFSו DFS -הפלטים הבאים (יש לקרוא משמאל לימין): BFS: 1,2,3,5,4,6 DFS: 1,2,4,3,5,6 סמנו את כל הטענות הנכונות (תיתכן יותר מטענה אחת נכונה) .1(:נק') ). ,בוודאות )2 ,בוודאות )3ייתכן ש- )9ייתכן ש- )7 ,בוודאות בהצלחה!!! עמוד 7מתוך 9 א7 נפעיל את האלגוריתם של דייקסטרה עבור צומת התחלה 7האלגוריתם יתן לנו את המסלול הקצר מ- ל- וגם את המסלול הקצר מ -ל 7 -מכיוון שהגרף לא מכוון ,חיבור של שני המסלולים הללו יתן לנו חייב להכיל את המסלול הקצר ביותר עד ל- את המסלול המבוקש 7המסלול הקצר ביותר שמכיל את ומ -עד הסוף ,אחרת ,ניתן להחליף את המסלול בחיבור שני המסלולים הללו שיהיו קצרים בהכרח7 | | הסיבוכיות היא סיבוכיות אלגוריתם דייקסטרה| | : | | 7 דרך נוספת ,נמצא את המסלול הקצר מ -ל -ואת המסלול הקצר מ -ל -בעזרת אלגוריתם דייקסטרה ונחבר בין המסלולים הללו 7מכיוון שמבצעים רק פעמיים דייקסטרה הסיבוכיות זהה והיא | | ב7 | | | | 7 נפעיל פעמיים דייקסטרה :פעם אחת עם צומת התחלה ופעם שניה עם צומת התחלה 7נעבור על התוצאות באופן הבא: נחבר את המסלול הקצר ביותר מצומת לצומת כלשהו מהקבוצה למסלול הקצר ביותר מצומת לצומת זה 7כך נבצע עבור כל הקודקודים בקבוצה 7נשמור משתנה מינימום ובכל פעם נשווה את התוצאה הנוכחית אליו 7המשתנה יחזיק את המסלול עם המשקל הכי נמוך שמצאנו עד כה7 סיבוכיות :פעמיים דייקסטרה ,מעבר על כל המסלולים הקצרים העוברים דרך קודקוד ב- ביניהם| | : | | | | והשוואה | | דרך נוספת (פחות יעילה ,אך קיבלה את מלוא הניקוד) : נבחר צומת ,ונפעיל את האלגוריתם מסעיף א' 7לאחר מכן נבחר צומת אחר מ -ונחזור על הפעולה עד שנעבור על כל הצמתים האפשריים 7מכיוון שמבצעים | | פעמים דייקסטרה ,הסיבוכיות היא| | : ג7 | | | | | | 7 טענה .נכונה -לפי BFSצמתים .ו 2-חייבים להיות שכנים (מכיוון שהגרף כולו קשיר)7 טענה 2לא נכונה ,דוגמה: 1 5 2 3 4 6 טענה 3נכונה ,אותה דוגמה כמו בטענה 72 טענה 9נכונה ,דוגמה: 1 5 3 6 טענה 7לא נכונה ,אותן דוגמאות7 עמוד 8מתוך 9 2 4 BFS(G,v) for every vertex x in V visited[x] FALSE print(v) visited[v] TRUE ENQUEUE(v,Q) while (not EMPTY(Q)) x DEQUEUE(Q) for every neighbor y of x if (not visited [y]) print(y) visited[y] TRUE ENQUEUE(y,Q) DFS(G) for each vertex u do color[u] white for each vertex u do if color[u]= = white VISIT(u) VISIT(u) color[u]gray print(u) for each v adj to u do if color[v]= =white VISIT(v) color[u] Black Dijkstra (G) for each v V d[v] d[s]=0 Q=v while ( // מכל הקודקודים בגרףQ בניית ערימה ) for each v adj to u if (d[v]>d[u]+w(u,v)) d[v]=d[u]+w(u,v) 9 מתוך9 עמוד הפקולטה להנדסה המחלקה להנדסת תעשייה סמסטר ב' תשע"ב בחינת מעבר מועד ב' משך הבחינה 3 :שעות ת.ז_______________ . מבחן בקורס "מבני נתונים" 1750-0101 מרצה :רעות נוחם מתרגלת :נגה לוי - זהו מבחן חסוי .אין להעתיק את השאלות למחברת הבחינה ,עם סיום הבחינה יש להחזיר את טופס הבחינה עם מחברת הבחינה. - חומר עזר 2 :דפים כתובים ומחשבון. - נא להקפיד על כתב יד ברור - נא להקפיד על תשובות קצרות ובהירות (יתכן מצב שבו המוסיף גורע) - במהלך הבחינה יענו שאלות הבהרה המתייחסות לטופס הבחינה בלבד - יש לענות על כל השאלות 0-4 - אסורה אחזקת טלפונים סלולאריים ,וכל מכשיר אלקטרוני אחר בקרבת מקום. בהצלחה כל הזכויות שמורות © מבלי לפגוע באמור לעיל ,אין להעתיק ,לצלם ,להקליט ,לשדר ,לאחסן מאגר מידע ,בכל דרך שהיא ,בין מכנית ובין אלקטרונית או בכל דרך אחרת כל חלק שהוא מטופס הבחינה. 1 שאלה 25( 1נקודות) ענה נכון/לא נכון לגבי כל אחד מהמשפטים הבאים ,והסבר ב 3 -שורות לכל היותר את תשובתך .נקודה תינתן עבור תשובה נכונה ועוד ארבע נקודות עבור הסבר מלא .תשובה לא נכונה עשויה לזכות בניקוד חלקי אם ההסבר מעיד על הבנת הנקודה .אם לדעתך המשפט נכון רק במקרים מסוימים ,פרט באילו מקרים .יש לענות על שאלה זו בטופס הבחינה ,במקום המיועד. א .אם נפעיל את אלגוריתם המיון InsertionSortפעם אחת עבור הקלט 05,6,16,47,32 :ופעם נוספת עבור הקלט: 5,2,27,01,03זמן הריצה בפועל בשני המקרים יהיה זהה _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ ב .בכדי למצוא את המסלול הקצר ביותר בגרף ממושקל בו משקלי כל הקשתות זהים אלגוריתם BFSעדיף על אלגוריתם Dijkstra _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ ג. ) ( נתון ) ( אזי ) ) ( ( _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ ד .נתונה טבלת :hash 9 39 1 5 6 7 3 4 43 77 2 0 1 09 אם פונקצית ה hash-המשמשת להכנסת האיברים היא ,h(x)=x mod 10הטיפול בהתנגשויות מתבצע בשיטת ה- linear probingוידוע כי לא בוצעה אף פעולת מחיקה מהטבלה אז ניתן לומר בודאות כי הערך 09הוכנס לטבלה לפני הערך .39 _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ ה .בגרף ממושקל Gשיש בו צלע vאשר משקלה גדול ממשקלה של כל צלע אחרת ב ,G-מתקיים ש v-אינה שייכת לעץ המסלולים הקצרים (.)SPT=shortest path tree _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ 2 שאלה 27( 2נקודות) א. בנה עץ חיפוש בינארי אשר גובהו קטן שווה ל ,4 -מהמפתחות הבאים 7( 11,20,25,50,52,65,71 :נק') ב. ידוע כי הפלט הבא התקבל משיטוט ב postorder -בעץ חיפוש בינארי .שחזר את העץ המקורי על סמך הפלט: ( 0,6,7,1,5,2,01,09,05,07,9אם קיימות מס' אפשרויות הצג אחת מהן בלבד) ( 6נק') ג. (סעיף זה אינו תלוי בסעיפים הקודמים) סטודנטים נרשמים לאוניברסיטה ע"י מילוי טפסים מקוונים באינטרנט. ניתן להניח כי מספר הנרשמים מאפשר לאחסן את כל הטפסים בזכרון. )0הצע מבנה נתונים שיאפשר למרכז המרשם לטפל בטפסי ההרשמה ע"פ סדר יורד של ציון הסכם ,כאשר זמן הגישה לטופס של המועמד בעל ציון הסכם הגבוה ביותר הוא ) .O(1מה יהיה זמן ההכנסה של טופס בקשה חדש? מהו זמן מחיקת טופס בקשה שכבר טופל? נמק תשובתך 1( .נק') )2האוניברסיטה החליטה לטפל בנרשמים לפי פקולטה ולתת עדיפות שונה לכל פקולטה .סדר העדיפות בתוך כל פקולטה נשאר כשהיה (כלומר בסדר יורד ע"פ ציון הסכם) .הצע מבנה נתונים שיאפשר למרכז למרשם לגשת בזמן ) O(1אל הטופס הבא בקבוצת הנרשמים למחלקה בעלת העדיפות הגבוהה ביותר( .הנח כי קבוצת המחלקות היא דינאמית כלומר מוציאים ומוסיפים מחלקות לטיפול) ( 1נק') שאלה 22( 3נקודות) (הערה :סעיפי השאלה אינם תלויים זו בזה) א .בהינתן סדר הסריקה הבא של BFSעל גרף קשיר ( Gמשמאל לימין) s,a,b,c,d,e,f,h,i,k :בכל אחד מהסעיפים יש לצייר גרף Gכך שיקיים את התנאים הבאים 01( :נק') .i Gהוא גרף לא מכוון ,דרגת sהיא 0ודרגת bהיא .1 .ii Gלא מכוון ודרגת כל הצמתים היא 2 יש להניח שרשימת השכנויות של הגרף Gממוינת בסדר אלפביתי (כלומר סדר סריקת הקודקודים הסמוכים לקודקוד הנתון הוא סדר אלפביתי) נתון גרף ) G(V,Eעם קודקוד התחלה Sומשקלי קשתות אי שליליים. ב .הצע דרך (תוך שימוש באחד או יותר מהאלגוריתמים שנלמדו בכיתה) לבדוק האם קיים קודקוד כלשהו בגרף G אשר משקל המסלול הקל ביותר מ S-אליו שווה ל X-עבור Xחיובי כלשהו .מהי סיבוכיות האלגוריתם המוצע1( . נק') ג. לאחר הרצה של אלגוריתם Dijkstraהתקבל הפלט הבא: - לכל קודקוד בגרף (ובפרט לקודקוד הסיום )tידוע משקל המסלול הקל ביותר מקודקוד Sאליו. - ידוע המסלול הקל ביותר מ S-ל(.t-כלומר אוסף הקודקודים והסדר שלהם במסלול) "קודקוד אמצע הדרך" הוא קודקוד העונה על התנאים הבאים: )0הקודקוד הוא חלק מהמסלול הקל ביותר בין Sל.t- )2משקל המסלול הקל ביותר מקודקוד Sאליו שווה למשקל המסלול הקל ממנו לקודוקוד .t תאר אלגוריתם (תיאור מילולי בלבד) אשר זמן הריצה שלו הוא לכל היותר ) O(nהבודק האם קיים "קודקוד אמצע הדרך" בגרף .הסבר במילים את נכונות האלגוריתם שהצעתם ונמק מדוע הוא עומד בסיבוכיות הנדרשת 01( .נק') 3 שאלה 20( 4נקודות) "שידוך" בגרף ) G = (V, Eהינו קבוצת קשתות Mכך שאין שתי קשתות ב M-שחולקות צומת קצה. לדוגמה עבור הגרף הבא: B A D F C E שידוך אפשרי הוא( M={(A,B),(C,D),(E,F){:איור )0שידוך בלתי אפשרי הוא {)( M={(A,B),(A,D),(C,Eאיור )2מכיוון שהקשתות ) (A,Bו (A,D)-חולקות את אותו צומת קצה .A B B A C D F A D E C F איור 0 E איור 2 בשאלה זו עליך להציע אלגוריתם תכנות דינאמי המוצא שידוך מקסימום בעץ )( .T = (V, Eשידוך מקסימום= פתרון המשדך בין כמה שיותר זוגות צמתים בעץ ,שים לב העץ אינו חייב להיות בינארי) .לכל צומת vמתקיים :או שהצומת משודך בדיוק לאחד מבניו ,או שלא. א .להלן נוסחאות רקורסיבית( ) : לאחד מבניו ,ו( ) - לחישוב השידוך המקסימלי בתת-העץ המושרש ב v-כאשר vאינו משודך כאשר vמשודך לאחד מבניו. }) ( }}) ( ) ( { ) (∑ ) ( { ) ( { ) ) (∑ ( ) ( ) ( הסבר במילים את הנוסחאות וכיצד ניתן לקבל באמצעותן את השידוך המקסימלי בעץ כולו 1( .נק') ב .מהו זמן הריצה של האלגוריתם על עץ עם nצמתים? ( 7נק') ג. כתוב פסאודו-קוד או קוד בפייטון (לבחירתך) המחשב את השידוך המקסימלי בעץ.max_match(T) , לשם כך ,הנח כי Tהוא מצביע לשורש העץ (בפייתון – משתנה מסוג ,)Nodeוכי כל צומת מכיל רשימה sonsשל מצביעים לבניו (בעלים הרשימה ריקה) 5(.נק') 4 הפקולטה להנדסה המחלקה להנדסת תעשייה סמסטר ב' תשע"ב בחינת מעבר מועד ב' משך הבחינה 3 :שעות ת.ז_______________ . מבחן בקורס "מבני נתונים" 1750-0101 מרצה :רעות נוחם מתרגלת :נגה לוי - זהו מבחן חסוי .אין להעתיק את השאלות למחברת הבחינה ,עם סיום הבחינה יש להחזיר את טופס הבחינה עם מחברת הבחינה. - חומר עזר 2 :דפים כתובים ומחשבון. - נא להקפיד על כתב יד ברור - נא להקפיד על תשובות קצרות ובהירות (יתכן מצב שבו המוסיף גורע) - במהלך הבחינה יענו שאלות הבהרה המתייחסות לטופס הבחינה בלבד - יש לענות על כל השאלות 0-4 - אסורה אחזקת טלפונים סלולאריים ,וכל מכשיר אלקטרוני אחר בקרבת מקום. בהצלחה כל הזכויות שמורות © מבלי לפגוע באמור לעיל ,אין להעתיק ,לצלם ,להקליט ,לשדר ,לאחסן מאגר מידע ,בכל דרך שהיא ,בין מכנית ובין אלקטרונית או בכל דרך אחרת כל חלק שהוא מטופס הבחינה. 1 שאלה 25( 1נקודות) ענה נכון/לא נכון לגבי כל אחד מהמשפטים הבאים ,והסבר ב 3 -שורות לכל היותר את תשובתך .נקודה תינתן עבור תשובה נכונה ועוד ארבע נקודות עבור הסבר מלא .תשובה לא נכונה עשויה לזכות בניקוד חלקי אם ההסבר מעיד על הבנת הנקודה .אם לדעתך המשפט נכון רק במקרים מסוימים ,פרט באילו מקרים .יש לענות על שאלה זו בטופס הבחינה ,במקום המיועד. א .אם נפעיל את אלגוריתם המיון InsertionSortפעם אחת עבור הקלט 05,6,16,47,32 :ופעם נוספת עבור הקלט: 5,2,27,01,03זמן הריצה בפועל בשני המקרים יהיה זהה נכון .זהו מיון מבוסס השוואות ויחס הסדר בין הקלטים זהה. ב .בכדי למצוא את המסלול הקצר ביותר בגרף ממושקל בו משקלי כל הקשתות זהים אלגוריתם BFSעדיף על אלגוריתם Dijkstra נכון .מספיק למצוא את המסלול עם מס' הקשתות המינימלי ג. ) ( נתון ) ( אזי ) ) ( ( לא נכון .לפי המקרה השלישי של משפט המסטר ) ) ( ( ד .נתונה טבלת :hash 9 1 5 6 39 7 3 4 77 2 0 43 1 09 אם פונקצית ה hash-המשמשת להכנסת האיברים היא ,h(x)=x mod 10הטיפול בהתנגשויות מתבצע בשיטת ה- linear probingוידוע כי לא בוצעה אף פעולת מחיקה מהטבלה אז ניתן לומר בודאות כי הערך 09הוכנס לטבלה לפני הערך .39 לא נכון 11 ,הוכנס בוודאות אחרי 91 ה .בגרף ממושקל Gשיש בו צלע vאשר משקלה גדול ממשקלה של כל צלע אחרת ב ,G-מתקיים ש v-אינה שייכת לעץ המסלולים הקצרים (.)SPT=shortest path tree לא נכון ,יתכן שזו הקשת היחידה המחברת בין 2צלעות. שאלה 27( 2נקודות) א. בנה עץ חיפוש בינארי אשר גובהו קטן שווה ל ,4 -מהמפתחות הבאים 7( 11,20,25,50,52,65,71 :נק') ב. ידוע כי הפלט הבא התקבל משיטוט ב postorder -בעץ חיפוש בינארי .שחזר את העץ המקורי על סמך הפלט: ( 0,6,7,1,5,2,01,09,05,07,9אם קיימות מס' אפשרויות הצג אחת מהן בלבד) ( 6נק') ג. (סעיף זה אינו תלוי בסעיפים הקודמים) סטודנטים נרשמים לאוניברסיטה ע"י מילוי טפסים מקוונים באינטרנט. ניתן להניח כי מספר הנרשמים מאפשר לאחסן את כל הטפסים בזכרון. )0הצע מבנה נתונים שיאפשר למרכז המרשם לטפל בטפסי ההרשמה ע"פ סדר יורד של ציון הסכם ,כאשר זמן הגישה לטופס של המועמד בעל ציון הסכם הגבוה ביותר הוא ) .O(1מה יהיה זמן ההכנסה של טופס בקשה חדש? מהו זמן מחיקת טופס בקשה שכבר טופל? נמק תשובתך 1( .נק') )2האוניברסיטה החליטה לטפל בנרשמים לפי פקולטה ולתת עדיפות שונה לכל פקולטה .סדר העדיפות בתוך כל פקולטה נשאר כשהיה (כלומר בסדר יורד ע"פ ציון הסכם) .הצע מבנה נתונים שיאפשר למרכז למרשם לגשת בזמן ) O(1אל הטופס הבא בקבוצת הנרשמים למחלקה בעלת העדיפות הגבוהה ביותר( .הנח כי קבוצת המחלקות היא דינאמית כלומר מוציאים ומוסיפים מחלקות לטיפול) ( 1נק') 2 פתרון שאלה 2 א .פתרון אפשרי (לא יחיד): 50 0 20 0 52 0 47 25 11 55 0 9 ב. 2 15 14 4 19 1 11 ג. 1 5 5 )0נשתמש בערימת מקסימום .הגישה לשורש היא ) o(1הכנסת טופס חדש ומחיקת טופס קיים יהיו )O(log n )2נשתמש בערימה של ערימות .הערימה הראשית תסודר לפי העדיפות של כל פקולטה ,כל פקולטה תחזיק את המועמדים שלה בערימת מקסימות לפי ציון הסכם. שאלה 28( 3נקודות) (הערה :סעיפי השאלה אינם תלויים זו בזה) א .בהינתן סדר הסריקה הבא של BFSעל גרף קשיר ( Gמשמאל לימין) s,a,b,c,d,e,f,h,i,kבכל אחד מהסעיפים יש לצייר גרף Gכך שיקיים את התנאים הבאים 01( :נק') .i Gהוא גרף לא מכוון ,דרגת sהיא 0ודרגת bהיא .1 .ii Gלא מכוון ודרגת כל הצמתים היא 2 יש להניח שרשימת השכנויות של הגרף Gממוינת בסדר אלפביתי (כלומר סדר סריקת הקודקודים הסמוכים לקודקוד הנתון הוא סדר אלפביתי) נתון גרף ) G(V,Eעם קודקוד התחלה Sומשקלי קשתות אי שליליים. ב .הצע דרך (תוך שימוש באחד או יותר מהאלגוריתמים שנלמדו בכיתה) לבדוק האם קיים קודקוד כלשהו בגרף G אשר משקל המסלול הקל ביותר מ S-אליו שווה ל X-עבור Xחיובי כלשהו .מהי סיבוכיות האלגוריתם המוצע1( . נק') ג. לאחר הרצה של אלגוריתם Dijkstraהתקבל הפלט הבא: - לכל קודקוד בגרף (ובפרט לקודקוד הסיום )tידוע משקל המסלול הקל ביותר מקודקוד Sאליו. - ידוע המסלול הקל ביותר מ S-ל(.t-כלומר אוסף הקודקודים והסדר שלהם במסלול) "קודקוד אמצע הדרך" הוא קודקוד העונה על התנאים הבאים: 3 )0הקודקוד הוא חלק מהמסלול הקל ביותר בין Sל.t- )2משקל המסלול הקל ביותר מקודקוד Sאליו שווה למשקל המסלול הקל ממנו לקודוקוד .t תאר אלגוריתם (תיאור מילולי בלבד) אשר זמן הריצה שלו הוא לכל היותר ) O(nהבודק האם קיים "קודקוד אמצע הדרך" בגרף .הסבירו במילים את נכונות האלגוריתם שהצעתם ונמקו מדוע הוא עומד בסיבוכיות הנדרשת. ( 01נק') פתרון שאלה 3 s א. s .i .ii a a c c b k d i e f b d e f h i h k ב .נפעיל Dijkstraונקבל לכל קודקוד את משקל המסלול הקל ביותר אליו .אם נקבל קודקוד שהמשקל אליו שווה ל X-בסוף ההרצה מצאנו .בכל פעם שנעביר קודקוד מ T -ל P-נשווה את הערך של המסלול הקל אליו ל x-אם מצאנו אפשר לעצור ולהחזיר trueאם סיימנו ולא מצאנו אז .falseזה לא משנה את הסיבוכיות של Dijkstraולכן הסיבוכיות הכללית היא )).o(log n (m+n ג .נעבור קודקוד קודקוד במסלול הקל ביותר ונבדוק האם ערך המסלול אליו שווה למחצית משקל המסלול הקל היותר ל .t-אורך המק"ב הוא לכל היותר nולכן נעבור לכל היותר על nקודקודים. שאלה 22( 4נקודות) "שידוך" בגרף ) G = (V, Eהינו קבוצת קשתות Mכך שאין שתי קשתות ב M-שחולקות צומת קצה. לדוגמה עבור הגרף הבא: B A D F C E שידוך אפשרי הוא( M={(A,B),(C,D),(E,F){:איור )0שידוך בלתי אפשרי הוא {)( M={(A,B),(A,D),(C,Eאיור )2מכיוון שהקשתות ) (A,Bו (A,D)-חולקות את אותו צומת קצה .A B B A D F C E A D F C 7 E בשאלה זו עליך להציע אלגוריתם תכנות דינאמי המוצא שידוך מקסימום בעץ )( .T = (V, Eשידוך מקסימום= פתרון המשדך בין כמה שיותר זוגות צמתים בעץ) .לכל צומת vמתקיים :או שהצומת משודך בדיוק לאחד מבניו ,או שלא. א .להלן נוסחאות רקורסיבית ) c-(vלחישוב השידוך המקסימלי בתת-העץ המושרש ב v-כאשר vאינו משודך אחד מבניו ,ונוסחא רקורסיבית ) c+(vכאשר vמשודך לאחד מבניו. }) ( ) ( { }}) ( ) (∑ ) ( { ) ( { ) ) (∑ ( ) ( ) ( הסבר במילים את הנוסחאות וכיצד ניתן לקבל באמצעותן את השידוך המקסימלי בעץ כולו 1( .נק') ב .מהו זמן הריצה של האלגוריתם על עץ עם nצמתים? ( 7נק') ג. כתוב פסאודו-קוד או קוד בפייטון (לבחירתך) המחשב את השידוך המקסימלי בעץ.max_match(T) , לשם כך ,הניח כי Tהוא מצביע לשורש העץ (בפייתון – משתנה מסוג ,)Nodeוכי כל צומת מכיל רשימה sonsשל מצביעים לבניו (בעלים הרשימה ריקה) 5(.נק') פתרון שאלה 4 - + - א .הסבר c (v) :הוא סכום של המקסימום בין ) c (vל c (v) -מעל הבנים של .v לחישוב ) c+(vיש להחליט למי מהבנים ' uמשדכים את .vעבור הבן המשודך ל v-לוקחים את )' c-(uועבור שאר הבנים לוקחים את המקסימום בין ) c-(vל .c+(v)-על מנת להחליט מיהו ' ,uנבחר בבן שממקסם את הביטוי. בגלל תת-המבנה האופטימלי של הבעיה ,אנחנו עוברים כך על כל השידוכים האפשריים. ב. חישוב ) c-(vלינארי בדרגה של .v חישוב ) – c+(vנחשב עבור כל אחד מהבנים את ה סטיה מ c-(v)-ב.O(1)- קיבלנו שלכל צומת vזמן הריצה הוא )) O(deg(vובסה"כ )( O(E) = O(Vזהו עץ). ג. כתוב פסאודו-קוד או קוד בפייטון (לבחירתך) המחשב את השידוך המקסימלי בעץ.max_match(T) , לשם כך ,הניח כי Tהוא מצביע לשורש העץ (בפייתון – משתנה מסוג ,)Nodeוכי כל צומת מכיל רשימה sonsשל מצביעים לבניו (בעלים הרשימה ריקה) 1(.נק') class Node: def __init__(self, sons = []): self.sons = sons self.c_minus_val = None self.c_plus_val = None def add_son(self, son): )self.sons.append(son def max_match(self): ))(return max(self.c_minus(), self.c_plus def c_minus(self): 5 if not(self.c_minus_val): self.c_minus_val = 0 for son in self.sons: self.c_minus_val += max(son.c_plus(), son.c_minus()) return self.c_minus_val def c_plus(self): if not(self.c_plus_val): if len(self.sons) == 0 self.c_plus_val = 0 else: vals][ = for son in self.sons: vals.append(son.c_minus() - max(son.c_plus(), son.c_minus()) self.c_plus_val = 1 + self.c_minus() + max(vals) return self.c_plus_val 5
© Copyright 2024