تحلیل الگوریتمها: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
بدون خلاصۀ ویرایش برچسبها: ویرایشگر دیداری ویرایش همراه ویرایش از وبگاه همراه |
بدون خلاصۀ ویرایش برچسبها: ویرایشگر دیداری ویرایش همراه ویرایش از وبگاه همراه |
||
خط ۲۵:
اما لازم است الگوریتمها را در بدترین حالت و در صورت امکان در حالت میانگین تحلیل و بررسی کنیم. ممکن است پیچیدگی الگوریتم در یک حالت میانگین بهتر از پیچیدگیاش دربدترین حالت باشد و این اطلاعات مفیدی در مورد آن الگوریتم است.
الگوریتمها به دو دسته تقسیم میشوند، بازگشتی و ترتیبی. الگوریتمهایی که بازگشتی نیستند، ترتیبی هستند. الگوریتمهای ترتیبی را معمولا با شمارش دفعات اجرای دستوری که بر اساس اندازه دادهی ورودی، بیشترین بار اجرا میشود، (در صورتی که زمان اجرای دستور از یک مقدار ثابت تبعیت کند) تحلیل میکنیم. اما زمان اجرا و الگوریتم بازگشتی با رابطههای بازگشتی بیان میشوند. روشهای مختلفی برای حل این نوع رابطهها داریم.
یک روش خوب برای حل رابطههای بازگشتی، استفاده از '''درخت بازگشتی''' است. این روش نحوه جایگذاری یک عبارت بازگشتی و نیز مقدار ثابتی را که در هر سطح از آن عبارت به دست میآید، نشان میدهد. حاصل جمع مقادیر ثابت تمام سطرها جواب حل بازگشتی است.
برای بررسی خوب بودن یک الگوریتم، باید به آهنگ رشد منحنی زمان اجرا-اندازه ورودی یا میزان حافظه مصرفی-اندازه ورودی توجه
=== تحلیل زمان اجرای الگوریتم ===
همان طور که در بالا گفته شد، تحلیل الگوریتم به معنای تخمین میزان منابعی است که الگوریتم به آن نیاز دارد. فرض میکنیم با یک تک پردازندهی عمومی پیاده سازی شده با حافظه دسترسی تصادفی (RAM)
الگوریتم مرتبسازی حبابی را در نظر بگیرید:
سطر ۴۹ ⟵ ۵۰:
&T_1 = n.c_1\\
\end{align}</math>
برای خط دوم: <math>\begin{align}
& T_2= \left[ 1+2+3+\cdots + (n-1) + n\right].c_2=
\end{align}</math>
برای خط سوم: <math>\begin{align}
& T_3=\left[\frac{1}{2}(n^2 + n)\right]c_3\\
\end{align}</math> و خط چهارم هم در بدترین حالت (اگر هر دفعه وارد if شود) <math>\begin{align}
& T_4=\left[\frac{1}{2}(n^2 + n)\right]c_4\\
\end{align}</math> است. پس زمان اجرای کل برنامه در بدترین حالت:
:<math>f(n) =T_1+T_2+T_3+T_4= nc_1+\left[ \frac{1}{2} (n^2 + n) \right] c_2 + \left[ \frac{1}{2} (n^2 + n) \right] c_3 + \left[ \frac{1}{2} (n^2 + n) \right] c_4
</math>
|