שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2023 - סיבוכיות

[1] ראינו כיצד להכפיל שני מספרים , כל אחד בעל סיביות בשיטת הפרד ומשול בזמן , כאשר כל מספר חולק לשני חלקים באורך סיביות כל אחד. כאשר צמצמנו את מספר הקריאות הרקורסיביות מ 4 ל 3, הסיבוכיות ירדה ל . שאלה זאת דנה בהצעה לחלק כל מספר ל3 חלקים באורך שווה, במקום רק ל2.

סעיף 5 נקודות.


א) הגדירו את
ו כל אחד כפונקציה של שלושת חלקיהם ו
ב) הראו איך ניתן לחשב את
ע"י 9 קריאות רקורסיביות (הפרד) ועוד עבודת איסוף התוצאות שעלותה לינארית ב (ומשול)
ג) מה הסיבוכיות של שיטה זו?

ד) בדומה למה שראינו במקרה של חלוקה ל2 חלקים, הראו איך, ע"י חישוב שלושת הערכים הבאים:

, ,
ניתן להוריד את מספר הקריאות הרקורסיביות מ9 ל 6.

ה) מה הנוסחה המתקבלת עבור הסיבוכיות?


(3 נקודות) בונוס: האם כדאי לחלק ל3?
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2023סמסטר ב
סיבוכיותסיבוכיות זמןרקורסיהנוסחת נסיגהסימון אסימפטוטי
כתבו את נוסחת הנסיגה עבור כל שיטה והשוו את הסיבוכיות המתקבלת באמצעות משפט המאסטר לסיבוכיות של אלגוריתם קרצובה.
א) הגדרת X ו-Y לפי שלושת חלקיהם
נניח כי מספר הסיביות
הוא חזקה של 3. נחלק כל מספר ו- לשלושה חלקים באורך סיביות כל אחד. נסמן את החלקים (מהבכיר לזוטר) ואת (מהבכיר לזוטר).
אזי ניתן לייצג את המספרים באופן הבא:

X = X_1 eta^{2} + X_2 eta + X_3
Y = Y_1 eta^{2} + Y_2 eta + Y_3
כאשר
.

ב) **חישוב
באמצעות 9 קריאות רקורסיביות**
נכפיל את הביטויים שקיבלנו בסעיף א':


פתיחת הסוגריים וסידור לפי חזקות של
נותנת:

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

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

נשתמש במשפט המאסטר כדי לפתור את הנוסחה. במקרה זה,
, , ו-.
נשווה את
ל-.
מכיוון ש-
עבור , אנו במקרה הראשון של משפט המאסטר. לכן, הסיבוכיות היא:
.
זוהי סיבוכיות זהה לשיטת הכפל הבית-ספרית.


ד) הורדת מספר הקריאות הרקורסיביות ל-6
במקום לחשב את כל 9 המכפלות ישירות, נחשב 6 מכפלות באופן הבא:

1.

2.

3.

4.

5.

6.

אלו הן 6 קריאות רקורסיביות (החיבורים לפני הכפל לוקחים זמן לינארי). כעת נבטא את המקדמים של
באמצעות 6 תוצאות אלו:
- המקדם של
הוא .
- המקדם של
הוא .
- נשים לב ש:
. לכן, המקדם של הוא .
- באופן דומה:
. לכן, המקדם של הוא .
- לבסוף:
. לכן, המקדם של שהוא שווה ל- .
כל המקדמים הדרושים חושבו באמצעות 6 מכפלות בלבד ופעולות חיבור/חיסור לינאריות.


ה) סיבוכיות השיטה המשופרת
כעת האלגוריתם מבצע 6 קריאות רקורסיביות על קלט בגודל
, ועבודה נוספת בסיבוכיות . נוסחת הנסיגה היא:

שוב נשתמש במשפט המאסטר:
, , .
החזקה הקריטית היא
.
מכיוון ש-
(כי ), אנו שוב במקרה הראשון של המשפט. הסיבוכיות היא:
.

בונוס: האם כדאי לחלק ל-3?
כדי להכריע, נשווה את סיבוכיות השיטה המוצעת לסיבוכיות אלגוריתם קרצובה, שבו מחלקים את המספר ל-2 חלקים ומבצעים 3 קריאות רקורסיביות. הסיבוכיות של קרצובה היא
.
נשווה את המעריכים:

- המעריך של קרצובה:
.
- המעריך בשיטה המוצעת:
.
מכיוון ש-
, השיטה המוצעת עם 6 הכפלות היא פחות יעילה אסימפטוטית מאלגוריתם קרצובה. לכן, לא כדאי להשתמש בה. (הערה: קיימת גרסה אופטימלית יותר של חלוקה ל-3, אלגוריתם Toom-3, המשתמש ב-5 קריאות רקורסיביות ומשיג סיבוכיות של , שהיא טובה יותר מקרצובה).