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

‫אלגוריתמים‬
‫תרגיל בית ‪5‬‬
‫להגשה עד ‪ 18‬ליוני‬
‫הנחיה כללית‪ :‬בכל שאלה בה אתם מציגים אלגוריתם‪ ,‬יש להוכיח נכונות ולנתח את זמן הריצה‪ .‬ניתן להסתמך על טענות‬
‫שהוכחו בכיתה‪.‬‬
‫‪ S‬ל‪ k -‬חלקים זרים כאשר ‪1 .1 < k < n‬‬
‫‪ .1‬נסמן }‪ S = {1, 2, . . . , n‬ותהיינה } ‪ {A1 , . . . , Ak } , {B1 , . . . , Bk‬שתי חלוקות של‬
‫תארו אלגוריתם יעיל לחישוב תת־קבוצה ‪ T ⊂ S‬בת ‪ k‬איברים החותכת את כל ‪ 2k‬הקבוצות )אם קיימת כזו(; כלומר‪,‬‬
‫לכל ‪ 1 ≤ i ≤ n‬מתקיים ∅ =‪.Bi ∩ T 6= ∅ ,Ai ∩ T 6‬‬
‫‪ .2‬נתון גרף לא מכוון )‪ .G = (V, E‬תארו אלגוריתם יעיל המכוון את קשתות הגרף כך שלכל צומת דרגת יציאה לפחות ‪3‬‬
‫)או מודיע שלא ניתן לעשות זאת(‪.‬‬
‫‪ .3‬נתונים גרף קשיר ולא מכוון )‪ ,G = (V, E‬פונקצית משקל ‪ ,w : E → R‬קשת ‪ ,e ∈ E‬ומספר שלם ‪ .k > 0‬תארו‬
‫אלגוריתם יעיל ככל האפשר שיקבע האם ניתן להסיר מן הגרף לכל היותר ‪ k‬קשתות‪ ,‬כך שהקשת ‪ e‬תהיה שייכת לעץ‬
‫פורש מינימלי של הגרף שיתקבל‪.‬‬
‫רמז‪ :‬מומלץ להשתמש באלגוריתם שראינו באחד מהתירגולים בנושא זרימה‪.‬‬
‫‪ .4‬שי ואילן מחליטים לפרוש בשיא מחיי האקדמיה ולנסות להפיק סרט קולנוע‪ .‬בידם רשימה } ‪A = {a1 , a2 , ..., an‬‬
‫של שחקנים אשר מוכנים להשתתף בסרט‪ .‬שחקן ‪ ai‬דורש שכר ‪ pi‬עבור השתתפותו בסרט‪ .‬בנוסף‪ ,‬ישנה קבוצה‬
‫} ‪ B = {b1 , b2 , ..., bm‬של משקיעים המעוניינים להשקיע בסרט‪ .‬משקיע ‪ bj‬מוכן להשקיע בסרט מימון בשווי ‪ ,qj‬אבל‬
‫רק בתנאי שכל השחקנים האהובים עליו ישתתפו בסרט‪ .‬נסמן ב‪ Aj ⊆ A-‬את קבוצת השחקנים האהובים על משקיע‬
‫‪ .bj‬תארו אלגוריתם ליהוק יעיל שימצא בחירת שחקנים ומשקיעים המניבה רווח הפקה )קרי‪ :‬סך המימון שהתקבל פחות‬
‫עלויות השכר לשחקנים שהועסקו( מירבי‪.‬‬
‫רמז‪ :‬הגדירו רשת זרימה והרהרו במשמעות קיבול החתך המינימלי‪.‬‬
‫‪ .5‬נתון מערך של מספרים ממשיים ‪ a1 , a2 , ..., an‬ומספר טבעי ‪-d .d ≤ n‬חלוקה של המערך הינה חלוקה שלו ל‪ d-‬מקטעים‬
‫רציפים לא ריקים‪ .‬נגדיר את המחיר של מקטע כסכום איבריו והמחיר של חלוקה כמחיר המקסימלי של מקטע שלה‪.‬‬
‫תארו אלגוריתם יעיל אשר מוצא ‪-d‬חלוקה עם מחיר מינימלי‪.‬‬
‫‪ .6‬שני שחקנים נבונים‪ A 2 ,‬ו‪ ,B-‬משחקים במשחק הבא‪ :‬נתונה סדרה של ‪ n‬מספרים שלמים מסודרים בשורה משמאל לימין‪.‬‬
‫השחקנים משחקים לסירוגין כשכל אחד בתורו לוקח את המספר הימני ביותר או את המספר השמאלי ביותר‪ .‬השחקן‬
‫‪ A‬משחק ראשון‪ .‬לאחר שנלקחו כל המספרים מחושב ערך המשחק להיות סכום המספרים ששחקן ‪ A‬בחר פחות סכום‬
‫המספרים ש‪ B-‬בחר‪ .‬מטרת שחקן ‪ A‬היא שערך המשחק יהא גדול ככל הניתן ומטרת שחקן ‪ B‬היא שערך המשחק יהיה‬
‫נמוך ככל הניתן‪ .‬תארו אלגוריתם יעיל שיחשב‪ ,‬בהינתן סדרה באורך ‪ ,n‬את ערך המשחק‪.‬‬
‫דוגמא‪ :‬אם הסדרה היא ‪ 6, 3, 3, 8, 2, 1‬אזי הערך הוא ‪.7 = 6 − 3 − 3 + 8 − 2 + 1‬‬
‫‪ .7‬בקפיטריה של אקו יש ‪ n‬מגשי אוכל ריקים‪ .‬נתון כי מגש ‪ i‬הוא באורך ‪ li‬וברוחב ‪ .wi‬ניתן למקם את מגש ‪ i‬מעל מגש ‪j‬‬
‫אם ‪ li ≤ lj‬וגם ‪ .wi ≤ wj‬על כל מגש ניתן להניח ישירות רק מגש אחד )כלומר אסור למגש להכיל שני מגשים ישירות‬
‫עליו‪ ,‬זה לצד זה(‪ .‬ניתן לסובב מגש ב־‪ 90‬מעלות על מנת שנוכל למקם אותו על מגש אחר‪ ,‬אך כל המגשים צריכים להיות‬
‫מקבילים לצירים )כלומר‪ ,‬אסור לשים מגשים באלכסון‪ ,‬ולכן סיבוב שקול להחלפה בין האורך והרוחב(‪ .‬ניתן להניח כי‬
‫‪ {li , wj }ni=1‬הם מספרים ממשיים חיוביים שונים‪ .‬תארו אלגוריתם יעיל המחשב ערימה גדולה ככל האפשר של מגשים‬
‫הניתנים למיקום אחד על השני‪.‬‬
‫‪1‬במילים אחרות‪ ki=1 Ai = ki=1 Bi = S ,‬ולכל ‪.Ai ∩ Aj = Bi ∩ Bj = ∅ ,1 ≤ i < j ≤ k‬‬
‫‪2‬כלומר‪ ,‬משחקים אופטימלית תוך צפייה מראש של מהלכיו הסבירים של השחקן האחר‪.‬‬
‫‪S‬‬
‫‪S‬‬
‫‪ .8‬נתונים ‪ n‬מטבעות‪ ,‬כולם שווי משקל פרט לאחד שהוא כבד יותר‪ .‬החנווני במכולת גובה מחיר )‪ p (s‬עבור כל שימוש‬
‫במאזניים שלו לשקילת ‪ s‬מטבעות כלשהם מול ‪ s‬מטבעות אחרים )כאשר שקילה מודיעה לנו איזה צד יותר כבד‪ ,‬או‬
‫קובעת שלשתי הקבוצות אותו משקל(‪ .‬ניתן להניח כי ‪ p‬פונקציה חיובית מונוטונית לא יורדת‪.‬‬
‫)א( תארו אלגוריתם יעיל ככל האפשר המקבל את המחירון ‪ p‬ומחשב את העלות המינימלית של מציאת המטבע הכבד‪.‬‬
‫)ב( שפרו את האלגוריתם כך שיחזיר גם את אוסף השקילות המתאים לעלות זו‪.‬‬
‫הערה‪ :‬שימו לב כי כל שקילה מתבצעת לאחר שידועות תוצאות השקילות הקודמות‪.‬‬