מבני נתונים ואלגוריתמים - מחברת קורס/אלגוריתמים/תכנון דינאמי/תרגילים/תכנון פרוייקטים/שאלה

מתוך testwiki
קפיצה לניווט קפיצה לחיפוש

בבעיית "תכנון הפרוייקטים" יש k פרוייקטים וn עובדות. צריך להחליט כמה עובדות יש להקצות לכל אחד מהפרוייקטים.

לכל פרוייקט 1ik ומספר עובדות 1jn, ‏ q(i,j) הוא מספר המייצג את איכות ביצוע הפרוייקט הi אם ישבצו לו j עובדות. הנח:

  1. q(i,j) פונקציה לא שלילית (אין איכות שלילית).
  2. q(i,j) מונוטונית לא-יורדת בj (הוספת עובדות לפרוייקט אינה מורידה מאיכותו).
  3. ניתן להקצות 0 עובדות לפרוייקט.
  4. כל עובדת מוקצת לפרוייקט אחד בדיוק.

לכל פרוייקט i יש "חשיבות" לא-שלילית h(i). אנו רוצים למקסם את סך האיכויות המשוקללות. במילים אחרות, אנו רוצים למקסם את maxi1,i2,,in:i10,,in0,i1++in=n[h(i)q(i,j)].

אנא הצע אלגוריתם יעיל לפתרון הבעיה, כלומר אלגוריתם שימצא את הסכום הנ"ל המקסימלי וכן ידפיס את אופן הקצאת העובדות לכל פרוייקט. הנח שתבנית:קוד בשורה ותבנית:קוד בשורה הן פונקציות נתונות לך, שעלות קריאה להן היא O(1).