שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2011 - סיבוכיות זמן
נתונים שני מערכים ממוינים ו- של גודל ו- בהתאמה. הדחף בגדול ו-, תמיד מספר משהו על ספר משהו .
בדוגמא לדעת התאם קיימים , כך ש . כתוב \ אלגוריתם שבודקת זאת בזמן .
בדוגמא לדעת התאם קיימים , כך ש . כתוב \ אלגוריתם שבודקת זאת בזמן .
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד ב2011סמסטר ב
★★★★★
סיבוכיות זמןסיבוכיות מקוםחיפושאלגוריתם שני מצביעים
השתמשו בשני מצביעים, אחד שמתחיל בתחילת המערך הראשון והשני שמתחיל בסוף המערך השני. קדמו את המצביעים באופן לינארי על סמך סכום האיברים שהם מצביעים עליהם.
הפתרון היעיל לבעיה זו מנצל את העובדה ששני המערכים ממוינים ומשתמש בטכניקת שני המצביעים (Two Pointers).
האלגוריתם פועל באופן הבא:
1. אתחול שני מצביעים:
* מצביע
* מצביע
2. נבצע לולאה כל עוד המצביעים לא חרגו מגבולות המערכים, כלומר כל עוד וגם .
בכל איטרציה של הלולאה:
* נחשב את הסכום הנוכחי: .
* נשווה את לערך המטרה :
* אם : מצאנו זוג איברים שסכומם הוא . האלגוריתם יחזיר
* אם : הסכום הנוכחי קטן מדי. כדי להגדיל את הסכום, עלינו לבחור איבר גדול יותר. מכיוון שמערך ממוין בסדר עולה, נקדם את המצביע לאיבר הבא: . קידום מגדיל (או לא משנה) את ערך ובכך את הסכום, ומקרב אותנו לפתרון.
* אם : הסכום הנוכחי גדול מדי. כדי להקטין את הסכום, עלינו לבחור איבר קטן יותר. מכיוון שמערך ממוין בסדר עולה, והתחלנו מהסוף, נזיז את המצביע לאיבר הקודם: . הזזת אחורה מקטינה (או לא משנה) את ערך ובכך את הסכום.
3. אם הלולאה מסתיימת (מצב בו או ) מבלי שנמצא זוג שסכומו , פירוש הדבר שזוג כזה אינו קיים. במקרה זה, האלגוריתם יחזיר
הוכחת נכונות:
בכל צעד, האלגוריתם פוסל איבר אחד מהמשך החיפוש: אם , אנו פוסלים את . אם , אנו פוסלים את .
- כאשר , אנו פוסלים את . האם זה מוצדק? כן, כי לכל איבר עם , יתקיים (כי ממוין), ולכן . כלומר, לא יכול ליצור את הסכום עם אף אחד מהאיברים הנותרים ב- (אלה שמימין ל- כבר נפסלו).
- כאשר , אנו פוסלים את . האם זה מוצדק? כן, כי לכל איבר עם , יתקיים (כי ממוין), ולכן . כלומר, לא יכול ליצור את הסכום עם אף אחד מהאיברים הנותרים ב-.
האלגוריתם סורק את כל הזוגות האפשריים באופן שיטתי, ובכל צעד פוסל באופן נכון חלק ממרחב החיפוש, ולכן הוא נכון.
ניתוח סיבוכיות:
* סיבוכיות זמן: בכל איטרציה של הלולאה, או ש- גדל ב-1 או ש- קטן ב-1. מתחיל ב-0 ונעצר ב-, ו- מתחיל ב- ונעצר ב-1-. לכן, מספר האיטרציות הכולל חסום על ידי . כל איטרציה היא , ולכן סיבוכיות הזמן הכוללת היא .
* סיבוכיות מקום: האלגוריתם משתמש במספר קבוע של משתנים נוספים (שני מצביעים ומשתנה לסכום), ללא תלות בגודל הקלט. לכן, סיבוכיות המקום היא .
האלגוריתם פועל באופן הבא:
1. אתחול שני מצביעים:
* מצביע
i המצביע לתחילת מערך (אינדקס 0).* מצביע
j המצביע לסוף מערך (אינדקס ).2. נבצע לולאה כל עוד המצביעים לא חרגו מגבולות המערכים, כלומר כל עוד וגם .
בכל איטרציה של הלולאה:
* נחשב את הסכום הנוכחי: .
* נשווה את לערך המטרה :
* אם : מצאנו זוג איברים שסכומם הוא . האלגוריתם יחזיר
true ויסיים.* אם : הסכום הנוכחי קטן מדי. כדי להגדיל את הסכום, עלינו לבחור איבר גדול יותר. מכיוון שמערך ממוין בסדר עולה, נקדם את המצביע לאיבר הבא: . קידום מגדיל (או לא משנה) את ערך ובכך את הסכום, ומקרב אותנו לפתרון.
* אם : הסכום הנוכחי גדול מדי. כדי להקטין את הסכום, עלינו לבחור איבר קטן יותר. מכיוון שמערך ממוין בסדר עולה, והתחלנו מהסוף, נזיז את המצביע לאיבר הקודם: . הזזת אחורה מקטינה (או לא משנה) את ערך ובכך את הסכום.
3. אם הלולאה מסתיימת (מצב בו או ) מבלי שנמצא זוג שסכומו , פירוש הדבר שזוג כזה אינו קיים. במקרה זה, האלגוריתם יחזיר
false.הוכחת נכונות:
בכל צעד, האלגוריתם פוסל איבר אחד מהמשך החיפוש: אם , אנו פוסלים את . אם , אנו פוסלים את .
- כאשר , אנו פוסלים את . האם זה מוצדק? כן, כי לכל איבר עם , יתקיים (כי ממוין), ולכן . כלומר, לא יכול ליצור את הסכום עם אף אחד מהאיברים הנותרים ב- (אלה שמימין ל- כבר נפסלו).
- כאשר , אנו פוסלים את . האם זה מוצדק? כן, כי לכל איבר עם , יתקיים (כי ממוין), ולכן . כלומר, לא יכול ליצור את הסכום עם אף אחד מהאיברים הנותרים ב-.
האלגוריתם סורק את כל הזוגות האפשריים באופן שיטתי, ובכל צעד פוסל באופן נכון חלק ממרחב החיפוש, ולכן הוא נכון.
ניתוח סיבוכיות:
* סיבוכיות זמן: בכל איטרציה של הלולאה, או ש- גדל ב-1 או ש- קטן ב-1. מתחיל ב-0 ונעצר ב-, ו- מתחיל ב- ונעצר ב-1-. לכן, מספר האיטרציות הכולל חסום על ידי . כל איטרציה היא , ולכן סיבוכיות הזמן הכוללת היא .
* סיבוכיות מקום: האלגוריתם משתמש במספר קבוע של משתנים נוספים (שני מצביעים ומשתנה לסכום), ללא תלות בגודל הקלט. לכן, סיבוכיות המקום היא .