زمان اجرای الگوریتم

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

این متن اصلی مقاله‌است که از کتاب خاصی[۱] و کتاب دیگری[۲] و یک پانویس هم دارد *[۳]

زمان اجرای الگوریتم[ویرایش]

زمان اجرای یک الگوریتم از مسائل مهم طراحی الگوریتم می باشد و غالباً کارایی الگوریتم ها را از روی زمان اجرای آنها بررسی می شود.همان طور که می دانیم الگوریتم عبارتست از : مجموعه ای از دستورها و دستورالعمل ها برای حل مسئله که شرایط زیر را باید دارا باشد:

  • دقیق باشد
  • مراحل ان به ترتیب اجرا شود
  • پایان پذیر باشد

الگوریتم ها توسط زبان های برنامه نویسی پیاده سازی می شوند و هر الگوریتم توسط یک برنامه ارائه میشود هر برنامه نیز مثل الگوریتم زمان اجرای خاص خود را دارد .عوامل دخیل در زمان اجرای برنامه:

  • سرعت سخت افزار
  • نوع کامپایلر
  • اندازه داده ورودی
  • ترکیب داده های ورودی
  • پیچیدگی زمانی الگوریتم
  • پارامترهای دیگر که تاثیر ثابت در زمان اجرا دارند.

از این عوامل سرعت سخت افزار و نوع کامپایلر به صورت ثابت در زمان اجرای برنامه ها دخیل هستند.پارامتر مهم پیچیدگی زمانی الگوریتم است که خود تابعی از اندازه مسئله می باشد.ترکیب داده های ورودی نیز با بررسی الگوریتم در شرایط مختلف قابل اندازه گیری می باشد.در ادامه سعی در بررسی پیچیدگی زمانی الگوریتم خواهیم داشت. برای بررسی الگوریتم تابعی به نام (T(n که تابع زمانی الگوریتم نامیده میشود در نظر می گیریم که در آن n اندازه ورودی مسئله است.مسئله ممکن است شامل چند ورودی باشد.به عنوان مثال اگر ورودی یک گراف باشد علاوه بر تعداد راس ها(n) تعداد یال ها (m)هم یکی از مشخصه های داده ورودی می باشد.در این صورت زمان اجرای الگوریتم را با (T(n,m نمایش می دهیم. در صورتی که تعداد پارامترها بیشتر باشند آن هایی که اهمیت بیشتری در زمان اجرا دارند را در محاسبات وارد می کنیم و از بقیه صرف نظر می کنیم.

برای محاسبه تابع (T(n برای یک الگوریتم موارد زیر را باید در محاسبات در نظر بگیریم:

  • زمان مربوط به اعمال جایگزینی که مقدار ثابت دارند.
  • زمان مربوط به انجام اعمال محاسباتی که مقدار ثابت دارند.
  • زمان مربوط به تکرار تعدادی دستور یا دستورالعمل
  • زمان مربوط به توابع بازگشتی

از موارد ذکر شده در محاسبه (T(n یک الگوریتم محاسبه تعداد تکرار عملیات و توابع بازگشتی اهمیت ویژه ای دارند و کا پیچیدگی زمانی مربوط به این دو می باشد.

مثال:تعداد کل مراحل برنامه زیر را محاسبه کنید.

0                         (int func(int n
۰                                     }  
0                            ;int i
1                            ;int sum=۰
FOR(i=1;i<=n;i++)                        n+1 
sum=sum+i;                            n 
1                             ;return sum                             
۰                                 {                                              

کل عبارت مساوی 2n+3 می شود.همان طور که مشاهده می کنید زمان اجرای هر عبارت جایگزینی یا محاسباتی را مساوی ۱ واحد زمانی فرض می کنیم.هم چنین دستور داخل حلقه n بار انجام می شود ولی آزمایش کردن شرط حلقه در خط for به تعداد n+1 بار صورت می گیرد.دستور Return نیز مساوی یک واحد زمانی است.

  • نکته

خطوط { } و نیز خط اول تعریف تابع و تعریف متغیر دستورهایی نیستند که توسط cpu اجرا شوند و زمان اجرای آن ها برابر صفر است.

  • نکته

اگر عمل اصلی را فقط خط ;Sum=sum+I فرض کنیم انگاهT(n)=n خواهد بود.

مثال:دستور اصلی a=a+1 در قطعه برنامه زیر چند بار اجرا می گردد؟

                    (++For( i=1 ; i<=m ;i
            ( ++For(j=1 ; j<=n ; j
                 ; A=a+1
  • نکته

حلقه های for برنامه مستقل از یکدیگر هستند

T(N)=MN

مثال: دستور اصلی a=a+1 در قطعه برنامه زیر چند بار اجرا می گردد؟

                     (++For(j=1 ; j<=n ; j  
          ++For( i=1 ; i<=j ;i
                  ;A=a+1
  • نکته

حلقه های for برنامه به یکدیگر وابسته اند:

تعداد اجرا شدن A=a+1; I J
۱ بار ۱ ۱
۲ بار ۱٬۲ ۲
۳بار ۱٬۲،۳ ۳
- - -
- - -
- - -
n بار 1,2،3,...,n n

تعداد اجرا شدن دستور اصلی= 3,2،1,...,n(n+1)/2 = n

T(n)=n(n+1)/2

پانویس[ویرایش]

  1. بابا محمودی، طلایی پویندگان دانشگاه تحلیل و طراحی الگوریتم ها، 115-150. [=صفحات کتاب]
  2. احمدی، فایل در فایل.
  3. این یک پانویس توضیحی‌است.

منابع[ویرایش]

  • بابا محمودی،رمضان. کتاب طلایی پویندگان دانشگاه تحلیل و طراحی الگوریتم ها.تهران:نشر ۱۳۹۰.
  • احمدی، احمد. فایل در فایل. چاپ دوم. تهران: نشر۲، ۱۳۷۵