**نماد O بزرگ** (به انگلیسی: Big O notation) یک نماد ریاضیاتی ست که برای توصیف رفتار حدی یک تابع (وقتی آرگومان‌های آن به بی‌نهایت میل کند) به کار می‌رود.

این نماد (مخفف Order of growth (به فارسی: مرتبهٔ رشد)) اولین بار برای تحلیل سرعت الگوریتم‌های رایانشی ابداع شد و بعدها به حسابان و نظریّهٔ اعداد گسترش یافت.

در علوم رایانه و نظریهٔ پیچیدگی محاسباتی، این نماد برای تحلیل الگوریتم‌ها و دسته‌بندی و مقایسهٔ الگوریتم‌های متفاوتِ موجود برای حل یک مسئلهٔ خاص به کار می‌رود. پیچیدگی محاسباتی نشان‌دهندهٔ رابطهٔ میان «*داده‌ها*» با «*مقدار زمان یا مقدار حافظهٔ مورد نیاز برای پیدا کردن جواب*» است و برای توصیف آن از این نماد استفاده می‌شود.

در نظریهٔ تحلیلی اعداد، این نماد برای توصیف میزان دقت یک تقریب به کار می‌رود. یکی از مثال‌های معروف این موضوع در قضیهٔ اعداد اول است: اگر {\displaystyle \pi (x)} تعداد اعداد اول کمتر از {\displaystyle x} باشد، آنگاه {\displaystyle \pi (x)\thicksim {x \over \ln(x)}}.

در حسابان نیز این نماد در تحلیل مجانبی و سری‌های تیلور کاربرد دارد.

به دلیل توصیف رفتار حدی، نماد {\displaystyle {\mathcal {O}}} به ریاضی‌دان‌ها اجازه می‌دهد که تابع را ساده کنند تا بر روی نرخ رشد آن متمرکز شود؛ بنابراین توابع مختلف با نرخ رشد یکسان می‌توانند دارای یک نماد {\displaystyle {\mathcal {O}}} مشابه باشند و در نتیجه در یک دسته قرار بگیرند.

نماد {\displaystyle {\mathcal {O}}} معروفترین عضو از مجموعه‌ای از نمادهای دیگری همچون {\displaystyle o} (کوچک) و ... است که ابداعات پاول باخمن (به آلمانی: Paul Bachmann) و ادموند لانداو (به آلمانی: Edmund Landau‎) بوده اند؛ به همین دلیل به این‌ها *نمادهای باخمن-لانداو* و یا **نمادهای مجانبی** (به انگلیسی: asymptotic notations) گفته می‌شود.

تعاریف دقیق
-----------

فرض کنید که {\displaystyle f(n)} تابعی باشد که بخواهیم آن را توصیف کنیم و {\displaystyle g(n)} نیز یک تابع فرضی ست و همچنین {\displaystyle f} و {\displaystyle g} توابع مثبت هستند.

هر نماد دو تعریف معمول و تعریف حدی دارد (که طبق قضیه‌هایی معادل یکدیگر هستند و به یک مفهوم اشاره دارند).

نمادهای {\displaystyle {\mathcal {O}}} و {\displaystyle {\mathcal {\Theta }}} پرکاربردترین اینها هستند.

### O بزرگ

{\displaystyle f\in {\mathcal {O}}(g)\Longleftrightarrow \exists c,n\_{0}:\forall n\geqslant n\_{0}:0\leqslant f(n)\leqslant cg(n)}

به این معنی که از یک مقدار n خاصی (n\_0) بیشتر، تابع f از ضریبی از تابع g کمتر یا مساوی است.

به عنوان مثال، {\displaystyle n\in {\mathcal {O}}(n^{2})} و می‌خوانیم «n از اردر n^2 است» یا «n از اُو n^2 است» یا «n^2 کران بالای حدی n است».

به طور رایج، به جای علامت \in  از {\displaystyle =} استفاده می‌شود: {\displaystyle n={\mathcal {O}}(n^{2})}

اما باید دقت کنید که این رابطه تساوی نیست. به عنوان مثال {\displaystyle n={\mathcal {O}}(n^{2})} و {\displaystyle 2n={\mathcal {O}}(n^{2})} ولی {\displaystyle n\neq 2n}

همچنین {\displaystyle {\mathcal {O}}(n)={\mathcal {O}}(n^{2})} ولی {\displaystyle {\mathcal {O}}(n^{2})\neq {\mathcal {O}}(n)}

می‌توان {\displaystyle {\mathcal {O}}(g(n))} را به صورت مجموعهٔ تمام توابعی که از اردر g هستند تصور کرد.

همیشه سعی می‌شود که از ساده‌ترین {\displaystyle g} ممکن استفاده شود. به عنوان مثال {\displaystyle n={\mathcal {O}}(n^{2})} و {\displaystyle n={\mathcal {O}}(3n^{2}+2n+1)} هر دو درست اند ولی اولی ترجیح داده می‌شود.

یک نماد قدیمی به صورت {\displaystyle f\preccurlyeq g} است. به تفاوت بین علامت {\displaystyle \preccurlyeq } و {\displaystyle \leqslant } توجه کنید.

تعریف حدی: {\displaystyle f\preccurlyeq g\Longleftrightarrow \lim \_{n\to \infty }{f \over g}<\infty }

#### o کوچک

{\displaystyle f\in {\mathcal {o}}(g)\Longleftrightarrow \forall c:\exists n\_{0}:\forall n\geqslant n\_{0}:{0<f(n)<cg(n)}}

به این معنی که از یک مقدار n خاصی (n\_0) بیشتر، تابع f از تابع g و تمام مضارب آن اکیداً کمتر است.

به عنوان مثال، {\displaystyle n={\mathcal {o}}(n^{2})} و می‌خوانیم «نرخ رشد n از n^2 کمتر است» یا «n به صورت حدی از n^2 کوچکتر است».

{\displaystyle n^{2}\neq {\mathcal {o}}(n^{2})} ولی {\displaystyle n^{2}={\mathcal {O}}(n^{2})}.

تعریف حدّی: {\displaystyle f\prec g\Longleftrightarrow \lim \_{n\to \infty }{f \over g}=0}

### امگا بزرگ

{\displaystyle f\in {\mathcal {\Omega }}(g)\Longleftrightarrow \exists c,n\_{0}:\forall n\geqslant n\_{0}:f(n)\geqslant cg(n)\geqslant 0}

به این معنی که از یک مقدار n خاصی (n\_0) بیشتر، تابع f از ضریبی از تابع g بیشتر یا مساوی است.

به عنوان مثال، {\displaystyle n^{2}={\mathcal {\Omega }}(n)} و می‌خوانیم «n^2 از امگا n است» یا «n^2 کران بالای حدی n است».

تعریف حدی: {\displaystyle f\succcurlyeq g\Longleftrightarrow \lim \_{n\to \infty }{f \over g}>0}

#### امگا کوچک

{\displaystyle f\in {\mathcal {\omega }}(g)\Longleftrightarrow \forall c:\exists n\_{0}:\forall n\geqslant n\_{0}:f(n)>cg(n)>0}

به این معنی که از یک مقدار n خاصی (n\_0) بیشتر، تابع f از تابع g و تمام مضارب آن اکیداً بیشتر است.

به عنوان مثال، {\displaystyle n^{2}={\mathcal {\omega }}(n)} و می‌خوانیم «نرخ رشد n^2 از n بیشتر است» یا «n^2 به صورت حدی از n بزرگتر است».

{\displaystyle n^{2}\neq {\mathcal {\omega }}(n^{2})} ولی {\displaystyle n^{2}={\mathcal {\Omega }}(n^{2})}.

تعریف حدی: {\displaystyle f\succ g\Longleftrightarrow \lim \_{n\to \infty }{f \over g}=\infty }

#### خاصیت تقارنی ترانهاده با O

{\displaystyle g\in {\mathcal {\Omega }}(f)\Longleftrightarrow g\succcurlyeq f\Longleftrightarrow f\preccurlyeq g\Longleftrightarrow f\in {\mathcal {O}}(g)}

{\displaystyle g\in {\mathcal {\omega }}(f)\Longleftrightarrow g\succ f\Longleftrightarrow f\prec g\Longleftrightarrow f\in {\mathcal {o}}(g)}

### تتا

{\displaystyle f\in {\mathcal {\Theta }}(g)\Longleftrightarrow g\in {\mathcal {\Theta }}(f)\Longleftrightarrow \exists c\_{1},c\_{2},n\_{0}:\forall n\geqslant n\_{0}:0\leqslant c\_{1}g\leqslant f(n)\leqslant c\_{2}g(n)}

به این معنی که از یک مقدار n خاصی (n\_0) بیشتر، تابع f در بین ضریب‌هایی از g ساندویچ می‌شود.

به عنوان مثال، {\displaystyle 2n={\mathcal {\Theta }}(n)} و می‌خوانیم «2n از تتا n است» یا «نرخ رشد 2n و n یکسان است» یا «2n و n به صورت مجانبی برابر اند».

تعریف حدی: {\displaystyle f\thicksim g\Longleftrightarrow g\thicksim f\Longleftrightarrow \lim \_{n\to \infty }{f \over g}=c>0}

با وجود این تعریف در علوم کامپیوتری، تعریف این نماد در ریاضیات کمی متفاوت است: {\displaystyle f\thicksim g\Longleftrightarrow g\thicksim f\Longleftrightarrow \lim \_{n\to \infty }{f \over g}=1}

این نماد در تحلیل مجانبی در ریاضیات پرکاربرد است.

#### قضیه کنوت

{\displaystyle f\in {\mathcal {\Theta }}(g)\Longleftrightarrow g\in {\mathcal {\Theta }}(f)\Longleftrightarrow f\in {\mathcal {O}}(g)\land g\in {\mathcal {O}}(f)}

به این معنی که هم f از اردر g باشد و هم g از اردر f باشد. این قضیه ابداع دونالد کنوت بود و مزیت آن سادگی و قابل‌فهم کردن تعریف است.

به عبارت دیگر اگر نرخ رشد f از g هم بیشتر-مساوی باشد و هم کمتر-مساوی، پس نرخ رشدشان مساوی است.

{\displaystyle f\thicksim g\Longleftrightarrow g\thicksim f\Longleftrightarrow f\preccurlyeq g\preccurlyeq f}

کنوت با این تعریف، نماد O بزرگ را به علوم کامپیوتر معرفی و آن را محبوب کرد.

{\displaystyle \Theta (f)={\mathcal {O}}(f)\cap \Omega (f)}

یک مثال
-------

چهار تابع زیر را در نظر بگیرید:

{\displaystyle f(n)=1000n^{2}+20n+16}

{\displaystyle g(n)=2n^{3}+100n^{\tfrac {4}{3}}+56}

{\displaystyle h(n)=n^{3}-{\frac {1}{2}}n^{2}+{\frac {1}{3}}n}

{\displaystyle i(n)={\frac {1}{1000}}n^{4}}

رفتار این چهار تابع را طبق نمودارشان بررسی می‌کنیم. در ابتدا به نظر می‌رسد تابع f با توجه به ضریب بزرگتری که دارد مقدارهای بزرگتری نیز داشته باشد که برای {\displaystyle n\leq 100} هم همین گونه است.

نمودار این ۴ تابع وقتی 
  
    
      
        n
        ≤
        100
      
    
    {\displaystyle n\leq 100}نمودار این ۴ تابع وقتی {\displaystyle n\leq 100}
اما با بزرگ شدن مقدار n رفتار تابع‌ها نیز نسبت به هم متفاوت می‌شود. شکل زیر رفتار توابع را وقتی {\displaystyle n\leq 1000} است نشان می‌دهد. ملاحظه می‌شود که تابع g به‌تدریج مقدارش از سایر توابع بیشتر می‌شود.

با بزرگتر شدن n وضعیت به این شکل در می‌آید: به‌تدریج تابع i از بقیه توابع بیش‌تر می‌شود.

و برای مقدار بزرگ n داریم:

تابع i کاملاً از بقیه توابع بیشتر می‌شود.

همان طور که دیده شد، چون این تابع از سایر توابع مرتبهٔ بالاتری داشت در نهایت مقدارش از همهٔ آنها بیشتر شد.

طبق تعاریف بالا می‌توان رابطهٔ این توابع را برحسب نمادگذاری‌های گفته شده بیان کنیم:

{\displaystyle f(n)={\mathcal {O}}(g(n))} یا {\displaystyle f(n)=o(g(n))}و {\displaystyle g(n)=\Omega (f(n))} یا {\displaystyle g(n)=\omega (f(n))}

{\displaystyle g(n)=\Theta (h(n))} زیرا تابع g همواره حدوداً دوبرابر تابع h است و مرتبهٔ یکسانی دارند.

{\displaystyle h(n)={\mathcal {O}}(i(n))} یا {\displaystyle h(n)=o(i(n))}

تاریخچه
-------

علامت O بزرگ اولین بار توسط متخصص اعداد Paul Bachmann در سال ۱۸۹۴، در جلد دوم کتاب *Analytische Zahlentheorie* معرفی شد (که جلد اولش در سال ۱۸۹۲ چاپ شده و شامل این علامت نبود). این علامت در کارهای نظریه اعداد توسط ادموند لانداو متداول شد و به همین خاطر گاهی از آن به نام Landau symbol یاد می‌شود.

این علامت در علوم کامپیوتر توسط دانلد کنوت (که علامت‌های مربوطه امگا و تتا را نیز برای اولین بار معرفی کرد) مشهور شد. او هم چنین متذکر شد که علامت امگا توسط Hardy و Littlewood تحت معنی اندکی متفاوت قبلاً تعریف شده بوده‌است.

جستارهای وابسته
---------------

* پیچیدگی زمانی و حافظه
* تحلیل الگوریتم
* تحلیل مجانبی
* قضیهٔ اعداد اوّل
* آزمون‌های مقایسه‌ای برای همگرایی سری‌ها

منابع
-----

1. 1 2 3 4 5 6 7 8 9  *Introduction to Algorithms (CLRS) (3rd edition)*. به کوشش Thomas H. Cormen, Charles E. Leiserson, Ronald Rivest, Clifford Stein.
2. ↑  Bachmann, Paul (1894). *Analytische Zahlentheorie* [*Analytic Number Theory*] (به آلمانی). Vol. 2. Leipzig: Teubner.
3. ↑  Landau, Edmund (1909). *Handbuch der Lehre von der Verteilung der Primzahlen* [*Handbook on the theory of the distribution of the primes*] (به آلمانی). Leipzig: B. G. Teubner. p. 883.
4. ↑  *مقدمه‌ای بر الگوریتم‌ها (ویراست سوم)*. به کوشش توماس کورمن، چارلز لیزرسون، رونالد ریوست و کلیفورد استین. ترجمه مهندس دهقان طرزه.
5. 1 2 3  Knuth, Donald (April–June 1976). "Big Omicron and big Omega and big Theta" (PDF). *SIGACT News*. **8** (2): 18–24. doi:10.1145/1008328.1008329. S2CID 5230246. Archived from the original (PDF) on 30 November 2021. Retrieved 28 September 2021.
6. ↑  *Calculus Vol. 1 (2nd ed.)*. به کوشش Tom M. Apostol.

| * ن
* ب
* و
الگوریتم‌های مرتب‌سازی |
| --- |
| تئوری | 
* نظریه پیچیدگی محاسباتی
* نمادهای O و Ω و Θ
* ترتیب کامل
* الگوریتم مرتب‌سازی
* شبکه مرتب‌سازی
* مرتب‌سازی مقایسه‌ای

 |  |
| گونه‌های تعویضی | 
* حبابی
* دست‌نشانده
* زوج و فرد
* ساختگی
* سریع
* شانه‌ای
* کوکتلی
* گورزاد

 |
| گونه‌های انتخابی | 
* انتخابی
* دایره‌ای
* درخت دکارتی
* روان
* مسابقه‌ای
* هرمی

 |
| گونه‌های درجی | 
* درجی
* درختی
* شکیبانه
* صدفی
* کتابخانه‌ای
* گسترده

 |
| گونه‌های ادغامی | 
* ادغامی آبشاری
* ادغامی چندمرحله‌ای
* ادغامی نوسانی
* ادغامی
* رشته‌ای

 |
| گونه‌های توزیعی | 
* انفجاری
* پایه‌ای
* پرچم آمریکا
* مجاور-نگاشت (پروکس‌مپ)
* سطلی
* شمارشی
* فلش
* لانه‌کبوتری
* مهره‌ای

 |
| گونه‌های همرو | 
* ادغامی دسته‌ای فرد-زوج
* بایتونیک
* جفتی

 |
| گونه‌های دوگانه | 
* آن‌شافل
* تیم
* جی‌سورت
* درونگرا
* گسترش‌یافته

 |
| گونه‌های دیگر | 
* اسپاگتی
* توپولوژیکی
* کلوچه‌ای

 |