DR. IGOR DATA SCIENCEAI, Data & Creativity · From Data to Impact
הרצאה 1 · נושא 7/10
אלגברה ליניארית למדעי הנתונים

סיבוכיות עבודה עם וקטורים

קוד צריך להיות נכון — אבל גם יעיל. נלמד לספור פעולות, למדוד זמן ריצה ולהתמקד בהתנהגות האסימפטוטית.

O(N)
Nscalar products
Nadditions
2N−1dot product
01

נכונות אינה מספיקה

איך נדע אם קטע קוד יעיל?

הקוד חייב להיות נכון

תוצאה נכונה היא תנאי ראשון, אך לא אחרון.

מדידת זמן ריצה

מריצים את הקוד ומודדים כמה זמן הוא דורש.

ספירת פעולות

סופרים פעולות בסיסיות ומנתחים כיצד המספר גדל עם \(N\).

התנהגות אסימפטוטית: מתעלמים מקבועים ומאיברים לא דומיננטיים ומתמקדים בקצב הגידול כאשר \(N\) גדול.
02

עלות פעולות על וקטורים צפופים

כל הרכיבים נשמרים ומעובדים.

כפל בסקלר

\[\alpha x\]

\(N\) מכפלות.

O(N)

חיבור שני וקטורים

\[x+y\]

\(N\) חיבורים.

O(N)

מכפלה פנימית

\[x^Ty\]

\(N\) מכפלות ועוד \(N-1\) חיבורים: בסך הכול \(2N-1\).

O(N)

שנו את גודל הווקטור

Scalar × vector
100
Vector addition
100
Inner product
199
03

וקטורים דלילים

כאשר רוב האיברים הם אפס, אין תמיד צורך לבצע עבודה על כל \(N\) המקומות.

0
0
5
0
0
−2
0
0
0
7
0
0
\[N=12,\qquad NNZ(x)=3\]

החישובים מן השקופית

\[ \alpha x:\quad NNZ(x)\ \text{פעולות} \] \[ x+y:\quad \min(NNZ(x),NNZ(y)) \] \[ x^Ty:\quad 2\min(NNZ(x),NNZ(y)) \]
הבהרה חשובה: הנוסחאות המקוצרות בשקופית מניחות ייצוג דליל ותנאים מתאימים על מיקומי האיברים הלא־אפסיים. בפועל העלות המדויקת תלויה במבנה הנתונים ובחפיפה בין התמיכות.
04

מדידת זמן בקוד

הרחבה פרקטית לחומר המקורי.

Python / NumPytimeit
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)
לא להסיק ממדידה אחת בלבד: זמן ריצה תלוי במחשב, בעומס, בספריות ובאופן המימוש. ניתוח אסימפטוטי נותן תמונה כללית יותר.
05

תרגול קצר

לספור פעולות לפני שכותבים קוד.

משימה 1

וקטורים \(x,y\) באורך \(500\). כמה פעולות בסיסיות דורשת המכפלה הפנימית לפי הספירה בשקופית?

\[500+(500-1)=999\]

משימה 2

וקטור באורך מיליון מכיל 40 איברים לא־אפסיים. כמה מכפלות נדרשות ל-\(\alpha x\) בייצוג דליל מתאים?

\[NNZ(x)=40\]

נדרשות 40 מכפלות במקום מיליון.

06

Take-home message

היעילות מתחילה בהבנת מבנה הפעולה.

1בודקים גם נכונות וגם יעילות.
2אפשר למדוד זמן או לספור פעולות בסיסיות.
3כפל בסקלר, חיבור ומכפלה פנימית הם \(O(N)\).
4\(2N-1\) עדיין נחשב \(O(N)\).
5וקטורים דלילים מאפשרים לחסוך עבודה.
6העלות המדויקת תלויה בייצוג ובחפיפת התמיכות.

מפת כיסוי

שקופיות 72–75 נשמרו והורחבו.

שקופיתהחומר המקוריהמיקום החדש
72כותרת 1.6 — סיבוכיות עבודהHero
73נכונות, יעילות, זמן ריצה, ספירת פעולות והתנהגות אסימפטוטיתנכונות אינה מספיקה
74\(N\), \(N\), \(2N-1\) פעולות ו-\(O(N)\)כרטיסי עלות + מחוון
75חישוב עם וקטורים דלילים ו-\(NNZ\)המחשה דלילה + הבהרת הנחות