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

סימון אסימפטוטי (ידוע גם כסימון לנדאו) משמש במתמטיקה כסימון מקוצר שמתאר את התנהגותן של פונקציות עבור ערכים הולכים וגדלים (או הולכים וקטנים), וזאת באמצעות השוואתן לפונקציות אחרות. היתרון שבשימוש בסימונים אסימפטוטיים הוא שהוא מאפשר לקבל הערכה טובה על אופן הגידול של ערכי הפונקציה מבלי שיהיה צורך לדעת אותו במדויק. לסימונים אסימפטוטיים שני תחומים מרכזיים שבהם הם יעילים: במדעי המחשב הם משמשים כדי להעריך את הסיבוכיות של אלגוריתמים, ובמתמטיקה הם משמשים על מנת להעריך את גודל השגיאה בקירובים שונים. השימוש בסימון אסימפטוטי מערב תמיד פונקציה   g {\displaystyle \ g} , על פי רוב מקבוצת הטבעיים לעצמה או הממשיים לעצמה. הפונקציה   g {\displaystyle \ g} משמשת בתור קנה המידה ההשוואתי לפונקציות אחרות. לרוב ההתעניינות היא בקצב הגדילה של   g {\displaystyle \ g} כאשר הערכים שהיא מקבלת שואפים לאינסוף, אולם הדבר אינו הכרחי. בהגדרות שנביא כאן נניח כי כל הפונקציות הן מהטבעיים לעצמם (מצב נפוץ במיוחד במדעי המחשב, מכיוון שמדדי סיבוכיות זמן וזיכרון הם חיוביים ובדידים). עם זאת, גם ללא ההנחה נדרוש מ-g להיות אי שלילית החל מאיבר מסוים. הסימון הנפוץ ביותר הוא הסימון "O" (קרי: אוֹוּ גדול). כאשר עוסקים בשאיפה של   g ( n ) {\displaystyle \ g(n)} לאינסוף, מוגדרת הקבוצה   O ( g ( n ) ) {\displaystyle \ O(g(n))} בתור אוסף כל הפונקציות   f ( n ) {\displaystyle \ f(n)} (בעלות אותו תחום וטווח כמו   g {\displaystyle \ g} ) עבורן קיימים קבועים חיוביים   n 0 ∈ N , 0 < c ∈ R {\displaystyle \ n_{0}\in \mathbb {N} ,0<c\in \mathbb {R} } כך שלכל   n > n 0 {\displaystyle \ n>n_{0}} מתקיים   f ( n ) ≤ c ⋅ g ( n ) {\displaystyle \ f(n)\leq \;c\cdot g(n)} . כלומר: עבור ערכי n הולכים וגדלים שמקבלת   f {\displaystyle \ f} , היא קטנה יותר מ-   g {\displaystyle \ g} עד כדי כפל בקבוע. בסימון מתמטי המשתמש בגבולות, ניתן להגדיר כי פונקציה   f ( n ) {\displaystyle \ f(n)} שייכת ל-   O ( g ( n ) ) {\displaystyle \ O(g(n))} אם   lim sup n → ∞ f ( n ) g ( n ) < ∞ {\displaystyle \ \limsup _{n\to \infty }{\frac {f(n)}{g(n)}}<\infty } . שתי ההגדרות שקולות. מטעמי פשטות, נהוג לכתוב   f ( n ) = O ( g ( n ) ) {\displaystyle \ f(n)=O(g(n))} כאשר הכוונה היא שמתקיים   f ( n ) ∈ O ( g ( n ) ) {\displaystyle \ f(n)\in O(g(n))} . ביטוי זה עשוי לגרום לבלבול אם מתייחסים אליו כמציין שוויון ולא שייכות; בפרט, הוא אינו סימטרי. למשל, מתקיים   n = O ( n 2 ) {\displaystyle \ n=O(n^{2})} , אבל   O ( n 2 ) ≠ n {\displaystyle \ O(n^{2})\neq n} . בעוד הסימון O מציין כי הפונקציה   f {\displaystyle \ f} חסומה בקצב גידולה על ידי קצב הגידול של   g {\displaystyle \ g} , הרי שהסימון "o" (קרי: אוֹוּ קטן) בא לציין כי קצב הגידול של   f {\displaystyle \ f} קטן ממש יחסית לקצב הגידול של   g {\displaystyle \ g} . בצורה פורמלית, אומרים ש-   f ( n ) {\displaystyle \ f(n)} היא   o ( g ) {\displaystyle \ o(g)} אם לכל קבוע   c {\displaystyle \ c} חיובי קיים   n 0 {\displaystyle \ n_{0}} כך שלכל   n > n 0 {\displaystyle \ n>n_{0}} מתקיים   f ( n ) < c ⋅ g ( n ) {\displaystyle \ f(n)<c\cdot g(n)} . בסימון באמצעות גבולות ניתן לתאר תכונה זו על ידי הגבול   lim n → ∞ f ( n ) g ( n ) = 0 {\displaystyle \ \lim _{n\to \infty }{\frac {f(n)}{g(n)}}=0} . f = Ω ( g ) ≡ ∃ 0 < c ∈ R , ∃ n 0 ∈ N s . t ∀ n 0 < n ∈ N c ⋅ g ( n ) ≤ f ( n ) {\displaystyle f=\Omega (g)\equiv \exists 0<c\in \mathbb {R} ,\;\exists n_{0}\in \mathbb {N} \;s.t\;\forall n_{0}<n\in \mathbb {N} \;c\cdot g(n)\leq f(n)} f = ω ( g ) ≡ ∀ 0 < c ∈ R , ∃ n 0 ∈ N s . t ∀ n 0 < n ∈ N c ⋅ g ( n ) < f ( n ) {\displaystyle f=\omega (g)\equiv \forall 0<c\in \mathbb {R} ,\;\exists n_{0}\in \mathbb {N} \;s.t\;\forall n_{0}<n\in \mathbb {N} \;c\cdot g(n)<f(n)} באמצעות הסימונים שהוגדרו לעיל נהוג להגדיר סימון נוסף:   f = Θ ( g ) {\displaystyle \ f=\Theta (g)} אם ורק אם   f = O ( g ) {\displaystyle \ f=O(g)} וגם   f = Ω ( g ) {\displaystyle \ f=\Omega (g)} , אולם לעיתים מגדירים כי f = Θ ( g ) {\displaystyle f=\Theta (g)} אם ורק אם ∃ c 1 , c 2 > 0 , ∃ n 0 ∈ N s . t ∀ n 0 ≤ n c 1 ⋅ g ( n ) ≤ f ( n ) ≤ c 2 ⋅ g ( n ) {\displaystyle \exists c_{1},c_{2}>0,\exists n_{0}\in \mathbb {N} \;s.t\;\forall n_{0}\leq n\;c_{1}\cdot g(n)\leq f(n)\leq c_{2}\cdot g(n)} , ולא באמצעות התנאי לעיל, למרות השקילות. פירוש הסימון   f = Ω ( g ) {\displaystyle \ f=\Omega (g)} הוא ש-   f {\displaystyle \ f} גדל לפחות בקצב של   g {\displaystyle \ g} . פירוש הסימון   f = ω ( g ) {\displaystyle \ f=\omega (g)} הוא ש-   f {\displaystyle \ f} גדל בקצב שגדול ממש מהקצב של   g {\displaystyle \ g} , ופירוש הסימון   f = Θ ( g ) {\displaystyle \ f=\Theta (g)} הוא שקצבי הגידול של   f {\displaystyle \ f} ו-   g {\displaystyle \ g} הם שווים אסימפטוטית (כלומר, שתי הפונקציות הן מאותו סדר גודל). סיכום חמשת הסימונים האסימפטוטיים המקובלים מוצג בטבלה הבאה: כאשר הכוונה בכך שגבול כלשהו קטן מאינסוף היא שהגבול הוא מספר ממשי. אף שהחסמים שהוצגו לעיל עוסקים בפונקציות מהמספרים הטבעיים לעצמם ובתכונותיהן כאשר הן מקבלות ערכים השואפים לאינסוף, ניתן להכליל את הסימון לטיפול במקרים אחרים. עיקר החשיבות בביצוע הכללה שכזו הוא בהבהרה של הגודל אליו שואפים הערכים שהפונקציות מקבלות. לדוגמה, עבור פונקציה ממשיות   f ( x ) {\displaystyle \ f(x)} ופונקציה חיובית   ϕ ( x ) {\displaystyle \ \phi (x)} אומרים ש-   f ( x ) = O ( ϕ ( x ) ) {\displaystyle \ f(x)=O(\phi (x))} כאשר   x → x 0 {\displaystyle \ x\to x_{0}} אם קיימים   c > 0 , δ > 0 {\displaystyle \ c>0,\delta >0} כך שלכל x בסביבה N δ ( x 0 ) {\displaystyle N_{\delta }(x_{0})} מתקיים   | f ( x ) | ≤ c ⋅ ϕ ( x ) {\displaystyle \ |f(x)|\leq c\cdot \phi (x)} . כמו כן, אומרים ש-   f ( x ) = o ( ϕ ( x ) ) {\displaystyle \ f(x)=o(\phi (x))} כאשר   x → x 0 {\displaystyle \ x\to x_{0}} אם לכל ϵ > 0 {\displaystyle \epsilon >0} קיים δ > 0 {\displaystyle \delta >0} כך שלכל x בסביבה N δ ( x 0 ) {\displaystyle N_{\delta }(x_{0})} מתקיים   | f ( x ) | ≤ ϵ ⋅ ϕ ( x ) {\displaystyle \ |f(x)|\leq \epsilon \cdot \phi (x)} .התנאי האחרון שקול לדרישה   lim x → x 0 f ( x ) ϕ ( x ) = 0 {\displaystyle \ \lim _{x\to x_{0}}{\frac {f(x)}{\phi (x)}}=0} . באופן דומה   f ( x ) = o ( ϕ ( x ) ) {\displaystyle \ f(x)=o(\phi (x))} כאשר   x → ∞ {\displaystyle \ x\to \infty } אם ורק אם   lim x → ∞ f ( x ) ϕ ( x ) = 0 {\displaystyle \ \lim _{x\to \infty }{\frac {f(x)}{\phi (x)}}=0} . נניח כי אלגוריתם מיון מסוים מבצע בדיוק   4 n 2 − 2 n + 1 {\displaystyle \ 4n^{2}-2n+1} פעולות בסיסיות על קלט מגודל   n {\displaystyle \ n} . ככל ש-   n {\displaystyle \ n} גדל כך ההשפעה של הגורם   n 2 {\displaystyle \ n^{2}} גדלה בעוד ההשפעה של שאר הגורמים הופכת לזניחה. לדוגמה, עבור   n = 500 {\displaystyle \ n=500} , גודלו של   4 n 2 {\displaystyle \ 4n^{2}} גדול פי 1,000 מגודלו של   2 n {\displaystyle \ 2n} , ופי מיליון מגודלו של   1 {\displaystyle \ 1} , ולכן שני הגורמים הללו זניחים ביחס ל-   4 n 2 {\displaystyle \ 4n^{2}} ובמרבית השימושים לא תהיה להם כל חשיבות. בנוסף, למקדם   4 {\displaystyle \ 4} של הביטוי   4 n 2 {\displaystyle \ 4n^{2}} יש חשיבות אפסית בלבד כאשר משווים את הביטוי לביטויים גדולים יותר. למשל, אם משווים את   4 n 2 {\displaystyle \ 4n^{2}} ל-   n 3 {\displaystyle \ n^{3}} , כבר עבור   n = 5 {\displaystyle \ n=5} הביטוי   n 3 {\displaystyle \ n^{3}} יהיה גדול יותר. אפילו אם המקדם של   n 2 {\displaystyle \ n^{2}} יהיה 1,000,000, עבור   n = 1 , 000 , 000 {\displaystyle \ n=1,000,000} ומעלה שוב יתקבל כי   n 3 {\displaystyle \ n^{3}} גדול יותר. על כן, כאשר מתעניינים בגידול האסימפטוטי של   n 2 {\displaystyle \ n^{2}} אין חשיבות למקדם שלו. בשל כך משתמשים בסימון   4 n 2 − 2 n + 1 = O ( n 2 ) {\displaystyle \ 4n^{2}-2n+1=O(n^{2})} על מנת לייצג את המאפיין העיקרי של קצב הגידול של הביטוי שבאגף שמאל. ידוע כי ניתן לתאר את פונקציית האקספוננט   e x {\displaystyle \ e^{x}} באמצעות טור טיילור אינסופי באופן הבא:   e x = 1 + x + x 2 2 ! + x 3 3 ! + x 4 4 ! + … {\displaystyle \ e^{x}=1+x+{\frac {x^{2}}{2!}}+{\frac {x^{3}}{3!}}+{\frac {x^{4}}{4!}}+\dots } כאשר   x → 0 {\displaystyle \ x\to 0} ונרצה לקרב עד רמת דיוק של פולינום טיילור מסדר שני, דרך פשוטה לתאר ביטוי זה באמצעות חסם אסימפטוטי היא זו:   e x = 1 + x + x 2 2 + o ( x 2 ) {\displaystyle \ e^{x}=1+x+{\frac {x^{2}}{2}}+o(x^{2})} פירושו של סימון זה הוא כי ניתן לתאר את   e x {\displaystyle \ e^{x}} באמצעות הפונקציה   1 + x + x 2 2 {\displaystyle \ 1+x+{\frac {x^{2}}{2}}} ועוד פונקציית "שארית" ששייכת למחלקה   o ( x 2 ) {\displaystyle \ o(x^{2})} , כלומר היא זניחה יחסית ל-   x 2 {\displaystyle \ x^{2}} כאשר   x → 0 {\displaystyle \ x\to 0} - בנוסחה: lim x → 0 o ( x 2 ) x 2 = 0 {\displaystyle \lim _{x\to 0}{\frac {o(x^{2})}{x^{2}}}=0} - כלומר, השארית זניחה ביחס לאיבר האחרון בטור שמחושב באופן מדויק. במקרה זה נכונה גם טענה חזקה יותר:   e x = 1 + x + x 2 2 + O ( x 3 ) {\displaystyle \ e^{x}=1+x+{\frac {x^{2}}{2}}+O(x^{3})} כאשר כאן השתמשנו ב-O גדול. קורמן, לייזרסון, ריבסט, מבוא לאלגוריתמים, הוצאת MIT, תורגם לעברית על ידי האוניברסיטה הפתוחה. גדי אלכסנדרוביץ', הסבר בזמן (O(n על סימונים אסימפטוטיים, באתר "לא מדויק", 6 ביולי 2012 סימון אסימפטוטי, באתר MathWorld (באנגלית)