موضوع مقاله: زمان اجرای الگوریتم | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # زمان اجرای الگوریتم | مقدمه: در نظریه پیچیدگی محاسباتی و علوم کامپیوتر، پیچیدگی زمانی یا زمان اجرایِ یک الگوریتم مقدار زمانی را توصیف می‌کند تا الگوریتم اجرا و متوقف شود. | ## بخش 1: زمان اجرای الگوریتم | پیچیدگی زمانی معمولاً با شمارش تعداد عملیات‌های پایه‌ای که الگوریتم انجام می‌دهد توصیف می‌شود. زمان اجرای الگوریتم را معمولاً با نماد به عنوان تابعی از مقدار ورودی نمایش می‌دهیم. به عبارتی دیگر یعنی مقدار زمانی که طول می‌کشد تا الگوریتم اجرا شود اگر به آن ورودی دلخواه بدهیم. در این موارد بدترین حالت یا میانگین این حالات را معیارمان قرار می‌دهیم (بیشینه یا متوسط میان تمام ورودی‌های ممکن به طول ). دلیل این کار این است که در تحلیل یک الگوریتم، رفتار کلی یک الگوریتم برای ما مهم است (و نه یک حالت خاص) در حقیقت تنها مسأله‌ای که برایمان مهم است نرخ رشد زمان اجرا (نسبت به ) است. زمان اجرا از مسائل مهم در طراحی الگوریتم است و برای تحلیل و بررسی میزان کارایی الگوریتم‌ها اهمیت دارد. رفتار مجانبی زمان اجرا بیشترین اهمیت را دارد و معمولاً با نمادهای مجانبی توصیف می‌شود. تعریف به شکل دقیق، مقدار (اندازهٔ ورودی) برابر با تعداد هایی (مثل صفر و یک) است که به الگوریتم ورودی داده می‌شود. همان طور که گفته شد، این که این بیت‌ها صفر باشند یا یک اهمیتی ندارد و معمولاً بدترین حالت را در نظر می‌گیریم. | ## بخش 2: زمان اجرای الگوریتم | فرض کنید یک مدل محاسباتی مثل یک ماشین تورینگ یا ماشین با دسترسی تصادفی باشد که همیشه پایان ‌‌پذیر است. پیچیدگی زمانی تابعی به صورت است که در آن تعداد مراحلی است (تعداد اعمال پایه مثل جمع و ضرب و ...) که طی می‌کند (در صورت یک ورودی با طول ). هر عمل پایه (مثل جمع و ضرب و ...) در یک مدل محاسباتی مقدار یکسانی زمان می‌برد و این مقدار (هزینهٔ هر عمل) را واحد زمانی می‌نامیم. پس زمان اجرای الگوریتم برابر با تعداد اعمال پایه‌ای است که این الگوریتم انجام می‌دهد. در پردازنده‌‌های واقعی هر عمل پایه ممکن است به اندازهٔ متفاوتی طول بکشند (مثلاً عمل ضرب کمی کندتر از عمل جمع است) اما در این مدل‌ها از این تفاوت‌های ناچیز صرف نظر می‌کنیم. در کامپیوترهای امروزی هر واحد زمانی حدوداً معادل یک نانوثانیه است ولی این تقریب با پیشرفت تکنولوژی (در سخت‌افزار) تغییر می‌کند (قانون مور). گاهی در مدل‌های قدیمی هزینهٔ اعمال پایه واحد در نظر گرفته نمی‌شد: معیار هزینه واحد (پیچیدگی اعمال حسابی) : هر عملیات به اندازهٔ یک واحد زمانی (ثابت) هزینه دارد. معیار هزینه لگاریتمی (پیچیدگی بیتی) : هزینهٔ انجام هر عملیات با لگاریتم آن متناسب است. همچنین در کامپیوترهای امروزی هر عدد در یا ذخیره می‌شود و معمولاً ۳۲ یا ۶۴ بیت دارد و اعمال ساده در آنها هزینهٔ ثابتی دارد . | ## بخش 3: زمان اجرای الگوریتم | برای اعداد -بیتی را با هزینهٔ ثابت انجام داد، می‌توان از این قابلیت برای حل سریعتر و راحت‌تر مسائل سوء استفاده کرد؛ در حالی که در واقعیت چنین امری ممکن نیست (دلیل استفاده از معیار هزینه لگاریتمی نیز همین بود). اگر طولشان را واحد فرض کنیم (بیت) هزینهٔ هر عمل مثل معیار لگاریتمی می‌شود (مثلاً برای جمع دو عدد -بیتی باید بیت به بیت جمع کرد و برای هر بیت یک واحد هزینه می‌شود)؛ همچنین اگر طولشان را دلخواه (هر اندازه بزرگ) فرض کنیم به تعریف می‌رسیم و هزینهٔ هر عمل مثل معیار هزینه واحد می‌شود. هر عمل پایه (مثل ۴ عمل اصلی و اعمال بیتی منطقی و ...) بر روی هر به اندازهٔ یک واحد زمانی هزینه دارد. طول هر و اعمالی که می‌توان روی آنها انجام داد بستگی به تعریف خودمان دارد و در هر موقعیت و زمینه‌ای باید انتخاب مناسب انجام داد تا واقعیت را به شکل دقیق‌تری مدل‌سازی کند. بی‌توجهی به این موارد از اشتباهات رایج در تحلیل الگوریتم در کتاب‌ها و مقالات است. در این موارد با فرض یک مدل خاص، یک کران پایین برای پیچیدگی محاسباتی اثبات می‌شود و نتیجه گرفته می‌شود که هیچ الگوریتم سریعتری وجود نخواهد داشت در حالی که آن مدل به خوبی کامپیوترهای واقعی را توصیف نمی‌کند. پیچیدگی بیتی در تحلیل پیچیدگی محاسباتی اعمال ریاضی هدف ما پیدا کردن پیچیدگی محاسبهٔ یک عمل مثل ضرب است و نمی‌توانیم صورت مسئله (عمل ضرب -بیتی) را یک عمل پایه فرض کنیم. در الگوریتم‌های محاسبات ماتریسی معمول (مثل روش گاوس) پیچیدگی اعمال حسابی است ولی پیچیدگی محاسباتی یا بیتی آن ممکن است بسیار فراتر رود (نمایی)، زیرا در طول محاسبه (مثلاً در هر عمل کاهش یا حذف) ممکن است درایه‌های ماتریس به صورت نمایی رشد کنند. | ## جمع‌بندی | پیچیدگی‌های زمانی متداول در تحلیل زمانی الگوریتم‌ها به توابع متداولی بر می‌خوریم که در اینجا به ترتیب نرخ رشدشان به آنها اشاره می‌شود.