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

הבינו שקוד שפותר את הבעיה זה לא העיקר. חשוב שהפתרון יהיה יעיל. לכן יש דרך לבדוק עד כמה התכנית שכתבנו יעילה.

כאשר נשאלים על סיבוכיות האפשרויות הן בדרך כלל:

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 הוא מספר הספרות.