הקוד חייב להיות נכון
תוצאה נכונה היא תנאי ראשון, אך לא אחרון.
קוד צריך להיות נכון — אבל גם יעיל. נלמד לספור פעולות, למדוד זמן ריצה ולהתמקד בהתנהגות האסימפטוטית.
איך נדע אם קטע קוד יעיל?
תוצאה נכונה היא תנאי ראשון, אך לא אחרון.
מריצים את הקוד ומודדים כמה זמן הוא דורש.
סופרים פעולות בסיסיות ומנתחים כיצד המספר גדל עם \(N\).
כל הרכיבים נשמרים ומעובדים.
\(N\) מכפלות.
\(N\) חיבורים.
\(N\) מכפלות ועוד \(N-1\) חיבורים: בסך הכול \(2N-1\).
כאשר רוב האיברים הם אפס, אין תמיד צורך לבצע עבודה על כל \(N\) המקומות.
הרחבה פרקטית לחומר המקורי.
import timeit import numpy as np n = 1_000_000 x = np.ones(n) y = np.ones(n) elapsed = timeit.timeit( lambda: x @ y, number=20 ) print(elapsed)
לספור פעולות לפני שכותבים קוד.
וקטורים \(x,y\) באורך \(500\). כמה פעולות בסיסיות דורשת המכפלה הפנימית לפי הספירה בשקופית?
וקטור באורך מיליון מכיל 40 איברים לא־אפסיים. כמה מכפלות נדרשות ל-\(\alpha x\) בייצוג דליל מתאים?
נדרשות 40 מכפלות במקום מיליון.
היעילות מתחילה בהבנת מבנה הפעולה.
שקופיות 72–75 נשמרו והורחבו.