סיבוכיות זמן – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
תמונה
←‏פתיח: צמצום כפילויות
שורה 1:
[[קובץ:Comparison computational complexity.svg|300px|ממוזער|פונקציות הנפוצות ב[[ניתוח אלגוריתמים]] המציגות את מספר הפעולות הנדרשות לפונקציה לעומת גודל הקלט]]
בתורת ה[[חישוביות]], '''סיבוכיות זמן''' של [[אלגוריתם]] היא הערכה, באמצעות [[חסם|חסמים]], על מספר הפעולות שמבצע האלגוריתם במהלך פעולתו, כ[[פונקציה]] של גודל ה[[מורכבות קלט|מורכבות הקלט]].
 
אין בוחנים את זמן הריצה ביחידות זמן (כגון שניות), משום שמשך הזמן לביצוע פעולה תלוי ב[[מודל חישובי|מודל החישובי]] וב[[מחשב]] שעליו רץ האלגוריתם. למשל, ייתכן שבמודל או בארכיטקטורה מסוימת ניתן [[חילוק|לחלק]] שני מספרים בצעד אחד, ואילו במודל או ארכיטקטורה אחרת יידרשו לאותה פעולה מספר צעדים. משום כך, בניתוח הסיבוכיות של אלגוריתם מקובל להביא בחשבון רק את סדרי הגודל, ולהתעלם מקבועים. למשל, אלגוריתם המבצע 8n+112 פעולות על קלט בגודל n הוא בעל "[[סיבוכיות_זמן#זמן_ריצה_ליניארי|זמן ריצה ליניארי]]".
היות שמספר הפעולות שמבצע אלגוריתם משתנה על פי רוב בהתאם לגודל ה[[קלט]] שלו (דהיינו: אין לצפות שאלגוריתם למיון יסתיים לאחר אותו מספר צעדים כאשר הוא נדרש למיין 10 מספרים או 1000), מוגדרת מורכבות הקלט על פי רוב כגודל ה[[קלט]].
 
אין בוחנים את זמן הריצה ביחידות זמן (שניות, דקות וכו'), שכן משך הזמן לביצוע פעולות משתנה מסביבת ריצה אחת לשנייה. [[פעולה (פיזיקה)|הפעולה]] (הניתנת לביצוע בצעד בודד) עשויה להיות שונה בין [[מודל חישובי|מודלים חישוביים]] שונים - ובוודאי בין [[מחשב|מחשבים]] שונים. למשל, ייתכן שבמודל או בארכיטקטורה מסוימת ניתן [[חילוק|לחלק]] שני מספרים בצעד אחד, ואילו במודל או ארכיטקטורה אחרת יידרשו לאותה פעולה מספר צעדים.
 
לכן, במדעי המחשב נוטים להתעלם מקבועים בעת התייחסות לסיבוכיות זמן ריצה של [[אלגוריתם]], ולומר, למשל, כי הן אלגוריתם שדורש 8n צעדים על קלטים ממורכבות n, והן אלגוריתם שדורש 112n+88 צעדים על קלטים כאלו הם שניהם אלגוריתמים בעלי [[סיבוכיות_זמן#זמן_ריצה_ליניארי|זמן ריצה ליניארי]].
 
הסימון הרווח לזמן הריצה של אלגוריתמים הוא: