תרגיל מס` 24 - WordPress.com

‫מכללת אורט כפר‪-‬סבא‬
‫מבני נתונים ויעילות אלגוריתמים‬
‫תרגיל מס' ‪24‬‬
‫פתרו את השאלות הבאות‪ .‬יש לסיים את התרגיל עד יום א' )‪.(1.3‬‬
‫שאלה ‪1‬‬
‫הכרנו מספר אלגוריתמים הפותרים את בעיית המסלול הקצר ביותר‪ :‬סריקה לרוחב )‪,(BFS‬‬
‫דייקסטרה )‪ ,(Dijkstra‬מסלולים קצרים ביותר בגמ"ל )‪ ,(DAG-Shortest-Paths‬בלמן‪-‬פורד‬
‫)‪ .(Bellman-Ford‬עבור כל אחד מהגרפים הבאים‪ ,‬קבע איזה מן האלגוריתמים הנ"ל הוא‬
‫המתאים לו ביותר‪:‬‬
‫א‪ .‬גרף מכוון וממושקל עם משקלים שליליים על הקשתות )אך ללא מעגל שלילי(‪.‬‬
‫ב‪ .‬גרף לא ממושקל‪.‬‬
‫ג‪ .‬גרף מכוון וממושקל שאין בו מעגלים‪.‬‬
‫שאלה ‪2‬‬
‫מממשים עץ חיפוש בינארי מאוזן‪ ,‬כך שכל אחד מהקודקודים מכיל שדה בשם ‪ ,size‬השומר את‬
‫מספר הצמתים בתת‪-‬העץ שקודקוד זה הוא שורשו‪ .‬לדוגמא‪ ,‬נתון עץ החיפוש הבינארי המאוזן‬
‫הבא‪ ,‬והמספר שכתוב לצד כל קודקוד הוא ערך שדה ה‪ size-‬שלו‪:‬‬
‫‪7 4‬‬
‫‪2 3‬‬
‫‪4 7‬‬
‫‪2 10‬‬
‫‪1 5‬‬
‫‪1 1‬‬
‫‪1 18‬‬
‫א‪ .‬נניח שנתון עץ חיפוש בינארי מאוזן‪ ,‬אשר בכל אחד מקודקודיו קיים שדה ‪ ,size‬אולם‬
‫ערכו טרם נקבע‪ .‬תארו פונקציה רקורסיבית המקבלת מצביע לשורש העץ הזה‪ ,‬וממלאת‬
‫את ערכי ה‪ size-‬עבור כל אחד מקודקודיו‪.‬‬
‫ב‪ .‬תארו כיצד ניתן להשתמש במבנה הנתונים המתואר בשאלה זו‪ ,‬על מנת לבצע פעולת סדר‬
‫סטטיסטי על קבוצת נתונים )כלומר‪ :‬על מנת לבצע פעולת ‪ ,Select‬אשר מקבלת מספר ‪,k‬‬
‫ומחזירה את איבר המיקום ה‪ k-‬בקבוצת הנתונים(‪.‬‬
‫‪1‬‬
‫שאלה ‪3‬‬
‫נתון גרף פשוט‪ ,‬קשיר‪ ,‬לא ממושקל ולא מכוון )‪ ,G = (V,E‬ונתונים זוג קודקודים ‪ . s, t ∈ V‬הגרף‬
‫מיוצג בזיכרון המחשב על‪-‬ידי רשימת סמיכוּת )שכנוּת(‪ .‬לפניך אלגוריתם יעיל אשר מחשב את‬
‫אורך המסלול הזוגי הקצר ביותר מ‪ s-‬ל‪.t-‬‬
‫האלגוריתם‪:‬‬
‫צעד ‪:1‬‬
‫נבנה גרף חדש )'‪ ,G' = (V',E‬כאשר‪:‬‬
‫}‪V' = {v1 , v 2 | v ∈ V‬‬
‫}‪E' = {(u 1 , v 2 ), (u 2 , v 1 ) | (u, v) ∈ E‬‬
‫כלומר‪ ,‬עבור כל קודקוד ‪ v‬בקבוצת הקודקודים ‪ V‬של הגרף המקורי ‪ ,G‬ניצור‬
‫בגרף החדש '‪ G‬שני קודקודים‪ ,‬שיסומנו ‪ v1‬ו‪ .v2-‬ועבור כל קשת המחברת בין‬
‫הקודקוד ‪ u‬לקודקוד ‪ v‬בקבוצת הקשתות ‪ E‬של הגרף המקורי ‪ ,G‬ניצור בגרף‬
‫החדש '‪ G‬שתי קשתות – אחת שמחברת בין ‪ u1‬ו‪ ,v2-‬ואחת שמחברת בין ‪ u2‬ו‪.v1-‬‬
‫צעד ‪:2‬‬
‫נריץ את אלגוריתם‬
‫צעד ‪:3‬‬
‫נחזיר את אורך המסלול שהאלגוריתם מצא‪ ,‬המסתיים בצומת ‪.t2‬‬
‫על '‪ G‬החל מהצומת‬
‫)‪(1‬‬
‫)‪(2‬‬
‫‪.‬‬
‫באלגוריתם הנתון חסרים שני ביטויים המסומנים בספרות )‪ .(2)-(1‬התשובה הנכונה בעבור כל‬
‫אחד מהביטויים החסרים מופיעה בסעיפים שלהלן‪:‬‬
‫א‪ .‬התשובה הנכונה עבור ביטוי )‪ (1‬לעיל היא‪:‬‬
‫‪ .1‬סריקה לרוחב )‪(BFS‬‬
‫‪ .2‬פרים )‪(Prim‬‬
‫‪ .3‬דייקסטרה )‪(Dijkstra‬‬
‫‪DAG-SHORTEST-PATHS .4‬‬
‫ב‪ .‬התשובה הנכונה עבור ביטוי )‪ (2‬לעיל היא‪:‬‬
‫‪s 1 .1‬‬
‫‪s 2 .2‬‬
‫‪t 1 .3‬‬
‫‪t 2 .4‬‬
‫‪2‬‬
‫ג‪ .‬סיבוכיות זמן הריצה של האלגוריתם הנתון היא‪:‬‬
‫‪Θ(| V | ⋅log | V |) .1‬‬
‫‪Θ(| E | ⋅log | V |) .2‬‬
‫‪Θ(| V | ⋅ | E |) .3‬‬
‫‪Θ(| V | + | E |) .4‬‬
‫שאלה ‪) 4‬ממבחן של משרד החינוך(‬
‫מגדירים אלגוריתם הנקרא רמה‪-‬בבנים)‪ (T‬המקבל עץ בינארי ‪ .T‬בכל צומת בעץ שני ערכים –‬
‫האחד הוא מספר שלם שהוא ערך הצומת‪ ,‬והאחר מציין את רמת הצומת‪.‬‬
‫האלגוריתם מחזיר 'אמת' אם לכל צומת בעץ‪ ,‬פרט לשורש העץ‪ ,‬מתקיים שערך הצומת הוא הרמה‬
‫של אביו‪ .‬אחרת – האלגוריתם מחזיר 'שקר'‪.‬‬
‫לדוגמא‪ ,‬עבור העץ ‪ T‬הבא יוחזר 'אמת'‪:‬‬
‫כתבו אלגוריתם מילולי המבצע את רמה‪-‬בבנים)‪.(T‬‬
‫‪3‬‬
‫שאלה ‪5‬‬
‫נתון גרף פשוט‪ ,‬ללא מעגלים‪ ,‬קשיר ומכוון )‪ ,G = (V,E‬עם משקלות אי‪-‬שליליים על הקשתות‪,‬‬
‫ונתונים זוג קודקודים ‪ s, t ∈ V‬וקשת ‪ . e ∈ E‬הגרף מיוצג בזיכרון המחשב על‪-‬ידי רשימת‬
‫סמיכוּת )שכנוּת(‪.‬‬
‫כזכור‪ ,‬מגדירים משקל של מסלול בתור סכום המשקלות על הקשתות המהוות את המסלול‪.‬‬
‫מסלול מסוים בין ‪ s‬ל‪ t-‬ייקרא מסלול קל ביותר‪ ,‬אם לא קיים מסלול בין ‪ s‬ל‪ t-‬שמשקלו קטן יותר‬
‫ממשקל מסלול זה‪ .‬בין שני קודקודים יכולים להיות מספר מסלולים קלים ביותר‪.‬‬
‫לפניך אלגוריתם יעיל אשר בודק האם הקשת ‪ e‬נמצאת על כל המסלולים הקלים ביותר מ‪ s-‬ל‪.t-‬‬
‫האלגוריתם‪:‬‬
‫צעד ‪:1‬‬
‫נריץ את אלגוריתם‬
‫‪ x‬את‬
‫צעד ‪:2‬‬
‫)‪(2‬‬
‫ניצור גרף חדש )‬
‫על הגרף ‪ G‬החל מצומת ‪ ,s‬ונשמור במשתנה‬
‫)‪(1‬‬
‫‪.‬‬
‫( = '‪ , G‬כלומר גרף שקבוצת קודקודיו זהה לזו‬
‫)‪(3‬‬
‫של הגרף ‪ ,G‬וקבוצת קשתותיו זהה לזו של ‪ ,G‬פרט לקשת ‪ e‬שאינה כלולה בו‪.‬‬
‫צעד ‪:3‬‬
‫נריץ את אלגוריתם‬
‫במשתנה ‪ y‬את‬
‫צעד ‪:4‬‬
‫אם‬
‫)‪(4‬‬
‫)‪(1‬‬
‫)‪(2‬‬
‫על הגרף '‪ G‬החל מצומת ‪ ,s‬ונשמור‬
‫‪.‬‬
‫אזי הצג כפלט‪" :‬ישנו מסלול קל ביותר בין ‪ s‬ל‪ t-‬שאינו‬
‫כולל את ‪ ."e‬אחרת – הצג כפלט‪" :‬כל מסלול קל ביותר בין ‪ s‬ל‪ t-‬כולל את ‪."e‬‬
‫באלגוריתם הנתון חסרים ארבעה ביטויים המסומנים בספרות )‪ .(4)-(1‬התשובה הנכונה בעבור כל‬
‫אחד מהביטויים החסרים מופיעה בסעיפים שלהלן‪:‬‬
‫א‪ .‬מהי התשובה הנכונה בעבור ביטוי )‪ (1‬לעיל?‬
‫‪ .1‬דייקסטרה )‪(Dijkstra‬‬
‫‪ .2‬סריקה לרוחב )‪(BFS‬‬
‫‪ .3‬פרים )‪(Prim‬‬
‫‪ .4‬מסלולים קצרים ביותר בגמ"ל )‪(DAG-SHORTEST-PATHS‬‬
‫‪4‬‬
‫ב‪ .‬מהי התשובה הנכונה בעבור ביטוי )‪ (2‬לעיל?‬
‫‪ .1‬משקל הקשת הקלה ביותר המחברת את הקודקוד ‪ s‬עם הקודקוד ‪.t‬‬
‫‪ .2‬משקל העץ המינימלי מבין העצים הפורשים ש‪ s-‬הוא שורשם‪ ,‬ו‪ t-‬הוא אחד מהעלים‪.‬‬
‫‪ .3‬המשקל המינימלי של קשת המחברת בין הרק"ח של ‪ s‬לרק"ח של ‪.t‬‬
‫‪ .4‬משקל המסלול הקל ביותר המוביל מקודקוד ‪ s‬לקודקוד ‪.t‬‬
‫ג‪ .‬מהי התשובה הנכונה בעבור ביטוי )‪ (3‬לעיל?‬
‫‪V , E ∪ {e} .1‬‬
‫‪V – {e} , E – {e} .2‬‬
‫‪V , E .3‬‬
‫‪V , E – {e} .4‬‬
‫ד‪ .‬מהי התשובה הנכונה בעבור ביטוי )‪ (4‬לעיל?‬
‫‪x = y .1‬‬
‫‪) |x-y| = w(e) .2‬ההפרש בין ‪ x‬ל‪ ,y-‬בערכו המוחלט‪ ,‬שווה למשקל הקשת ‪(e‬‬
‫‪x < y .3‬‬
‫‪x > y .4‬‬
‫ה‪ .‬מהי סיבוכיות זמן הריצה של האלגוריתם שלעיל?‬
‫‪Θ(| V | 3 ) .1‬‬
‫‪Θ(| E | ⋅log | V |) .2‬‬
‫‪Θ(| V | 2 ) .3‬‬
‫‪Θ(| V | + | E |) .4‬‬
‫‪5‬‬
‫שאלה ‪6‬‬
‫יהי )‪ G = (V,E‬גרף ממושקל עם פונקציית משקל }‪ , w : E → {0,1,2,... K − 1‬כאשר ‪ K‬הוא‬
‫קבוע שלם אי‪-‬שלילי כלשהו‪ .‬תארו כיצד ניתן לשנות את המימוש של תור קדימויות‪ ,‬כך‬
‫שאלגוריתם דייקסטרה ירוץ בזמן ריצה של )|‪ ,Θ(K·|V|+|E‬במקום בזמן ריצה ))|‪.Θ(|E|·log(|V‬‬
‫הדרכה‪ :‬במקום לממש את תור הקדימויות באמצעות ערימת מינימום‪ ,‬ממשו אותם באמצעות‬
‫מערך‪ ,‬שבו התא עם האינדקס ‪ i‬יחזיק רשימה מקושרת של צמתים ששדה ה‪ distance-‬שלהם‬
‫מכיל כרגע את הערך ‪. i‬התא האחרון במערך יאחסן רשימה מקושרת של כל הצמתים ששדה ה‪-‬‬
‫‪ distance‬שלהם מכיל כרגע את הערך ∞ )אינסוף(‪.‬‬
‫חשבו‪ :‬מה צריך להיות גודלו של המערך? איך נממש את הפעולה של שליפת איבר בעל ‪distance‬‬
‫מינימאלי מתור הקדימויות )שורה ‪ 8‬באלגוריתם של דייקסטרה(? מה נעשה כאשר מעדכנים את‬
‫ערך ה‪ distance-‬של איבר הנמצא כרגע בתור הקדימויות )שורה ‪?(12‬‬
‫שאלה ‪) 7‬ממבחן של משרד החינוך(‬
‫תזכורת‪ :‬הסימן המתמטי ∀ פירושו "לכל" )‪.(for all‬‬
‫‪6‬‬
‫שאלה ‪) 8‬ממבחן של משרד החינוך(‬
‫נקודה למחשבה‪ :‬מהי סיבוכיות זמן הריצה של האלגוריתם? היעזרו לשם כך בתשובתכם לשאלה‬
‫‪ 6‬בתרגיל זה‪.‬‬
‫‪7‬‬
‫שאלה ‪) 9‬ממבחן של משרד החינוך(‬
‫‪8‬‬