מכללת אורט כפר-סבא
מבני נתונים ויעילות אלגוריתמים
תרגיל מס' 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
© Copyright 2025