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

‫אלגוריתמים‬
‫תרגיל בית ‪4‬‬
‫להגשה עד ‪ 23‬במאי‬
‫הנחיה כללית‪ :‬בכל שאלה בה אתם מציגים אלגוריתם‪ ,‬יש להוכיח נכונות ולנתח את זמן הריצה‪ .‬ניתן להסתמך על טענות‬
‫שהוכחו בכיתה‪.‬‬
‫∈ )‪ (u, v‬ונסמן ב‪m-‬‬
‫‪ .1‬נתונים גרף מכוון )‪ G = (V, E‬והסגור הטרנזיטיבי שלו ) ∗ ‪ .G∗ = (V, E‬יהיו ‪ u, v ∈ V‬כך ש‪/ E -‬‬
‫את מספר הקשתות שנוספו ל‪ G∗ -‬כתוצאה מהוספת הקשת )‪ (u, v‬ל‪.G-‬‬
‫)א( בנו דוגמא לגרף ‪ G‬עבורו ) ‪.m = Ω(|V |2‬‬
‫)ב( תארו אלגוריתם יעיל )כתלות ב‪ (|E ∗ | ,|V | ,m-‬לעדכון ∗‪.G‬‬
‫‪ .2‬נתון גרף מכוון )‪ G = (V, E‬על קבוצת הצמתים }‪ V = {1, 2, . . . , n‬עם פונקציית משקל ‪ w : E → R‬וידוע שאין ב‪G-‬‬
‫מעגלים שליליים ביחס ל‪ .w-‬תארו אלגוריתם יעיל שמחשב‪ ,‬לכל ‪ ,1 ≤ i < j ≤ n‬את משקל המסלול הקל ביותר ‪j‬‬
‫‪i‬‬
‫מבין המסלולים שלא עוברים באף אחד מבין הצמתים }‪.{j + 1, j + 2, . . . , n‬‬
‫)כמובן שאם לזוג ‪ i, j‬מסוים קבוצת המסלולים הנ"ל ריקה‪ ,‬לא צריך לחשב מסלול זה(‬
‫‪ .3‬בצעו שינוי באלגוריתם למציאת מק"בים המבוסס על כפל מטריצות‪ ,‬כך שהוא יהפוך לאלגוריתם למציאת אורך המעגל‬
‫השלילי הקצר ביותר )ביחס למס' הקשתות( בגרף‪ .‬אין צורך למצוא את קשתות המעגל‪ .‬תארו את סיבוכיות האלגוריתם‬
‫ונתחו את נכונותו )כמו תמיד‪ ,‬אין צורך לחזור על הוכחות שנלמדו בשיעור(‪.‬‬
‫‪ .4‬נתונים גרף מכוון )‪ ,G = (V, E‬פונקצית משקל אי־שלילית ‪ w : E → R+‬וזוג צמתים ‪ .x, y ∈ V‬תארו אלגוריתם‬
‫‪u‬‬
‫יעיל שמחשב לכל זוג צמתים ‪ u, v ∈ V‬את משקל המסלול הקל ביותר מבין המסלולים )הלאו דווקא פשוטים( ‪v‬‬
‫שעוברים דרך ‪ x‬ו‪/‬או דרך ‪.y‬‬
‫אדומה ‪1‬‬
‫‪ .5‬נתון גרף לא מכוון )‪ G = (V, E‬עם פונקצית אורך ‪ .l : E → R+‬גרף זה מייצג את מפת כבישי הארץ‪ .‬חיפושית‬
‫יוצאת מצומת ‪ s ∈ V‬לכיוון צומת ‪ t ∈ V‬עם מיכל דלק מלא‪ ,‬המספיק לנסיעה למרחק ‪ .L‬בחלק מצמתי הגרף‪,U ⊆ V ,‬‬
‫ישנן תחנות דלק‪ .‬תארו אלגוריתם יעיל ביותר לחישוב מסלול קצר ביותר בין ‪ s‬ל‪ t-‬כך שהמכונית לא נתקעת )קרי‪ :‬לא‬
‫נוסעת יותר ממרחק ‪ L‬ללא תדלוק(‪.‬‬
‫‪ .6‬נתון מערך של מספרים ממשיים ‪ a1 , a2 , ..., an‬ומספר טבעי ‪-d .d ≤ n‬חלוקה של המערך הינה חלוקה שלו ל‪ d-‬מקטעים‬
‫רציפים לא ריקים‪ .‬נגדיר את המחיר של מקטע כסכום איבריו והמחיר של חלוקה כמחיר המקסימלי של מקטע שלה‪.‬‬
‫תארו אלגוריתם יעיל אשר מוצא ‪-d‬חלוקה עם מחיר מינימלי‪.‬‬
‫‪ .7‬שני שחקנים נבונים‪ A 2 ,‬ו‪ ,B-‬משחקים במשחק הבא‪ :‬נתונה סדרה של ‪ n‬מספרים שלמים מסודרים בשורה משמאל לימין‪.‬‬
‫השחקנים משחקים לסירוגין כשכל אחד בתורו לוקח את המספר הימני ביותר או את המספר השמאלי ביותר‪ .‬השחקן‬
‫‪ A‬משחק ראשון‪ .‬לאחר שנלקחו כל המספרים מחושב ערך המשחק להיות סכום המספרים ששחקן ‪ A‬בחר פחות סכום‬
‫המספרים ש‪ B-‬בחר‪ .‬מטרת שחקן ‪ A‬היא שערך המשחק יהא גדול ככל הניתן ומטרת שחקן ‪ B‬היא שערך המשחק יהיה‬
‫נמוך ככל הניתן‪ .‬תארו אלגוריתם יעיל שיחשב‪ ,‬בהינתן סדרה באורך ‪ ,n‬את ערך המשחק‪.‬‬
‫דוגמא‪ :‬אם הסדרה היא ‪ 6, 3, 3, 8, 2, 1‬אזי הערך הוא ‪.7 = 6 − 3 − 3 + 8 − 2 + 1‬‬
‫‪ .8‬בקפיטריה של אקו יש ‪ n‬מגשי אוכל ריקים‪ .‬נתון כי מגש ‪ i‬הוא באורך ‪ li‬וברוחב ‪ .wi‬ניתן למקם את מגש ‪ i‬מעל מגש ‪j‬‬
‫אם ‪ li ≤ lj‬וגם ‪ .wi ≤ wj‬על כל מגש ניתן להניח ישירות רק מגש אחד )כלומר אסור למגש להכיל שני מגשים ישירות‬
‫עליו‪ ,‬זה לצד זה(‪ .‬ניתן לסובב מגש ב־‪ 90‬מעלות על מנת שנוכל למקם אותו על מגש אחר‪ ,‬אך כל המגשים צריכים להיות‬
‫מקבילים לצירים )כלומר‪ ,‬אסור לשים מגשים באלכסון‪ ,‬ולכן סיבוב שקול להחלפה בין האורך והרוחב(‪ .‬ניתן להניח כי‬
‫‪1‬הרכב‪ ,‬לא החרק‪.‬‬
‫‪2‬כלומר‪ ,‬משחקים אופטימלית תוך צפייה מראש של מהלכיו הסבירים של השחקן האחר‪.‬‬
‫‪ {li , wj }ni=1‬הם מספרים ממשיים חיוביים שונים‪ .‬תארו אלגוריתם יעיל המחשב ערימה גדולה ככל האפשר של מגשים‬
‫הניתנים למיקום אחד על השני‪.‬‬
‫‪ .9‬נתון עץ לא מכוון עם משקלים אי־שליליים על הקשתות‪ .‬תארו אלגוריתם יעיל למציאת זיווג )כלומר‪ :‬קבוצת קשתות‬
‫שאין לאף שתיים מהן קצה משותף( בעל משקל מקסימלי בעץ‪ .‬מספר הקשתות בזיווג אינו נדרש להיות מקסימלי‪.‬‬