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

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

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

א) הגדירו את ו כל אחד כפונקציה של שלושת חלקיהם ו

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

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


, ,

ניתן להוריד את מספר הקריאות הרקורסיביות מ9 ל 6.
ה) מה הנוסחה המתקבלת עבור הסיבוכיות?


(3 נקודות) בונוס: האם כדאי לחלק ל3?
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א · 2023 · סמסטר ב
★★★★★
סיבוכיותסיבוכיות זמןרקורסיהנוסחת נסיגהסימון אסימפטוטי
כתבו את נוסחת הנסיגה עבור כל שיטה והשוו את הסיבוכיות המתקבלת באמצעות משפט המאסטר לסיבוכיות של אלגוריתם קרצובה.
א) הגדרת X ו-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 קריאות רקורסיביות ומשיג סיבוכיות של , שהיא טובה יותר מקרצובה).