قضیه اصلی (تحلیل الگوریتمها)
در تحلیل الگوریتمها، قضیه اصلی برای تحلیل مجانبی بسیاری از الگوریتمهای تقسیم و حل استفاده میشود. در این نوع از الگوریتمها معمولاً میتوان یک رابطهٔ بازگشتی برای توصیف زمان اجرای آنها پیدا کرد. برای توصیف پیچیدگی چنین رابطهای (به کمک نماد ) از این قضیه استفاده میشود.
البته نمیتوان هر رابطهٔ بازگشتی را به کمک این قضیه حل کرد. روش اکرا-بازی تعمیمی از این قضیه است. این قضیه با کتاب معروف مقدمهای بر الگوریتمها به شهرت رسید.
شکل کلی
قضیه اصلی یک روش سرراست برای حل روابط بازگشتی به فرم زیر ارائه میکند:
با فرض این که و و باشند.
این رابطهٔ بازگشتی زمان اجرای الگوریتمی را توصیف میکند که مسألهای به اندازهٔ را به زیرمسأله (همگی به اندازهٔ تقریبی ) تقسیم میکند. همچنین هزینهٔ تقسیم و ترکیب زیرمسائل است.
مقدار توان بحرانی را به صورت تعریف میکنیم. در این صورت قضیه اصلی بیان میکند که:[۱]
| حالت | شرط | شرح قضیه |
|---|---|---|
| ۱ | اگر | آنگاه خواهد بود. |
| ۲ | اگر باشد | در آن صورت میشود. |
| ۳ | اگر و همچین شرط حالت طبیعی زیر برقرار باشد | میشود. |
توجه کنید این سه حالت بعضی حالتهای ممکن برای را پوشش نمیدهند. یک شکاف بین حالت ۲ و ۳ (و همچنین بین حالات ۱ و ۲) وجود دارد. به عنوان مثال بین حالات ۲ و ۳ قرار میگیرد (یا بین ۱ و ۲). این شکاف زمانی پیش میآید که از بزرگتر (یا کوچکتر) باشد ولی مقدار بزرگتر (یا کوچکتر) بودنش به صورت چندجملهای نباشد. در این صورت گاهی میتوان از یک تعمیم کوچک برای حالت ۲ استفاده کرد:[۲]
| حالت | شرط | شرط | شرح قضیه |
|---|---|---|---|
| ۲ الف | اگر باشد | به ازای هر | آنگاه خواهد بود. |
| ۲ ب | و باشد | در آن صورت میشود. | |
| ۲ ج | به شرط | میشود. |
مثال
برای پیدا کردن پیچیدگی جستجوی دودویی یا مرتبسازی ادغامی و بسیاری از الگوریتمهای دیگر میتوان از این قضیه استفاده کرد.
حالت ۱
الگو:وسطچین الگو:پایان وسطچین
همان طور که در فرمول فوق دیده میشود، متغیرها دارای مقادیر زیر هستند:
الگو:وسطچین ، ، ، الگو:پایان وسطچین
حال باید برقراری معادلهٔ زیر را بررسی کنیم:
الگو:وسطچین الگو:پایان وسطچین
اگر مقادیر متغیرها را در این رابطه جایگزین کنیم، خواهیم داشت:

با انتخاب داریم:
الگو:وسطچین الگو:پایان وسطچین
از آن جایی که معادلهٔ بالا برقرار است، حالت اول قضیهٔ اصلی را برای رابطهٔ بازگشتی به کار میبریم و از نتیجهٔ زیر استفاده میکنیم:
الگو:وسطچین الگو:پایان وسطچین
اگر مقادیر فوق را در رابطهٔ بالا قرار دهیم، در نهایت خواهیم داشت:
الگو:وسطچین الگو:پایان وسطچین
از این رو رابطهٔ بازگشتی داده شده (T(n از(Θ(n³ است.
(راه حل دقیق رابطهٔ بازگشتی نیز این نتیجه را تأیید میکند، که در آن ، بافرض است.)
حالت ۲
الگو:وسطچین الگو:پایان وسطچین
همان طور که در فرمول فوق مشاهده میشود، متغیرها مقادیر زیر را اختیار میکنند:
الگو:وسطچین ، ، ، ، الگو:پایان وسطچین
حال میبایست برقراری رابطهٔ زیر را بررسی کنیم (در حالتی که k=۰ باشد):

الگو:وسطچین الگو:پایان وسطچین
اگر مفادیر متغیرها را،از رابطهٔ بالا در این رابطه جایگزین کنیم، خواهیم داشت:
الگو:وسطچین الگو:پایان وسطچین
از آن جایی که این رابطه برقرار است، حالت دوم قضیهٔ اصلی را برای رابطهٔ بازگشنی به کار میبریم و از نتیجهٔ زیر استفاده میکنیم:
الگو:وسطچین الگو:پایان وسطچین
با جایگزین کردن مقادیر فوق در این رابطه در نهایت خواهیم داشت:
الگو:وسطچین الگو:پایان وسطچین
از این رو رابطهٔ بازگشتی داده شدهٔ (T(n از (Θ(n log n است.
(راه حل دقیق رابطهٔ بازگشتی نیز این نتیجه را تأیید میکند، که در آن ، بافرض است.)
حالت ۳
الگو:وسطچین الگو:پایان وسطچین
همان طور که در فرمول فوق دیده میشود، متغیرها مقادیر زیر را اختیار میکنند:
الگو:وسطچین ، ، ، الگو:پایان وسطچین
حال میبایست برقراری معادلهٔ زیر را مورد بررسی قرار دهیم:
الگو:وسطچین الگو:پایان وسطچین
اگر مقادیر متغیرها را طبق روابط بالا قرار دهیم و مقدار را انتخاب کنیم، خواهیم داشت:
الگو:وسطچین الگو:پایان وسطچین
از آن جایی که معادلهٔ فوق برقرار است، حال باید شرط دوم را مورد بررسی قرار دهیم. به عبارت دیگر باید درستی رابطهٔ زیر را مورد بررسی قرار دهیم:
الگو:وسطچین الگو:پایان وسطچین
اگر بار دیگر مقادیر متغیرها را طبق روابط بالا قرار دهیم، خواهیم داشت:
الگو:وسطچین الگو:پایان وسطچین
اگر را برگزینیم، آن گاه:
الگو:وسطچین الگو:پایان وسطچین
پس خواهیم داشت:
الگو:وسطچین الگو:پایان وسطچین
اگر بار دیگر مقادیر لازم را قرار دهیم، رابطهٔ زیر به دست میآید:
الگو:وسطچین الگو:پایان وسطچین
از این رو رابطهٔ بازگشتی داده شده (T(n از (Θ(n² است.
(راه حل دقیق رابطهٔ بازگشتی نیز این نتیجه را تأیید میکند، که در آن ، بافرض است.)
در روش درخت بازگشتی ، کل کارهای انجام شده را محاسبه می کنیم. اگر کارهایی که در برگها انجام می شود چند جمله ای بیشتری است ، پس برگها قسمت اصلی هستند و نتیجه ما به کارهایی که در برگها انجام می شود تبدیل می شود (حالت 1). اگر کارهایی که در برگ و ریشه انجام می شود به صورت یکسان باشد ، نتیجه کار ما با کارهایی که در هر سطح انجام می شود ضرب می شود (حالت 2). اگر کارهایی که در ریشه انجام می شوند بیشتر از لحاظ غیرمتعارف باشند ، نتیجه ما به کارهایی در ریشه انجام می شود (حالت 3).
حالتهای ناپذیرفتنی
معادلات زیر را نمیتوان با استفاده از قضیهٔ اصلی حل کرد:
الگو:وسطچین الگو:پایان وسطچین a مقدار ثابت نیست.
الگو:وسطچین الگو:پایان وسطچین اختلاف بین (f(n و غیر چندجملهای است.
الگو:وسطچین الگو:پایان وسطچین a<۱ است درحالی که نمیتوان کم تر از یک زیر مسئله داشت.
الگو:وسطچین : الگو:پایان وسطچین (f(n مثبت نیست.
صحت قضیه اصلی
نشان دادن درست بودن این قضیه در حالت کلی کار ساده ای نیست اما در ادامه صحت این قضیه را برای یک حالت خاص بررسی می کنیم.
فرض می کنیم (f(n تابعی از مرتبه چندجمله ای باشد یعنی (f(n) = Θ(nd آنگاه :
پس داریم :
logb a > d −→ T(n) = Θ(nlogbb a)
logb a = d −→ T(n) = Θ(nlog a)
logb a < d −→ T(n) = Θ(nd)
میخواهیم مجموع هزینه ها را به دست بیاوریم پس درخت بازگشت آن را رسم میکنیم. برای هر سطح در درخت هزینه های زیر را داریم :
هزینه ی رأسها در سطح ۱:
هزینه ی رأسها در سطح ۲:
...
هزینه ی رأسها در سطحi :
برای محاسبه هزینه کل ، هزینه های هر سطح را با هم جمع میزنیم.( تحلیل سرشکن )
مقدار رأس ریشه در درخت برابرnd است. به جز راسهای برگ ، هر رأس در این درختa فرزند دارد که مقدار هرکدامb )-d ) برابر مقدار پدرش است؛ یعنی به عنوان مثال فرزندان ریشه مقداری برابر دارند. و هزینهی هر برگc است.
با محاسبه جمع مقادیر سطوح مختلف درخت به مجموع کل میرسیم:
که این مقدار هزینهی متناظر با ریشه (T(n است را تعیین میکند.
قضیه اصلی برای تفریق و حل بازگشتی
قضیه اصلی واکاوی الگوریتمها برای تعیین کارکردهای دارای محدودیت بالایی Big - O استفاده می شود ، که می تواند در مسایل فرعی شکسته شود.قضیه اصلی برای تکرار تفریق و تقسیم:بگذارید T (n) تابعی باشد که مطابق شکل زیر در n مثبت نشان داده شده است:[۳]
قضیه اصلی برای تفریق و حل بازگشتی:

فرض کنید T (n) تابعی باشد که مطابق شکل در n مثبت نشان داده شده است:
1. If a<1 then T(n) = O(nk)
2. If a=1 then T(n) = O(nk+1)
3. if a>1 then T(n) = O(nkan/b)
جستارهای وابسته
منابع
- Michael T. Goodrich and Roberto Tamassia. Algorithm Design: Foundation, Analysis, and Internet Examples. Wiley, 2002. الگو:شابک. The master theorem (including the version of Case 2 included here, which is stronger than the one from CLRS) is on pp. 268–270.
- الگو:یادکرد-ویکی