סימון אסימפטוטי

מתוך ויקיפדיה, האנציקלופדיה החופשית
(הופנה מהדף פיתוח אסימפטוטי)
קפיצה לניווט קפיצה לחיפוש

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

הגדרה פורמלית

השימוש בסימון אסימפטוטי מערב תמיד פונקציה g, על פי רוב מקבוצת הטבעיים לעצמה או הממשיים לעצמה. הפונקציה g משמשת בתור קנה המידה ההשוואתי לפונקציות אחרות. לרוב ההתעניינות היא בקצב הגדילה של g כאשר הערכים שהיא מקבלת שואפים לאינסוף, אולם הדבר אינו הכרחי. בהגדרות שנביא כאן נניח כי כל הפונקציות הן מהטבעיים לעצמם (מצב נפוץ במיוחד במדעי המחשב, מכיוון שמדדי סיבוכיות זמן וזיכרון הם חיוביים ובדידים). עם זאת, גם ללא ההנחה נדרוש מ-g להיות אי שלילית החל מאיבר מסוים.

הסימון O

דוגמה לסימון O גדול: f(x)O(g(x)) כי קיים c>0 (ובפרט c=1) ו-x0 (ובפרט x0=5) עבורם f(n)cg(n) לכל xx0.

הסימון הנפוץ ביותר הוא הסימון "O" (קרי: אוֹוּ גדול). כאשר עוסקים בשאיפה של g(n) לאינסוף, מוגדרת הקבוצה O(g(n)) בתור אוסף כל הפונקציות f(n) (בעלות אותו תחום וטווח כמו g) עבורן קיימים קבועים חיוביים n0,0<c כך שלכל n>n0 מתקיים f(n)cg(n). כלומר: עבור ערכי n הולכים וגדלים שמקבלת f, היא קטנה יותר מ-g עד כדי כפל בקבוע.

בסימון מתמטי המשתמש בגבולות, ניתן להגדיר כי פונקציה f(n) שייכת ל-O(g(n)) אם lim supnf(n)g(n)<. שתי ההגדרות שקולות.

מטעמי פשטות, נהוג לכתוב f(n)=O(g(n)) כאשר הכוונה היא שמתקיים f(n)O(g(n)). ביטוי זה עשוי לגרום לבלבול אם מתייחסים אליו כמציין שוויון ולא שייכות; בפרט, הוא אינו סימטרי. למשל, מתקיים n=O(n2), אבל O(n2)n.

הסימון o

בעוד הסימון O מציין כי הפונקציה f חסומה בקצב גידולה על ידי קצב הגידול של g, הרי שהסימון "o" (קרי: אוֹוּ קטן) בא לציין כי קצב הגידול של f קטן ממש יחסית לקצב הגידול של g.

בצורה פורמלית, אומרים ש-f(n) היא o(g) אם לכל קבוע cחיובי קיים n0 כך שלכל n>n0 מתקיים f(n)<cg(n). בסימון באמצעות גבולות ניתן לתאר תכונה זו על ידי הגבול limnf(n)g(n)=0.

סימונים נוספים

f=Ω(g)0<c,n0s.tn0<ncg(n)f(n)

f=ω(g)0<c,n0s.tn0<ncg(n)<f(n)

באמצעות הסימונים שהוגדרו לעיל נהוג להגדיר סימון נוסף:

  • f=Θ(g) אם ורק אם f=O(g) וגם f=Ω(g), אולם לעיתים מגדירים כי f=Θ(g) אם ורק אם c1,c2>0,n0s.tn0nc1g(n)f(n)c2g(n), ולא באמצעות התנאי לעיל, למרות השקילות.

פירוש הסימון f=Ω(g) הוא ש-f גדל לפחות בקצב של g. פירוש הסימון f=ω(g) הוא ש-f גדל בקצב שגדול ממש מהקצב של g, ופירוש הסימון f=Θ(g) הוא שקצבי הגידול של f ו-g הם שווים אסימפטוטית (כלומר, שתי הפונקציות הן מאותו סדר גודל).

סיכום

סיכום חמשת הסימונים האסימפטוטיים המקובלים מוצג בטבלה הבאה:

סימון הגדרה הגדרה מתמטית
f(n)O(g(n)) g(n) חסם עליון אסימפטוטי lim supn|f(n)g(n)|<
f(n)o(g(n)) g(n) שולט אסימפטוטית limnf(n)g(n)=0
f(n)Ω(g(n)) g(n) חסם תחתון אסימפטוטי lim infn|f(n)g(n)|>0
f(n)ω(g(n)) g(n) זניח אסימפטוטית limnf(n)g(n)=
f(n)Θ(g(n)) g(n) חסם הדוק אסימפטוטית 0<lim infn|f(n)g(n)|lim supn|f(n)g(n)|<

כאשר הכוונה בכך שגבול כלשהו קטן מאינסוף היא שהגבול הוא מספר ממשי.

הכללה

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

לדוגמה, עבור פונקציה ממשיות f(x) ופונקציה חיובית ϕ(x) אומרים ש-f(x)=O(ϕ(x)) כאשר xx0 אם קיימים c>0,δ>0 כך שלכל x בסביבה Nδ(x0) מתקיים |f(x)|cϕ(x). כמו כן, אומרים ש-f(x)=o(ϕ(x)) כאשר xx0 אם לכל ϵ>0 קיים δ>0 כך שלכל x בסביבה Nδ(x0) מתקיים |f(x)|ϵϕ(x).התנאי האחרון שקול לדרישה limxx0f(x)ϕ(x)=0. באופן דומה f(x)=o(ϕ(x)) כאשר x אם ורק אם limxf(x)ϕ(x)=0.

שימושים

ניתוח סיבוכיות אלגוריתמים

נניח כי אלגוריתם מיון מסוים מבצע בדיוק 4n22n+1 פעולות בסיסיות על קלט מגודל n. ככל ש-n גדל כך ההשפעה של הגורם n2 גדלה בעוד ההשפעה של שאר הגורמים הופכת לזניחה. לדוגמה, עבור n=500, גודלו של 4n2 גדול פי 1,000 מגודלו של 2n, ופי מיליון מגודלו של 1, ולכן שני הגורמים הללו זניחים ביחס ל-4n2 ובמרבית השימושים לא תהיה להם כל חשיבות.

בנוסף, למקדם 4 של הביטוי 4n2 יש חשיבות אפסית בלבד כאשר משווים את הביטוי לביטויים גדולים יותר. למשל, אם משווים את 4n2 ל-n3, כבר עבור n=5 הביטוי n3 יהיה גדול יותר. אפילו אם המקדם של n2 יהיה 1,000,000, עבור n=1,000,000 ומעלה שוב יתקבל כי n3 גדול יותר. על כן, כאשר מתעניינים בגידול האסימפטוטי של n2 אין חשיבות למקדם שלו.

בשל כך משתמשים בסימון 4n22n+1=O(n2) על מנת לייצג את המאפיין העיקרי של קצב הגידול של הביטוי שבאגף שמאל.

חסם על קירובים

ידוע כי ניתן לתאר את פונקציית האקספוננט ex באמצעות טור טיילור אינסופי באופן הבא:

  • ex=1+x+x22!+x33!+x44!+

כאשר x0 ונרצה לקרב עד רמת דיוק של פולינום טיילור מסדר שני, דרך פשוטה לתאר ביטוי זה באמצעות חסם אסימפטוטי היא זו:

  • ex=1+x+x22+o(x2)

פירושו של סימון זה הוא כי ניתן לתאר את ex באמצעות הפונקציה 1+x+x22 ועוד פונקציית "שארית" ששייכת למחלקה o(x2), כלומר היא זניחה יחסית ל-x2 כאשר x0 - בנוסחה: limx0o(x2)x2=0 - כלומר, השארית זניחה ביחס לאיבר האחרון בטור שמחושב באופן מדויק.

במקרה זה נכונה גם טענה חזקה יותר:

  • ex=1+x+x22+O(x3)

כאשר כאן השתמשנו ב-O גדול.

לקריאה נוספת

קישורים חיצוניים