האם במימוש של Polynomial_sparse אפשר להשתמש באותה פונקציית init של Polynomial? כי השינוי היחיד הוא שב-Polynomial_sparse אני רוצה שהפונקצייה תקבל קלט מצורה אחרת, אבל היא עדיין תקבל רק פרמטר אחד..
וגם, איפה אני מציין מאיזו צורה אני רוצה שהמשתמש יעביר את הקלט לפונקצייה?
מימוש זהה לחלוטין של פונקציית __init__ עלול להיות בעייתי כאן, הרי עליך לאפשר גם אתחול באופן יעיל יותר.
אבל: הגיוני שהפונקציה ב- Polynomial_sparse תקבל גם היא רק פרמטר אחד.
תוכלו להשתמש בפונקציה isinstance על מנת לבדוק מה סוג הפרמטר שקיבלתם, כדי להפריד בין איתחול רגיל (כמו ב Polynomial) לבין איתחול יעיל.
מיושר!
כדי לאתחל באופן יעיל צריך לשלוח נתונים אחרים ל__init__.
כל אחד יממש את זה קצת/הרבה אחרת.
אתם תעברו על הקוד כדי לראות מה ניתן לשלוח לפונקציה? האם יש צורך לתאר איפשהו מה היא עוד יכולה לקבל?
נכון מאוד.
הפונקציה צריכה להיות מסוגלת לקבל קלט כמו בסעיף א' ואז האיתחול יקח O(n), אבל על מנת לאפשר איתחול יעיל יותר יהיה עליה להיות מסוגלת לקבל קלט מצורה שונה.
הסעיף הזה יבדק בעין (ולא רק אוטומטית).
על מנת שהקוד שלכם יהיה קריא יותר (וגם כדי להקל עלינו את הבדיקה) כדאי להוסיף הערות בקוד (תיעוד) שמתארות מה הפונקציה מצפה לקבל.
שואל כדי לוודא (כי אני לא בטוח שהבנתי):
האם ע"מ לאתחל אובייקט במחלקה החדשה אני יכול להשתמש בקלט שאינו רשימה?
כן.
פןנקציית __init__ שלך תצטרך לתמוך בשני סוגי קלטים.
האחד הינו רשימה, כפי שנתבקשתם מפורשות בסעיף ג'.
השני יהיה בהתאם לייצוג הפנימי בו בחרתם להשתמש (כדי לאפשר איתחול יעיל של אובייקט מסוג פולינום דליל).
הבנתי שאפשר לשלוח לפונקצית האיתחול פרמטר אחד ושאפשר לזהות את סוגו לפי פונקציית isinstance.
אבל אם בחרתי בייצוג על ידי שתי רשימות איך אשלח אותם לאיתחול? ואם אאחד אותן לרשימה אחת איך אבחין בין אתחול רגיל כמו בפולינום ולבין אתחול של פולינום דליל שכן בשני המקרים init תקבל רשימה?
עדיין יהיה אפשר לקבל נגזרת לפולינום דליל מסויים (בסיבוכיות k) רק אם יוצרים אותו בדרך שאני בחרתי, כך שהtest בתרגיל יציג סיבוכיות o(n)
האם זה בסדר? כלומר הבודק יכתוב test לקוד לפי המימוש שלי?
לא, זה לא בסדר…
מבחינתכם הבודק יאתחל פולינומים רק באמצעות רשימה רגילה כמו בסעיף א'.
derivative צריכה לרוץ בכל מקרה בזמן O(k), לא משנה כיצד אותחל הפולינום.
הבודק עלול להריץ קוד כזה:
q = Polynomial_sparse([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6]) dq = q.derivative()
השורה הראשונה תיצור פולינום בזמן O(n).
השורה השניה תיצור פולינום חדש שהוא הנגזרת של המקורי ותעבוד בזמן O(k) כאשר k הוא מספר המקדמים השונים מ-0.