قضیه اصلی (تحلیل الگوریتمها)
در تحلیل الگوریتمها، قضیه اصلی برای تحلیل مجانبی بسیاری از الگوریتمهای تقسیم و حل استفاده میشود. در این نوع از الگوریتمها معمولاً میتوان یک رابطهٔ بازگشتی برای توصیف زمان اجرای آنها پیدا کرد. برای توصیف پیچیدگی چنین رابطهای (به کمک نماد
البته نمیتوان هر رابطهٔ بازگشتی را به کمک این قضیه حل کرد. روش اکرا-بازی تعمیمی از این قضیه است. این قضیه با کتاب معروف مقدمهای بر الگوریتمها به شهرت رسید.
شکل کلی
قضیه اصلی یک روش سرراست برای حل روابط بازگشتی به فرم زیر ارائه میکند:
با فرض این که
این رابطهٔ بازگشتی زمان اجرای الگوریتمی را توصیف میکند
مقدار توان بحرانی
حالت | شرط | شرح قضیه |
---|---|---|
۱ | اگر | آنگاه |
۲ | اگر | در آن صورت |
۳ | اگر |
توجه کنید این سه حالت بعضی حالتهای ممکن برای
حالت | شرط | شرط | شرح قضیه |
---|---|---|---|
۲ الف | اگر | به ازای هر | آنگاه |
۲ ب | و | در آن صورت | |
۲ ج | به شرط |
مثال
برای پیدا کردن پیچیدگی جستجوی دودویی یا مرتبسازی ادغامی و بسیاری از الگوریتمهای دیگر میتوان از این قضیه استفاده کرد.
حالت ۱
همان طور که در فرمول فوق دیده میشود، متغیرها دارای مقادیر زیر هستند:
حال باید برقراری معادلهٔ زیر را بررسی کنیم:
اگر مقادیر متغیرها را در این رابطه جایگزین کنیم، خواهیم داشت:
با انتخاب
از آن جایی که معادلهٔ بالا برقرار است، حالت اول قضیهٔ اصلی را برای رابطهٔ بازگشتی به کار میبریم و از نتیجهٔ زیر استفاده میکنیم:
اگر مقادیر فوق را در رابطهٔ بالا قرار دهیم، در نهایت خواهیم داشت:
از این رو رابطهٔ بازگشتی داده شده (T(n از(Θ(n³ است.
(راه حل دقیق رابطهٔ بازگشتی نیز این نتیجه را تأیید میکند، که در آن
حالت ۲
همان طور که در فرمول فوق مشاهده میشود، متغیرها مقادیر زیر را اختیار میکنند:
حال میبایست برقراری رابطهٔ زیر را بررسی کنیم (در حالتی که k=۰ باشد):
اگر مفادیر متغیرها را،از رابطهٔ بالا در این رابطه جایگزین کنیم، خواهیم داشت:
از آن جایی که این رابطه برقرار است، حالت دوم قضیهٔ اصلی را برای رابطهٔ بازگشنی به کار میبریم و از نتیجهٔ زیر استفاده میکنیم:
با جایگزین کردن مقادیر فوق در این رابطه در نهایت خواهیم داشت:
از این رو رابطهٔ بازگشتی داده شدهٔ (T(n از (Θ(n log n است.
(راه حل دقیق رابطهٔ بازگشتی نیز این نتیجه را تأیید میکند، که در آن
حالت ۳
همان طور که در فرمول فوق دیده میشود، متغیرها مقادیر زیر را اختیار میکنند:
حال میبایست برقراری معادلهٔ زیر را مورد بررسی قرار دهیم:
اگر مقادیر متغیرها را طبق روابط بالا قرار دهیم و مقدار
از آن جایی که معادلهٔ فوق برقرار است، حال باید شرط دوم را مورد بررسی قرار دهیم. به عبارت دیگر باید درستی رابطهٔ زیر را مورد بررسی قرار دهیم:
اگر بار دیگر مقادیر متغیرها را طبق روابط بالا قرار دهیم، خواهیم داشت:
اگر
پس خواهیم داشت:
اگر بار دیگر مقادیر لازم را قرار دهیم، رابطهٔ زیر به دست میآید:
از این رو رابطهٔ بازگشتی داده شده (T(n از (Θ(n² است.
(راه حل دقیق رابطهٔ بازگشتی نیز این نتیجه را تأیید میکند، که در آن
در روش درخت بازگشتی ، کل کارهای انجام شده را محاسبه می کنیم. اگر کارهایی که در برگها انجام می شود چند جمله ای بیشتری است ، پس برگها قسمت اصلی هستند و نتیجه ما به کارهایی که در برگها انجام می شود تبدیل می شود (حالت 1). اگر کارهایی که در برگ و ریشه انجام می شود به صورت یکسان باشد ، نتیجه کار ما با کارهایی که در هر سطح انجام می شود ضرب می شود (حالت 2). اگر کارهایی که در ریشه انجام می شوند بیشتر از لحاظ غیرمتعارف باشند ، نتیجه ما به کارهایی در ریشه انجام می شود (حالت 3).
حالتهای ناپذیرفتنی
معادلات زیر را نمیتوان با استفاده از قضیهٔ اصلی حل کرد:
a مقدار ثابت نیست.
اختلاف بین (f(n و
a<۱ است درحالی که نمیتوان کم تر از یک زیر مسئله داشت.
(f(n مثبت نیست.
صحت قضیه اصلی
نشان دادن درست بودن این قضیه در حالت کلی کار ساده ای نیست اما در ادامه صحت این قضیه را برای یک حالت خاص بررسی می کنیم.
فرض می کنیم تابعی از مرتبه چندجمله ای باشد یعنی آنگاه :
پس داریم :
logb a > d −→ T(n) = Θ(nb )
logb a = d −→ T(n) = Θ(n)
logb a < d −→ T(n) = Θ(n)
میخواهیم مجموع هزینه ها را به دست بیاوریم پس درخت بازگشت آن را رسم میکنیم. برای هر سطح در درخت هزینه های زیر را داریم :
هزینه ی رأسها در سطح ۱:
هزینه ی رأسها در سطح ۲:
...
هزینه ی رأسها در سطحi :
برای محاسبه هزینه کل ، هزینه های هر سطح را با هم جمع میزنیم.( تحلیل سرشکن )
مقدار رأس ریشه در درخت برابرn است. به جز راسهای برگ ، هر رأس در این درختa فرزند دارد که مقدار هرکدامb ) ) برابر مقدار پدرش است؛ یعنی به عنوان مثال فرزندان ریشه مقداری برابر
با محاسبه جمع مقادیر سطوح مختلف درخت به مجموع کل میرسیم:
که این مقدار هزینهی متناظر با ریشه (T(n است را تعیین میکند.
قضیه اصلی برای تفریق و حل بازگشتی
قضیه اصلی واکاوی الگوریتمها برای تعیین کارکردهای دارای محدودیت بالایی Big - O استفاده می شود ، که می تواند در مسایل فرعی شکسته شود.قضیه اصلی برای تکرار تفریق و تقسیم:بگذارید T (n) تابعی باشد که مطابق شکل زیر در n مثبت نشان داده شده است:
قضیه اصلی برای تفریق و حل بازگشتی:
فرض کنید T (n) تابعی باشد که مطابق شکل در n مثبت نشان داده شده است:
1. If a<1 then T(n) = O(n)
2. If a=1 then T(n) = O(n)
3. if a>1 then T(n) = O(na)
جستارهای وابسته
- علامت O بزرگ
منابع
- ↑ Introduction to Algorithms (CLRS) (3rd edition). به کوشش Thomas H. Cormen, Charles E. Leiserson, Ronald Rivest, Clifford Stein.
- ↑ A real elementary approach to the master recurrence and generalizations. به کوشش Chee Yap. ص. ۱۴–۲۶.
- ↑ Yash Singla (5/16/2020). "Master Theorem For Subtract and Conquer Recurrences". www.geeksforgeeks.org (به انگلیسی).
- Michael T. Goodrich and Roberto Tamassia. Algorithm Design: Foundation, Analysis, and Internet Examples. Wiley, 2002. ISBN 0-471-38365-1. The master theorem (including the version of Case 2 included here, which is stronger than the one from CLRS) is on pp. 268–270.