שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2011 - סיבוכיות זמן
נתון מערך של מספרים (לא ממוינים). עלינו לבצע עיבוד מקדים בזמן לינארי, כך שלאחר מכן בהינתן שאילתא עבור נוכל להחזיר את הסכום של תת המערך בזמן . תארו כיצד נבצע את העיבוד המקדים, מהם הערכים אותם נשמור, וכיצד נענה על כל שאילתא.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2011סמסטר ב
★★★★★
סיבוכיות זמןסיבוכיות מקוםעיבוד מקדיםמערכים
חשבו כיצד ניתן לחשב מראש, בזמן לינארי, את הסכומים של כל תתי-המערכים שמתחילים באינדקס הראשון. לאחר מכן, הראו כיצד ניתן להשתמש במידע זה כדי לחשב סכום של כל תת-מערך בפעולה אריתמטית אחת.
על מנת לענות על שאילתות סכום בטווח בזמן קבוע () לאחר עיבוד מקדים לינארי (), נשתמש בטכניקה של מערך סכומים מתחיליים (Prefix Sum Array).
שלב העיבוד המקדים:
ניצור מערך עזר חדש, נקרא לו , בגודל . כל תא במערך זה יכיל את סכום כל האיברים במערך המקורי מהאינדקס הראשון ועד לאינדקס . כלומר, .
נגדיר את המערך באופן הבא:
1. נאתחל את .
2. נחשב את שאר ערכי המערך באופן איטרטיבי בלולאה מ- עד :
ניתוח סיבוכיות העיבוד המקדים:
הבנייה של המערך דורשת מעבר יחיד על המערך . הלולאה רצה פעמים, ובכל איטרציה מתבצעת פעולת חיבור אחת והשמה אחת. לכן, סיבוכיות הזמן של העיבוד המקדים היא , כנדרש. סיבוכיות המקום הנוספת היא עבור שמירת המערך .
הערכים הנשמרים:
המידע היחיד שצריך לשמור לאחר העיבוד המקדים הוא מערך הסכומים המתחיליים .
**מענה על שאילתא :**
בהינתן שאילתא לחשב את סכום תת-המערך , נוכל להשתמש במערך כדי לקבל את התשובה בזמן קבוע. הסכום המבוקש הוא .
ניתן לבטא סכום זה באמצעות ערכים מתוך :
על פי הגדרת המערך , ביטוי זה שקול ל:
ניתוח סיבוכיות השאילתא:
חישוב התשובה לשאילתא דורש שתי גישות למערך ופעולת חיסור אחת. כל הפעולות הללו לוקחות זמן קבוע, ולכן סיבוכיות הזמן למענה על שאילתא היא , כנדרש.
לסיכום, על ידי בניית מערך סכומים מתחיליים בזמן לינארי, אנו יכולים לענות על כל שאילתת סכום בטווח בזמן קבוע.
שלב העיבוד המקדים:
ניצור מערך עזר חדש, נקרא לו , בגודל . כל תא במערך זה יכיל את סכום כל האיברים במערך המקורי מהאינדקס הראשון ועד לאינדקס . כלומר, .
נגדיר את המערך באופן הבא:
1. נאתחל את .
2. נחשב את שאר ערכי המערך באופן איטרטיבי בלולאה מ- עד :
ניתוח סיבוכיות העיבוד המקדים:
הבנייה של המערך דורשת מעבר יחיד על המערך . הלולאה רצה פעמים, ובכל איטרציה מתבצעת פעולת חיבור אחת והשמה אחת. לכן, סיבוכיות הזמן של העיבוד המקדים היא , כנדרש. סיבוכיות המקום הנוספת היא עבור שמירת המערך .
הערכים הנשמרים:
המידע היחיד שצריך לשמור לאחר העיבוד המקדים הוא מערך הסכומים המתחיליים .
**מענה על שאילתא :**
בהינתן שאילתא לחשב את סכום תת-המערך , נוכל להשתמש במערך כדי לקבל את התשובה בזמן קבוע. הסכום המבוקש הוא .
ניתן לבטא סכום זה באמצעות ערכים מתוך :
על פי הגדרת המערך , ביטוי זה שקול ל:
ניתוח סיבוכיות השאילתא:
חישוב התשובה לשאילתא דורש שתי גישות למערך ופעולת חיסור אחת. כל הפעולות הללו לוקחות זמן קבוע, ולכן סיבוכיות הזמן למענה על שאילתא היא , כנדרש.
לסיכום, על ידי בניית מערך סכומים מתחיליים בזמן לינארי, אנו יכולים לענות על כל שאילתת סכום בטווח בזמן קבוע.