You are on page 1of 31

‫שאלות ממבחני אלגוריתמים‬ ‫נ‬

‫ד"ר מירי פרייזלר‬

‫מבחן א'‬
‫שאלה ‪1‬‬
‫( הקיפו את התשובה הנכונה לגבי כל אחת מהטענות )‬ ‫הוכיחו או הפריכו כל אחד מבין הסעיפים הבאים ‪:‬‬
‫‪ .1‬אם באלגוריתם של קרוסקל ‪ ,‬ממיינים את הקשתות בסדר יורד ולא בסדר עולה‪ ,‬אז מתקבל עץ פורש מקסימלי‪.‬‬

‫‪ .2‬אם בגרף מכוון אציקלי וממושקל )‪ G = (V,E‬מתקיים |) |‪ , E| = ( |V|log|V‬אז האלגוריתם של‬


‫‪ Johnson‬איננו גרוע יותר מהפעלת האלגוריתם למק"בים בגרף אציקלי מכל קדקוד של ‪. V‬‬

‫‪1‬‬
‫‪ .3‬אם בגרף מכוון הופכים כל קדקוד ‪ u‬לקשת ‪ , uinuout‬ומחברים כל קשת שנכנסה אל ‪ , u‬אל ‪ , uin‬וכל קשת‬
‫שיצאה מ‪ , u -‬מוציאים מ‪ , uout -‬אז מסלול המילטון בגרף המקורי גורר קיום מסלול אוילר בגרף החדש ‪.‬‬

‫‪ .4‬אם בגרף מכוון הופכים כל קדקוד ‪ u‬לקשת ‪ , uinuout‬ומחברים כל קשת שנכנסה ‪ ,‬אל ‪ u‬אל ‪ , uin‬וכל קשת‬
‫שיצאה מ‪ , u -‬מוציאים מ‪ , uout -‬אז מסלול אוילר בגרף החדש גורר קיום מסלול המילטון בגרף המקורי ‪.‬‬

‫‪ .5‬עץ הופמן הוא תמיד עץ מלא‪.‬‬

‫‪2‬‬
‫שאלה ‪2‬‬
‫נתון גרף מכוון )‪ , G = (V,E‬קדקודים ‪ s,t‬בגרף ופונקצית משקל ממשית על קשתותיו ‪. w : E  ℝ‬‬
‫תארו אלגוריתם יעיל ‪ ,‬המוצא את גרף כל המסלולים הקלים ביותר מ‪ s -‬ל‪ , t -‬שמספר קשתותיהם אי‪-‬זוגי‪.‬‬
‫הוכיחו נכונות האלגוריתם וחשבו את סבוכיותו ‪.‬‬

‫‪3‬‬
‫שאלה ‪3‬‬
‫נתון גרף לא מכוון פשוט וקשיר )‪ , G = (V,E‬ומשקלים ממשיים ‪ w : V  ℝ‬על הקדקודים‪.‬‬
‫תארו אלגוריתם יעיל ‪ ,‬המוצא עץ פורש ‪ , T‬המביא למינימום את )‪, vV d'(v)w(v‬‬
‫הוכיחו נכונותו וחשבו את סבוכיותו ‪.‬‬ ‫כאשר )‪ d'(v‬היא דרגת ‪ v‬בעץ ‪. T‬‬

‫‪4‬‬
‫שאלה ‪4‬‬
‫נתונה רשת זרימה )‪ G = (V,E‬עם קיבולים ‪ , +c : E  ℝ‬מקור ‪ s‬ובור ‪ , t‬וקשת )‪ e = (u,v‬ברשת‪.‬‬
‫תארו אלגוריתם יעיל ‪ ,‬הקובע האם כל זרימה מקסימלית ברשת ‪ ,‬קובעת על ‪ e‬זרימה חיובית‪.‬‬
‫הוכיחו את נכונות האלגוריתם וחשבו את סבוכיותו‪.‬‬

‫שאלה ‪5‬‬
‫תארו אלגוריתם תכנות דינאמי ‪ ,‬המקבל את מספר האיברים ‪ n‬של הקבוצה }‪, A = {1,2,….,n‬‬
‫וקובע מהו מספר תת‪-‬הקבוצות של ‪ , A‬שאינן מכילות אף זוג מספרים עוקבים ‪.‬‬
‫הוכיחו את נכונות האלגוריתם וחשבו את סבוכיותו‪.‬‬

‫‪5‬‬
6
‫מבחן ב'‬
‫שאלה ‪1‬‬
‫( הקיפו את התשובה הנכונה לגבי כל אחת מהטענות )‬ ‫הוכיחו או הפריכו כל אחד מבין הסעיפים הבאים ‪:‬‬
‫‪ .1‬קיים עפ"מ שאינו כולל את הקשת הכבדה ביותר של מעגל נתון ‪.‬‬

‫‪ .2‬כל עפ"מ אינו כולל את הקשת הכבדה ביותר של מעגל נתון ‪.‬‬

‫‪ .3‬קיים עפ"מ הכולל את הקשת הקלה ביותר של מעגל נתון ‪.‬‬

‫‪ .4‬כל עפ"מ כולל את הקשת הקלה ביותר של מעגל נתון ‪.‬‬

‫‪7‬‬
‫שאלה ‪2‬‬
‫נתון טקסט המכיל את התוים ‪ a,b,c‬בלבד‪ .‬ידוע ש‪ a -‬מופיע ‪ 10‬פעמים בטקסט ‪ b ,‬מופיע ‪ 8‬פעמים בטקסט ‪ ,‬ו‪ c -‬מופיע‬
‫‪ 3‬פעמים בטקסט ‪.‬‬
‫‪ .1‬כמה קודי הופמן שונים יכולים להתקבל על ידי הפעלת אלגוריתם הופמן על קובץ זה ?‬
‫קודי הופמן שונים‪.‬‬ ‫_____‪_____4‬‬ ‫תשובה ‪ :‬יכולים להתקבל‬

‫‪ .2‬הציגו ארבעה קודי הופמן אפשריים מתוכם ‪:‬‬


‫תשובה ‪:‬‬
‫__‪__a = __0‬‬ ‫__‪b = __10‬‬ ‫‪c = __11‬‬ ‫קוד הופמן אפשרי ראשון ‪:‬‬
‫__‪___a = __0‬‬ ‫__‪b = __11‬‬ ‫‪c = _10‬‬ ‫קוד הופמן אפשרי שני ‪:‬‬
‫__‪__a = __1‬‬ ‫___‪b = _00‬‬ ‫‪c = __01‬‬ ‫קוד הופמן אפשרי שלישי ‪:‬‬
‫__‪__a = __1‬‬ ‫__‪b = __01‬‬ ‫‪c = __00‬‬ ‫קוד הופמן אפשרי רביעי ‪:‬‬

‫‪ .3‬מהו נפח הטקסט המקודד שיתקבל על ידי הפעלת אלגוריתם הופמן על הטקסט ?‬
‫( בחרו אחת משתי האפשרויות הבאות וסמנו אותה ב‪.  -‬‬ ‫תשובה ‪:‬‬
‫אם בחרתם באפשרות הראשונה ‪ ,‬השלימו את החסר )‬
‫ביטים‬ ‫___‪___32‬‬ ‫□ נפח הטקסט המקודד זהה לכל אחד מקודי הופמן וערכו‬
‫□ נפח הטקסט המקודד שונה לכל אחד מקודי הופמן‬

‫‪ .4‬אם ידוע שהטקסט המקודד מכיל ‪ 19‬פעמים את הביט ‪ , 1‬איך נראה הקוד שהתקבל על ידי הפעלת אלגוריתם‬
‫הופמן ?‬
‫תשובה ‪:‬‬
‫__‪__a = __0‬‬ ‫__‪b = __11‬‬ ‫‪c = __10‬‬ ‫קוד הופמן שהתקבל במקרה זה הוא ‪:‬‬

‫‪8‬‬
‫שאלה ‪3‬‬
‫נתון גרף מכוון )‪ G=(V,E‬ולכל קשת ‪ e‬זוג משקלים ()‪ ,)a(e),b(e‬שערכו (‪ )1-,0( ,)0,0‬או (‪.)1,0-‬‬
‫תארו אלגוריתם יעיל ככל האפשר ‪ ,‬הבודק אם קיים ב‪ G -‬מעגל (לא בהכרח פשוט) ‪,‬‬
‫כך שסכום רכיבי ה‪ a -‬שלו שלילי וגם סכום רכיבי ה‪ b -‬שלו שלילי‪.‬‬
‫הוכיחו את נכונות האלגוריתם וחשבו את סבוכיותו‪.‬‬

‫‪9‬‬
‫שאלה ‪4‬‬
‫נתון גרף מכוון )‪ , G = (V,E‬ופונקצית משקל ממשית על קשתותיו ‪ , w : E  ℝ‬וכן נתון קדקוד ‪. sV‬‬
‫שנו את אלגוריתם בלמן‪-‬פורד ‪ ,‬כך שיציב ‪ -‬על כל קדקוד של ‪ , V‬שהמרחק מ‪ s -‬אליו איננו חסום מלמטה‬
‫( כלומר‪ ,‬שלא קיים מסלול קל ביותר מ‪ s -‬אליו ) ‪.‬‬
‫הוכיחו את נכונות האלגוריתם וחשבו את סבוכיותו‪.‬‬

‫שאלה ‪5‬‬

‫‪10‬‬
‫נתונה רשת זרימה עם קיבולים שלמים ופונקצית זרימה מקסימלית ‪ f‬ברשת ‪ .‬נניח שמקטינים את הקיבול‬
‫של קשת מסוימת (‪ )u,v‬ב‪.1-‬‬
‫תארו אלגוריתם יעיל ככל האפשר שמחשב את הזרימה המקסימלית ברשת החדשה‪.‬‬
‫הוכיחו את נכונות האלגוריתם וחשבו את סבוכיותו‪.‬‬

‫‪11‬‬
‫מבחן ג'‬

‫שאלה ‪1‬‬
‫לכל אחד מהסעיפים הבאים ‪ ,‬הקיפו את התשובה הנכונה בדפי התשובון ‪:‬‬

‫‪ .1‬אם נשתמש במחסנית במקום בתור ‪ ,‬כדי לממש את אלגוריתם ‪ , BFS‬אז הרמות שיקבע ‪ BFS‬על קדקודי הגרף ‪,‬‬
‫כבר לא ייצגו בהכרח את אורכי המסלולים הקצרים ביותר מקדקוד ההתחלה אל קדקודי הגרף ‪.‬‬
‫‪ .2‬קיימות בעיות שניתן לפותרן באמצעות ‪ , DFS‬אבל ניתן לפותרן גם באמצעות ‪. BFS‬‬
‫‪ .3‬האלגוריתם למיון טופולוגי של גרף מכוון חסר מעגלים מכוונים ‪ ,‬הוא אלגוריתם אופטימלי ‪.‬‬
‫‪ .4‬מטריצת השכנויות ליישום גרף לא מכוון היא בהכרח מטריצה סימטרית ‪.‬‬
‫‪ .5‬לגרף מכוון בן ‪ n‬קדקודים יש מסלול אוילר ‪ ,‬המהוה מסלול פשוט ‪ ,‬אם ורק אם הגרף הוא ‪. Pn‬‬
‫תשובה‪ :‬כל הקביעות נכונות ‪.‬‬

‫שאלה ‪2‬‬
‫‪ .1‬מפעילים את אלגוריתם הופמן על תוים ששכיחותם יוצרת את הסידרה הבאה‬
‫‪ . 10 , 5 , 5 , 3 , 2 , 2 , 2 , 1‬מהו נפח הטקסט המקודד ? תשובה‪82 :‬‬

‫‪ .2‬המערך הבא מממש עץ הורים ( ‪ , ) parent‬שקדקודיו מסומנים ‪ . 9,....,1‬ציירו את העץ ‪.‬‬


‫‪7‬‬ ‫‪6‬‬ ‫‪2‬‬ ‫‪8‬‬ ‫‪6‬‬ ‫‪----‬‬ ‫‪6‬‬ ‫‪2‬‬ ‫‪8‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬

‫‪12‬‬
‫התייחסו אל העץ הנתון הבא בסעיפים ג' ‪ ,‬ד' ‪:‬‬

‫‪13‬‬
‫‪ .3‬הפעילו את אלגוריתם ‪ DFS‬על הגרף הנתון ‪ ,‬החל מהקדקוד ‪.7‬‬
‫בכל פעם שצריך לבחור קדקוד במהלך ריצת ה‪ , DFS -‬בחרו בקדקוד השמאלי ביותר האפשרי ‪.‬‬
‫רשמו בתוך הקדקוד את מספר ההגעה שלו ‪ ,‬ומחוץ לקדקוד את מספר הסיום שלו ‪.‬‬

‫‪ .4‬חשבו את הקוטר של העץ הנתון ‪ ,‬והציגו מסלול בעץ שאורכו כאורך הקוטר של העץ ‪.‬‬
‫תשובה‪ 6 :‬קשתות או ‪ 7‬קדקודים‬

‫‪14‬‬
‫שאלה ‪3‬‬
‫הפעילו את אלגוריתם התכנות דינאמי לכפל מטריצות ‪ ,‬כדי לחשב כיצד להכפיל את המטריצות הבאות ‪,‬‬
‫מלאו את טבלאות החישובים ‪ , T , P‬שהוגדרו על ידי האלגוריתם ‪,‬‬ ‫תוך שימוש במספר מינימלי של פעולות ‪.‬‬
‫והציגו את הסדר המומלץ להכפלת המטריצות ( באמצעות הקפת פעולת הכפל בין המטריצות בסוגריים ) ‪.‬‬
‫‪. A35  A52  A21  A13‬‬ ‫המטריצות שיש לכפול הן מהסדר הבא‪:‬‬

‫‪15‬‬
‫שאלה ‪4‬‬
‫נתון גרף מכוון )‪ , G = (V,E‬קדקודים ‪ s,t‬בגרף ‪ ,‬ופונקצית משקלים חיובית על קשתותיו ‪. +w : E  ℝ‬‬
‫קשת ‪ x  y‬נקראת "שימושית" ‪ ,‬אם קיים מסלול קל ביותר מ‪ s -‬אל ‪ , y‬שקשתו האחרונה היא ‪. x  y‬‬
‫‪ .1‬הוכיחו שמסלול מ‪ s -‬אל ‪ t‬מכיל רק קשתות שימושיות אם ורק אם הוא מסלול קל ביותר מ‪ s -‬אל ‪. t‬‬

‫‪16‬‬
‫‪ .2‬תארו אלגוריתם יעיל למציאת כל הקשתות השימושיות של הגרף ‪ G‬הנתון ‪.‬‬

‫‪17‬‬
‫שאלה ‪5‬‬
‫נתון גרף לא מכוון קשיר ופשוט )‪ , G = (V,E‬שכל אחת מקשתותיו צבועה בכחול או בלבן או באדום ‪.‬‬
‫תארו אלגוריתם יעיל‪ ,‬למציאת עץ פורש ‪ ,‬המכיל את כל הקשתות הלבנות ‪ ,‬ומספר מקסימלי של קשתות כחולות ‪,‬‬
‫הוכיחו את נכונות האלגוריתם וחשבו את סבוכיותו ‪.‬‬ ‫אם קיים עץ כזה ‪.‬‬

‫‪18‬‬
‫שאלה ‪6‬‬
‫נתונה רשת זרימה )‪ G = (V,E‬עם מקור ‪ s‬בור ‪ t‬ופונקצית קיבולים חיובית ‪ c‬על הקשתות ‪.‬‬
‫נאמר שקיימת זרימה "על ריק" בגודל ‪ f‬ברשת ‪ ,‬אם הזרימה ‪ f‬מקיימת )‪. f = fin(s) = fout(s‬‬
‫תארו אלגוריתם יעיל למציאת הזרימה המקסימלית שניתן להזרים "על ריק" ברשת ‪. G‬‬
‫הוכיחו את נכונות האלגוריתם וחשבו את סבוכיותו ‪.‬‬

‫מבחן ד'‬
‫‪19‬‬
‫שאלה ‪1‬‬
‫לכל אחד מהסעיפים הבאים ‪ ,‬הקיפו את התשובה הנכונה בדפי התשובון ‪ ,‬ונמקו ‪:‬‬

‫‪ .1‬נתון גרף לא מכוון ‪ ,‬וקדקודים ‪ s,u,v‬בגרף ‪ .‬במהלך ריצת ‪ BFS‬על הגרף החל מקדקוד ‪, s‬‬
‫הקדקוד ‪ u‬הפך להיות ההורה של הקדקוד ‪ v‬בעץ ה‪. BFS -‬‬
‫(סמנו אותה בדף התשובון ונמקו) ‪:‬‬ ‫איזו מהטענות הבאות היא הטענה הנכונה ‪:‬‬

‫‪ .1‬תיתכן הרצת ‪ BFS‬על הגרף החל מקדקוד ‪ , v‬שבה ‪ u,v‬אינם סמוכים בעץ ‪ BFS‬זה ‪.‬‬
‫‪ .2‬תיתכן הרצת ‪ BFS‬על הגרף החל מקדקוד ‪ , s‬שבה ‪ u,v‬אינם סמוכים בעץ ‪ BFS‬זה‪.‬‬
‫‪ .3‬תיתכן הרצת ‪ BFS‬על הגרף החל מקדקוד ‪ , u‬שבה הרמה של ‪ v‬גדולה מ‪. 1 -‬‬
‫‪ .4‬אף אחת מהטענות הקודמות איננה נכונה ‪.‬‬

‫‪ .2‬נתון גרף לא מכוון וקשיר‪ ,‬וקדקוד ‪ s‬בגרף ‪ .‬במהלך ריצת ‪ DFS‬על הגרף החל מקדקוד ‪, s‬‬
‫מתקבל עץ פורש ‪ ,‬שבו לקדקוד ‪ , u , us‬יש בדיוק ‪ 2‬ילדים ‪. v1,v2‬‬
‫(סמנו אותה בדף התשובון ונמקו) ‪:‬‬ ‫איזו מהטענות הבאות היא הטענה הנכונה ‪:‬‬

‫‪ .1‬כל מסלול מ‪ s -‬אל ‪ v1‬בגרף‪ ,‬חייב לעבור דרך ‪. u‬‬


‫‪ .2‬בכל ריצת ‪ , DFS‬המתחילה מ‪ , u -‬יש ל‪ u -‬לפחות ‪ 2‬ילדים בעץ ה‪ DFS -‬שלו ‪.‬‬
‫‪ .3‬כל ריצת ‪ BFS‬החל מ‪ , v1 -‬מציבה על ‪ v2‬רמה ‪. 2‬‬
‫‪ .4‬אף אחת מהטענות הקודמות איננה נכונה ‪.‬‬

‫‪20‬‬
‫שאלה ‪2‬‬
‫נתון גרף לא מכוון ‪ ,‬קשיר ופשוט ‪ ,‬ופונקציה משקלים ממשית על קשתותיו ‪.‬‬
‫הוכיחו או הפריכו כל אחד מהסעיפים הבאים ‪:‬‬

‫‪ .1‬אלגוריתם פרים עלול לא למצוא עץ פורש מינימלי אם חלק מקשתות הגרף שליליות ‪.‬‬

‫‪ .2‬אם לגרף אין גשרים ‪ ,‬אז הסרת עץ פורש מינימלי מהגרף ‪ ,‬לא תנתק אותו ‪.‬‬

‫‪ .3‬אם ‪ v‬קדקוד כלשהו ו‪ e -‬הקשת הקלה ביותר הסמוכה אל ‪ , v‬אז יש עץ פורש מינימלי המכיל את ‪. e‬‬

‫‪21‬‬
‫‪ .4‬אם ‪ v‬קדקוד כלשהו ו‪ e -‬הקשת הקלה ביותר הסמוכה אל ‪ , v‬אז כל עץ פורש מינימלי בהכרח מכיל את ‪. e‬‬

‫שאלה ‪3‬‬
‫‪ .1‬נתונים שלושה גרפי אוילר לא מכוונים ‪ ,‬שזרים זה לזה ‪, G1, G2, G3 ,‬‬
‫ונתונים שלושה קדקודים ‪. xG1 , yG2 , zG3‬‬ ‫עם מעגלי אוילר ‪ H1, H2, H3‬בהתאמה ‪,‬‬
‫כמו כן הוסיפו ‪ 3‬קשתות (‪. )z,x( , )y,z( , )x,y‬‬
‫הציגו מעגל אוילר של } )‪. G1  G2  G3  { (x,y) , (y,z) , (z,x‬‬
‫הערה‪ :‬ניתן להעזר בהגדרה הבאה ‪ H(u) :‬יסמן טיול על מעגל אוילר ‪ ,‬המתחיל ומסתיים בקדקוד ‪ u‬של ‪.H‬‬

‫‪22‬‬
‫באמצעות בנית משולש פסקל ‪.‬‬ ‫‪ .2‬חשבו את‬

‫‪ .3‬נתון גרף מכוון חסר מעגלים מכוונים )‪ G = (V,E‬שבו מספר הקדקודים הוא ‪. n‬‬
‫הציגו פונקציה הפיכה }‪ , f : V  {1,2,3,….,n‬כך שלכל קשת (‪ )x,y‬בגרף יתקיים )‪. f(x) < f(y‬‬

‫‪23‬‬
‫‪ .4‬מפעילים את אלגוריתם הופמן על התוים ‪ , a , b , c‬ששכיחותם בהתאמה היא ‪. 7 , 5 , 11‬‬
‫מהו הקוד של כל אחת מהאותיות ‪ ,‬אם ידוע שמספר המופעים של הביט ‪ 0‬בטקסט המקודד ‪,‬‬
‫הוא המינימלי האפשרי ?‬

‫‪24‬‬
‫שאלה ‪4‬‬
‫נתון גרף מכוון )‪ , G = (V,E‬קדקודים ‪ s,t‬בגרף ‪ ,‬ופונקצית משקלים חיובית על קשתותיו ‪. +w : E  ℝ‬‬
‫בנוסף ‪ ,‬כל קשת צבועה באדום או בכחול ‪.‬‬
‫תארו אלגוריתם יעיל למציאת המסלול הקל ביותר מ‪ s -‬לכל קדקוד ‪ ,‬העובר דרך קשת אדומה אחת לפחות ‪.‬‬

‫‪25‬‬
‫שאלה ‪5‬‬
‫נתונה רשת זרימה )‪ G = (V,E‬עם מקור ‪ s‬בור ‪ , t‬ופונקצית קיבולים חיובית ‪ c‬על הקשתות ‪,‬‬
‫ונתונה קבוצה }‪. X  V \ {s,t‬‬
‫תארו אלגוריתם יעיל לבדיקה האם קיימת זרימה מקסימלית ‪ ,‬שלא עוברת דרך אף אחד מקדקודי ‪. X‬‬
‫הוכיחו את נכונות האלגוריתם וחשבו את סבוכיותו ‪.‬‬

‫שאלה ‪6‬‬

‫‪26‬‬
‫נתונות ‪ n‬נקודות על הישר הממשי ‪.‬‬
‫תארו אלגוריתם יעיל לכיסוי הנקודות באמצעות מספר מינימלי של קטעי יחידה (כלומר קטעים סגורים באורך ‪. )1‬‬
‫הוכיחו את נכונות האלגוריתם וחשבו את סבוכיותו ‪.‬‬

‫‪27‬‬
‫מבחן ה'‬
‫שאלה ‪1‬‬
‫נתון גרף לא מכוון לאו דוקא קשיר‪ ,‬שבו דרגת כל קדקוד היא ‪ 2‬בדיוק‪.‬‬
‫תארו אלגוריתם יעיל הבודק אם קיים מעגל המילטון בגרף‪.‬‬
‫הוכיחו את נכונותו וחשבו את סבוכיותו‪.‬‬

‫פתרון ‪1‬‬
‫האלגוריתם‪ :‬נפעיל את האלגוריתם לבדיקה האם הגרף קשיר ‪.‬‬
‫נכונות‪ :‬גרף לא מכוון שכל דרגותיו ‪ 2‬הוא אוסף של מעגלים פשוטים ‪,‬‬
‫לכן יש לו מעגל המילטון אם ורק אם הוא מעגל יחיד ‪,‬‬
‫כלומר במקרה זה ‪ ,‬גרף קשיר ‪.‬‬
‫סבוכיות‪. (E+V) = (V+V) = (V) :‬‬

‫שאלה ‪2‬‬
‫א‪ .‬נתון האלגוריתם הבא על גרף מכוון ‪:‬‬
‫‪ .1‬נפעיל ‪ DFS‬מקדקוד כלשהו‪ ,‬ונקבל רשימת זמני סיום יורדת‪.‬‬
‫‪ .2‬נפעיל ‪ DFS‬נוסף על הגרף לפי סדר רשימת זמני הסיום היורדת שקיבלנו בסעיף הקודם‪.‬‬

‫הוכיחו בקצרה ‪.‬‬ ‫מה מייצג מספר עצי ה‪ DFS-‬השני ? ( הקיפו את התשובה הנכונה ) ‪.‬‬
‫א‪ .‬את מספר המקורות בגרף העל של רכיבי קשירות חזקה‪.‬‬
‫ב‪ .‬את מספר הבורות בגרף העל של רכיבי קשירות חזקה‪.‬‬
‫ג‪ .‬את מספר רכיבי הקשירות החזקה בגרף‪.‬‬
‫ד‪ .‬את מספר רכיבי הקשירות החזקה בגרף ההפוך‪.‬‬
‫ה‪ .‬אף אחת מארבע האפשרויות ‪.‬‬

‫תשובה‪:‬‬
‫א‪ .‬את מספר המקורות בגרף העל של רכיבי קשירות חזקה‪.‬‬
‫ב‪ .‬את מספר הבורות בגרף העל של רכיבי קשירות חזקה‪.‬‬
‫ג‪ .‬את מספר רכיבי הקשירות החזקה בגרף‪.‬‬
‫ד‪ .‬את מספר רכיבי הקשירות החזקה בגרף ההפוך‪.‬‬
‫ה‪ .‬אף אחת מארבע האפשרויות ‪.‬‬

‫‪28‬‬
‫‪ .3‬נתון סולם בעל ‪ n‬שלבים‪ .‬הצבע מטפס על הסולם‪ ,‬בצעדים של ‪ 2‬שלבים או ‪ 3‬שלבים בכל פעם‪.‬‬
‫תארו אלגוריתם יעיל הבודק בכמה דרכים הוא יכול לטפס על הסולם כדי להגיע מהריצפה אל פיסגת הסולם‪.‬‬
‫פתרון‪:‬‬
‫נחשב את התשובה )‪ f(n‬באמצעות אלגוריתם התכנות דינאמי הבא ‪:‬‬
‫)‪f(n) = f(n-2) + f(n-3‬‬ ‫‪n>0‬‬
‫‪f(0) = 1‬‬
‫‪f(n) = 0‬‬ ‫‪n<0‬‬
‫אלגוריתם התכנות דינאמי ישתמש במערך וזמן הריצה לכן )‪. (n‬‬

‫שאלה ‪3‬‬
‫נתון גרף לא מכוון קשיר עם פונקצית משקל ממשית על קשתותיו‪.‬‬
‫‪ .1‬תארו אלגוריתם יעיל למציאת עץ פורש מינימלי‪ ,‬בעל מספר מינימלי של קשתות שליליות‪.‬‬
‫הוכיחו את נכונות האלגוריתם‪ ,‬ורשמו את סבוכיותו‪.‬‬
‫פתרון‬
‫‪.‬האלגוריתם‪ :‬נמצא עץ פורש מינימלי באמצעות פרים או קרוסקל‬
‫‪ .‬נכונות ‪ :‬הוכחנו שלכל העפ"מים אותה סדרת משקלים ‪ ,‬לכן לכולם אותו מספר של קשתות שליליות‬
‫סבוכיות‪. O(ElogV) :‬‬

‫ב‪ .‬תארו אלגוריתם יעיל למציאת עץ פורש מינימלי‪ ,‬בעל מספר מינימלי של קשתות שליליות‪ ,‬בהנחה שנתון גם עץ פורש‬
‫מינימלי ‪ T‬של הגרף‪.‬‬
‫הוכיחו את נכונות האלגוריתם‪ ,‬ורשמו את סבוכיותו‪.‬‬
‫פתרון‬
‫האלגוריתם‪ :‬נחזיר את ‪. T‬‬
‫נכונות‪ :‬כי ‪ T‬הוא עץ פורש מינימלי‪.‬‬
‫סבוכיות ‪. (1) :‬‬

‫שאלה ‪4‬‬
‫תארו אלגוריתם יעיל למציאת זווג מקסימלי בגרף כמעט דו‪-‬צדדי‪.‬‬
‫(להזכירכם‪ ,‬גרף כמעט דו‪-‬צדדי הוא גרף דו‪-‬צדדי או גרף שהסרת קשת אחת ממנו הופכת אותו לדו‪-‬צדדי)‪.‬‬
‫הוכיחו את נכונותו וחשבו את סבוכיותו‪.‬‬

‫‪29‬‬
‫פתרון‬
‫האלגוריתם‪:‬‬
‫‪ .1‬נפעיל את האלגוריתמים שלמדנו לבדיקה האם הגרף הוא דו‪-‬צדדי או למציאת הקשת שהסרתה תהפוך אותו‬
‫לדו‪-‬צדדי‪.‬‬
‫‪ .2‬אם הגרף הוא דו‪-‬צדדי ‪ ,‬נפעיל את האלגוריתם למציאת זווג מקסימלי בגרף כמעט דו‪-‬צדדי‪.‬‬
‫‪ .3‬אחרת ‪:‬‬
‫נמצא זווג ראשון כך‪:‬‬ ‫‪.4‬‬
‫נסמן ב‪ e -‬את הקשת שהסרתה תהפוך את הגרף לדן‪-‬צדדי ‪.‬‬ ‫‪.5‬‬
‫נסיר את ‪ e‬מהגרף ‪.‬‬ ‫‪.6‬‬
‫נמצא זווג מקסימלי בגרף הדן‪-‬צדדי הנותר ‪.‬‬ ‫‪.7‬‬
‫נמצא זווג שני כך‪:‬‬ ‫‪.8‬‬
‫נסיר מ‪ G -‬את כל הקשתות הסמוכות לקדקודי הקצה של ‪ ( e‬כולל ‪. ) e‬‬ ‫‪.9‬‬
‫נמצא זווג מקסימלי בגרף הדו‪-‬צדדי הנותר ‪.‬‬ ‫‪.10‬‬
‫נוסיף לזווג את ‪. e‬‬ ‫‪.11‬‬
‫‪ .12‬נחזיר את הזווג הגדול מבין ‪ 2‬הזווגים שמצאנו ‪.‬‬
‫נכונות‪ :‬מצאנו את הזווג המקסימלי שלא כולל את ‪ e‬ואת הזווג המקסימלי שכן כולל את ‪, e‬‬
‫לכן התשובה היא הגדול מביניהם ‪.‬‬
‫סבוכיות‪:‬‬
‫מציאת הקשת ‪ ,‬שהסרתה הופכת את הגרף לדן‪-‬צדדי ‪ ,‬לוקחת זמן )‪. (EV‬‬ ‫‪-‬‬
‫מציאת זווג מקסימלי לוקח זמן )‪. O(EV‬‬ ‫‪-‬‬
‫לכן הסבוכיות היא )‪. O(EV‬‬

‫שאלה ‪5‬‬
‫נתון גרף מכוון ולו משקל שלילי ממשי נתון על כל קשת‪ ,‬ונתון קדקוד ‪ s‬בגרף‪.‬‬
‫תארו אלגוריתם יעיל למציאת המסלול הארוך ביותר מ‪ s -‬לכל קדקוד אחר בגרף‪.‬‬
‫הוכיחו את נכונותו וחשבו את סבוכיותו‪.‬‬
‫פתרון‬
‫האלגוריתם‪ :‬נכפיל כל קשת פי ‪ 1-‬ונפעיל את דייקסטרה ‪.‬‬
‫נכונות ‪ :‬יתקבל גרף שכל משקליו חיוביים ‪ .‬מסלול בו הוא קל ביותר אם ורק אם במשקלים המקוריים הוא כבד ביותר ‪.‬‬
‫סבוכיות‪ O(ElogV) :‬כשל דייקסטרה ‪.‬‬

‫שאלה ‪6‬‬
‫נתון גרף לא מכוון וקשיר )‪ . G = (V,E‬תארו אלגוריתם יעיל הבודק אם קיים מסלול פשוט העובר דרך כל גשרי הגרף‪.‬‬
‫הוכיחו את נכונותו וחשבו את סבוכיותו‪.‬‬

‫‪30‬‬
‫פתרון ‪:‬‬
‫האלגוריתם‪:‬‬
‫)‪O(E+V‬‬ ‫‪ .1‬נפעיל את האלגוריתם למציאת כל גשרי הגרף‬
‫‪ .2‬נסיר את הגשרים מ‪ G -‬לקבלת הגרף ‪. 'G‬‬
‫‪ .3‬נבנה גרף חדש ‪ H‬שקדקודיו הם גשרי ‪ , G‬וקשת בין כל ‪ 2‬גשרים הסמוכים לאותו רכיב קשירות של ‪. 'G‬‬
‫‪ .4‬יש מסלול פשוט העובר דרך כל גשרי הגרף של ‪ G‬אם ורק אם ‪ H‬הוא מסלול פשוט ‪.‬‬
‫נכונות‪ :‬במסלול פשוט של ‪ , G‬העובר דרך כל גשרי הגרף ‪ ,‬אם נחליף כל קטע בין ‪ 2‬גשרים ‪ ,‬בקשת אחת ‪ ,‬וכל גשר‬
‫בקדקוד ‪ ,‬יתקבל בדיוק הגרף ‪ . H‬לכן יש ב‪ G -‬מבלול כנדרש אם ורק אם ‪ H‬הוא מסלול פשוט ‪.‬‬
‫סבוכיות‪ :‬כל שלב באלגוריתם לוקח זמן )‪ (E+V‬ולכן )‪. (E+V‬‬
‫סבוכיות‪ O(ElogV) :‬כשל דייקסטרה ‪.‬‬

‫שאלה ‪7‬‬
‫תארו אלגוריתם יעיל למציאת מספר‬ ‫נתון גרף מכוון‪ ,‬פונקצית משקל חיובית ממש על קשתותיו‪ ,‬וקדקוד ‪ s‬בגרף‪.‬‬
‫המסלולים הקצרים ביותר מ‪ s -‬ל‪ , t -‬לאחר שבוצע אלגוריתם דייקסטרה מ‪.s -‬‬
‫פתרון‬
‫האלגוריתם‪:‬‬
‫‪ .1‬נמצא את גרף המק"בים מ‪ s -‬ל‪. t -‬‬
‫‪ .2‬נחשב את מספר המק"בים ) ‪ ,M(v‬מ‪ s -‬לכל קדקוד ‪ , v‬תוך כדי מעבר על הקדקודים בגרף המק"בים ‪ ,‬שכבה‬
‫אחר שכבה ‪ ,‬באופן הבא ‪:‬‬
‫‪M(s) = 0‬‬ ‫‪.1‬‬
‫‪ vÎV ,‬לכל קדקוד ‪ u‬ש‪ v -‬הוא שכנו בגרף המק"בים (כלומר‬ ‫לכל )‪M(v) = åM(u‬‬ ‫‪.2‬‬
‫ברור שכל הקדקודים ‪ u‬הללו ימצאו‬ ‫קיימת הקשת ‪ uàv‬בגרף המק"בים)‪.‬‬
‫בשכבה שלפני ‪ , v‬ולכן נח לחשב ערכים אלה מתוך הגרף ההפוך לגרף המק"בים‪ ,‬בסדר‬
‫שכבות יורד‪.‬‬
‫אז‬ ‫סבוכיות‪ :‬מכיוון שהאלגוריתם כולל שני חלקים לינאריים (מציאת גרף המק"בים ומעבר על הגרף ההפוך לו) ‪,‬‬
‫סיבוכיותו לינארית ( )‪ , ) O(E+V‬למרות שמספר המסלולים האפשריים מ‪ s-‬לכל קדקוד עלול להיות אקספוננציאלי!‬

‫‪31‬‬

You might also like