מספר הדרכים להחזיר עודף שערכו n.
חשבתי על הפתרון הבא..אבל נאמר לי שהוא לא פולינומיאלי.
לא מבין מה לא פולינומיאלי פה..זה אפילו פולינומיאלי לינארי...אבל כנראה בכל זאת אני טועה..
בשאלה אני צריך לחשב את מספר הדרכים להחזיר עודף בגודל n כאשר המטבעות שעומדים לרשותי הם מטבעות שערכיהם: 1,2,5,10 ומכל מטבע יש כמות אינסופית.
כמו כן, הסדר משנה. כלומר עודף 1,1,2 שונה עודף 2,1,1.
הגישה שניסיתי זה תכנות דינאמי .
הגדרתי פונקציה F = מספר האפשרויות שבעזרתן ניתן להחזיר עודף n.
די ברור שאפשר להגדיר את (F(n ע"H הנוסחה הרקורסיבית הבאה:
zz F = F(n-1) + F(n-2) + F(n-5) + F(n-10) zz
הקטע שאני צריך לחשב ידנית את (F(1),F(2),F(3),...,F(10.
ואז בלולאה
(for i in range (11,n+1
[F=F[i-1]+F[i-2]+F[i-5]+F[i-10
ומחוץ ללולאה אחזיר את [F[n
סה"כ זמן זה O
סה"כ מקום זה O
אבל שוב..מסתבר שזה לא המצב..הזמן אקספוננציאלי.
ודבר שני, יש דרך להימנע איכשהו מלחשב ידנית את כל ה-10 ערכים הראשונים?
חשבתי על הפתרון הבא..אבל נאמר לי שהוא לא פולינומיאלי.
לא מבין מה לא פולינומיאלי פה..זה אפילו פולינומיאלי לינארי...אבל כנראה בכל זאת אני טועה..
בשאלה אני צריך לחשב את מספר הדרכים להחזיר עודף בגודל n כאשר המטבעות שעומדים לרשותי הם מטבעות שערכיהם: 1,2,5,10 ומכל מטבע יש כמות אינסופית.
כמו כן, הסדר משנה. כלומר עודף 1,1,2 שונה עודף 2,1,1.
הגישה שניסיתי זה תכנות דינאמי .
הגדרתי פונקציה F = מספר האפשרויות שבעזרתן ניתן להחזיר עודף n.
די ברור שאפשר להגדיר את (F(n ע"H הנוסחה הרקורסיבית הבאה:
zz F = F(n-1) + F(n-2) + F(n-5) + F(n-10) zz
הקטע שאני צריך לחשב ידנית את (F(1),F(2),F(3),...,F(10.
ואז בלולאה
(for i in range (11,n+1
[F=F[i-1]+F[i-2]+F[i-5]+F[i-10
ומחוץ ללולאה אחזיר את [F[n
סה"כ זמן זה O
סה"כ מקום זה O
אבל שוב..מסתבר שזה לא המצב..הזמן אקספוננציאלי.
ודבר שני, יש דרך להימנע איכשהו מלחשב ידנית את כל ה-10 ערכים הראשונים?