אלגוריתמים - Algorithms

‫אלגוריתמים‬
‫תרגיל בית ‪5‬‬
‫להגשה עד ‪ 10‬ביוני‬
‫הנחיה כללית‪ :‬בכל שאלה בה אתם מציגים אלגוריתם‪ ,‬יש להוכיח נכונות ולנתח את זמן הריצה‪ .‬ניתן להסתמך על טענות‬
‫שהוכחו בכיתה‪.‬‬
‫‪ .1‬נתונה רשת הזרימה הבאה )על כל קשת רשום קיבולה(‪:‬‬
‫‪4‬‬
‫‪5‬‬
‫‪9‬‬
‫‪/ d‬‬
‫‪14‬‬
‫‬
‫‪h‬‬
‫‪22‬‬
‫‬
‫‪/ l‬‬
‫‬
‫‪/ t‬‬
‫‪/ c‬‬
‫‪18‬‬
‫‪6‬‬
‫‬
‫‪g o‬‬
‫‪O‬‬
‫‪6‬‬
‫‪13‬‬
‫‪6‬‬
‫‪f o‬‬
‫‪O‬‬
‫‪/ j‬‬
‫‪O‬‬
‫‪9‬‬
‫‪12‬‬
‫‪2‬‬
‫‪2‬‬
‫‪10‬‬
‫‪6‬‬
‫‪/ k‬‬
‫‪23‬‬
‫‪/ b‬‬
‫‪O‬‬
‫‪12‬‬
‫‪11‬‬
‫‪2‬‬
‫‬
‫‪/ o‬‬
‫‪s‬‬
‫‪9‬‬
‫‪/ n‬‬
‫‬
‫‪e o‬‬
‫‬
‫‪i‬‬
‫‪8‬‬
‫‪3‬‬
‫‪5‬‬
‫‬
‫‪m‬‬
‫מצאו זרימה מקסימלית מ‪ s-‬ל‪ t-‬ברשת והוכיחו שהיא כזו )למשל‪ ,‬הראו שברשת השיורית אין מסלול משפר(‪.‬‬
‫‪ .2‬נתונה רשת זרימה )‪ G = (V, E‬מ‪ s-‬ל‪ t-‬עם קיבולים שלמים‪ .‬ידוע כי הקשת ‪ e∗ ∈ E‬הינה הקשת היחידה בעלת קיבול‬
‫אי־זוגי‪ ,‬וכן כי ערך הזרימה המקסימלית אי־זוגי אף הוא‪ .‬הוכיחו או הפריכו‪ :‬הקשת ∗‪ e‬רוויה בכל זרימה מקסימלית‪.‬‬
‫‪ .3‬נתונה רשת זרימה )‪ G = (V, E‬מ‪ s-‬ל‪ t-‬עם קיבולים שלמים ונתונה זרימה מקסימלית בה ‪ f : E → Z‬שחושבה ע"י‬
‫אלגוריתם ‪ .Ford–Fulkerson‬תארו אלגוריתם יעיל לעדכון ‪ f‬במקרים הבאים‪:‬‬
‫)א( מגדילים ב‪ 1-‬את הקיבול של קשת מסוימת ‪.e∗ ∈ E‬‬
‫)ב( מקטינים ב‪ 1-‬את הקיבול של קשת מסוימת ‪.e∗ ∈ E‬‬
‫‪ .4‬נתונה רשת זרימה )‪ G = (V, E‬מ‪ s-‬ל‪ t-‬ונתונה קשת ‪.e ∈ E‬‬
‫)א( תארו אלגוריתם יעיל הבודק האם קיים חתך )‪ (s, t‬מקיבול מינימלי כך ש־‪ e‬חוצה אותו‪.‬‬
‫)ב( תארו אלגוריתם יעיל הבודק האם ‪ e‬חוצה כל חתך )‪ (s, t‬מקיבול מינימלי‪.‬‬
‫‪ S‬ל‪ k -‬חלקים זרים כאשר ‪1 .1 < k < n‬‬
‫‪ .5‬נסמן }‪ S = {1, 2, . . . , n‬ותהיינה } ‪ {A1 , . . . , Ak } , {B1 , . . . , Bk‬שתי חלוקות של‬
‫תארו אלגוריתם יעיל לחישוב תת־קבוצה ‪ T ⊂ S‬בת ‪ k‬איברים החותכת את כל ‪ 2k‬הקבוצות )אם קיימת כזו(; כלומר‪,‬‬
‫לכל ‪ 1 ≤ i ≤ n‬מתקיים ∅ =‪.Bi ∩ T 6= ∅ ,Ai ∩ T 6‬‬
‫‪ .6‬נתונות ‪ m‬מכונות ו‪ n-‬משימות‪ .‬עבור כל משימה ‪ i‬נתונה רשימה }‪ Li ⊆ {1, . . . , n‬של מכונות המסוגלות לבצעה‪,‬‬
‫‪P‬‬
‫ונסמן את סך ארכי הרשימות ב‪ .N = ni=1 |Li |-‬עבור השמה של המשימות למכונות )קרי‪ :‬כל משימה משוייכת‬
‫למכונה אחת בדיוק(‪ ,‬נגדיר את העומס ‪ Wj‬של מכונה ‪ j‬להיות מספר המשימות שעליה לבצע ונגדיר את העומס הכללי‬
‫‪ .W = max {Wj }m‬תארו אלגוריתם יעיל למציאת השמה הממזערת את העומס הכללי‪.‬‬
‫כ‪j=1 -‬‬
‫‪ .7‬נתון גרף לא מכוון )‪ .G = (V, E‬תארו אלגוריתם יעיל המכוון את קשתות הגרף כך שלכל צומת דרגת יציאה לפחות ‪3‬‬
‫)או מודיע שלא ניתן לעשות זאת(‪.‬‬
‫‪1‬במילים אחרות‪Bi = S ,‬‬
‫‪Sk‬‬
‫‪i=1‬‬
‫= ‪Ai‬‬
‫‪Sk‬‬
‫‪i=1‬‬
‫ולכל ‪.Ai ∩ Aj = Bi ∩ Bj = ∅ ,1 ≤ i < j ≤ k‬‬
‫‪ .8‬נתונים גרף קשיר ולא מכוון )‪ ,G = (V, E‬פונקצית משקל ‪ ,w : E → R‬קשת ‪ ,e ∈ E‬ומספר שלם ‪ .k > 0‬תארו‬
‫אלגוריתם יעיל ככל האפשר שיקבע האם ניתן להסיר מן הגרף לכל היותר ‪ k‬קשתות‪ ,‬כך שהקשת ‪ e‬תהיה שייכת לעץ‬
‫פורש מינימלי של הגרף שיתקבל‪.‬‬
‫רמז‪ :‬מומלץ להשתמש באלגוריתם שראינו באחד מהתירגולים בנושא זרימה‪.‬‬
‫‪ .9‬שי ורני מחליטים לפרוש בשיא מחיי האקדמיה ולנסות להפיק סרט קולנוע‪ 2 .‬בידם רשימה } ‪A = {a1 , a2 , ..., an‬‬
‫של שחקנים אשר מוכנים להשתתף בסרט‪ .‬שחקן ‪ ai‬דורש שכר ‪ pi‬עבור השתתפותו בסרט‪ .‬בנוסף‪ ,‬ישנה קבוצה‬
‫} ‪ B = {b1 , b2 , ..., bm‬של משקיעים המעוניינים להשקיע בסרט‪ .‬משקיע ‪ bj‬מוכן להשקיע בסרט מימון בשווי ‪ ,qj‬אבל‬
‫רק בתנאי שכל השחקנים האהובים עליו ישתתפו בסרט‪ .‬נסמן ב‪ Aj ⊆ A-‬את קבוצת השחקנים האהובים על משקיע‬
‫‪ .bj‬תארו אלגוריתם ליהוק יעיל שימצא בחירת שחקנים ומשקיעים המניבה רווח הפקה )קרי‪ :‬סך המימון שהתקבל פחות‬
‫עלויות השכר לשחקנים שהועסקו( מירבי‪.‬‬
‫רמז‪ :‬הגדירו רשת זרימה והרהרו במשמעות קיבול החתך המינימלי‪.‬‬
‫‪2‬עלילה זמנית‪ :‬משהו עם בחורה יפה‪ ,‬אומנויות לחימה ובסוף יש גורילה‪.‬‬