تحلیل الگوریتم و Big O

تحلیل پیشرفته الگوریتم: بهترین/بدترین/میانگین، پیچیدگی مکانی، Amortized و تحلیل بازگشتی با رابطه بازگشتی

فراتر از Big O پایه

در دوره DSA، Big O مقدماتی را دیدید. اینجا عمیق‌تر می‌شویم: تحلیل همه حالات، پیچیدگی مکانی و تحلیل الگوریتم‌های بازگشتی.

سه دیدگاه زمانی

دیدگاهمعنامثال (جستجوی خطی)
بهترین (Best)خوش‌شانسی‌ترین ورودیهدف = عنصر اول: O(1)
بدترین (Worst)بدشانسی‌ترین ورودیهدف آخر/موجود نیست: O(n)
میانگین (Average)انتظار روی ورودی تصادفیO(n/2) = O(n)

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

پیچیدگی مکانی

حافظه هم مثل زمان تحلیل می‌شود:

Amortized — هزینه میانگین‌گیری‌شده

append در list پایتون: معمولاً O(1) اما گاهی (وقتی ظرفیت پر شود) O(n) برای کپی! هزینه Amortized = O(1) چون کپی‌های نادر، روی کل عملیات پخش می‌شوند. مثل هزینه سالانه بیمه: یک جریمه بزرگ، میانگین‌گیری روی همه سال.

تحلیل بازگشت با رابطه بازگشتی

برای الگوریتم‌های بازگشتی، رابطه بازگشتی بنویسید:

T(n) = a × T(n/b) + f(n)
       ↑        ↑         ↑
   شاخه‌ها  اندازه زیر   کار این سطح

مثال‌ها:

الگوریتمرابطهنتیجه
جستجوی دودوییT(n) = T(n/2) + O(1)O(log n)
Merge SortT(n) = 2T(n/2) + O(n)O(n log n)
فیبوناچی سادهT(n) = T(n−1) + T(n−2)O(2ⁿ)!

قضیه اصلی (Master Theorem) — شهود

بدون حفظ فرمول، سه حالت دارید:

  1. کار هر سطح سریع‌تر از کاهش زیرمسئله رشد می‌کند ← ریشه‌ها غالب (مثل دودویی: O(log n))
  2. هر دو برابر ← O(n log n) (مثل Merge)
  3. کار هر سطح سنگین‌تر ← کار ریشه غالب (مثل فیبوناچی ساده)
نکته عملی: در مصاحبه، وقتی راه‌حل دادید حتماً Big O زمان «و فضا» را بگویید — فراموش‌کردن فضا، اشتباه رایج داوطلبان است!

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل الگوریتم‌ها است.

ابزارهای مرتبط