שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2023 - סיבוכיות
[1] ראינו כיצד להכפיל שני מספרים , כל אחד בעל סיביות בשיטת הפרד ומשול בזמן , כאשר כל מספר חולק לשני חלקים באורך סיביות כל אחד. כאשר צמצמנו את מספר הקריאות הרקורסיביות מ 4 ל 3, הסיבוכיות ירדה ל . שאלה זאת דנה בהצעה לחלק כל מספר ל3 חלקים באורך שווה, במקום רק ל2.
סעיף 5 נקודות.
א) הגדירו את ו כל אחד כפונקציה של שלושת חלקיהם ו
ב) הראו איך ניתן לחשב את ע"י 9 קריאות רקורסיביות (הפרד) ועוד עבודת איסוף התוצאות שעלותה לינארית ב (ומשול)
ג) מה הסיבוכיות של שיטה זו?
ד) בדומה למה שראינו במקרה של חלוקה ל2 חלקים, הראו איך, ע"י חישוב שלושת הערכים הבאים:
, ,
ניתן להוריד את מספר הקריאות הרקורסיביות מ9 ל 6.
ה) מה הנוסחה המתקבלת עבור הסיבוכיות?
(3 נקודות) בונוס: האם כדאי לחלק ל3?
סעיף 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 קריאות רקורסיביות ומשיג סיבוכיות של , שהיא טובה יותר מקרצובה).
נניח כי מספר הסיביות הוא חזקה של 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 קריאות רקורסיביות ומשיג סיבוכיות של , שהיא טובה יותר מקרצובה).