תרגיל מס` 24 - WordPress.com
Transcription
תרגיל מס` 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