כללים לניסוח נימוק של סיבוכיות לשאלות בגרות במדעי ...

כללים לניסוח נימוק של סיבוכיות לשאלות בגרות במדעי המחשב:

כאשר נשאלים על סיבוכיות האפשרויות הן בדרך כלל:
O(1) - כאשר יש מספר קבוע של פעולות
O(logn) - חיפוש בינארי
O(n) - חיפוש סידרתי: מעבר על מערך/מחסנית/תור/שרשרת חוליות
O(n^2) - לולאה מקוננת בד"כ

כאשר אנו עונים על סיבוכיות כזו או אחרת יש להתחשב בפעולות עזר / פעולות שאנו משתמשים בהם.



דוגמה ראשונה:
סריקת מערך בגודל n:
for(int i=0; i<arr.length;i++) //O(n)
{
// o(1)
}

במידה וסורקים מערך ובגוף הלולאה מבצעים מספר קבוע של פעולות הסיבוכיות היא O(n) כאשר n הוא מספר האיברים.


דוגמה שנייה:
לולאת for מקוננת:
for(int i=0; i<n; i++) //O(n)
}
for(int j=0; j<m ; j++) //O(m)
{
//o(1)
}
}

בלולאה מקוננת אם גופי הלולאה מבצעים מספר קבוע של פעמים אז הסיבוכיות היא o(n*m).

דוגמאות: סריקת מרך דו ממדי, סריקת כל הזוגות האפשריים במערך חד ממדי.


דוגמה שלישית:
סריקת תור / מחסנית / רשימה / מערך: אם במהלך הסריקה מבצעים מספר קבוע של פעולות אזי הסיבוכיות היא o(n) כאשר n הוא גודל מבנה הנתונים.

במידה ובגוף הסריקה קוראים לפעולת עזר / מבצעים לולאה נוספת, אזי מבצעים כפל בין הסיבוכיות.

דוגמה רביעית:
פונקציה שסוכמת / סופרת את כמות הספרות.
יש להבין שהסיבוכיות כאן תלויה במספר הספרות, לכן הסיבוכיות היא O(n) כאשר n הוא מספר הספרות.