مرتبه ی اجرایی (پیچیدگی الگوریتم) - نسخهی قابل چاپ |
مرتبه ی اجرایی (پیچیدگی الگوریتم) - fusion - 11 فروردین ۱۳۹۴ ۱۱:۰۱ ق.ظ
سلام دوستان تو مقدمه درس اولین فصل که الگوریتم این موضوع استاد عنوان کردن اصلا مفهوم این بخش متوجه نمیشم مطالب دیگه هست که زمینه میکنم مرتبه ی اجرایی (پیچیدگی الگوریتم ) Order (O) مرتبه ی اجرایی محاسبه فاکتوریال عدد N : T~N =>O(N) *N N!=1*2*3 مرتبه ی اجرایی محاسبه مجموعه یک آرایه N عضوی : O(N) مرتبه ی اجرایی محاسبه بزرگترین عنصر یک آرایه N عضوی : O(N) مرتبه ی اجرایی محاسبه جستوجو خطی یا ترتیبی در آرایه N عضوی : O(N) |
RE: مرتبه ی اجرایی (پیچیدگی الگوریتم) - iwes - 11 فروردین ۱۳۹۴ ۱۲:۳۶ ب.ظ
ببینید توی علوم کامپیوتر کلا وقتی یه الگوریتمی(یه راه حل به زبان ساده) برای یه مسئله داریم میخوایم بدونیم این راه حل ما چقدر خوبه؟ یعنی ما اگه بخوایم یه برنامه بنویسیم که همون مسئله رو حل کنه چقدر سریع اجرا میشه؟حالا بحث اینه که سخت افزار کامپیوتر ها با هم دیگه فرق دارن یعنی اینکه ممکنه یه برنامه مثلا با یه ورودی خاص ۱۰ ثانیه روی یه کامپیوتر طول بکشه تا اجرا بشه و همون برنامه با همون ورودی روی کامپیوتر دیگه ۵ ثانیه .پس تا اینجا تحلیل سریع اجرا شدن الگوریتم وابسته یه سخت افزار هستش. اومدن گفتن اینجوری نمیشه یعنی توی دنیا هزار جور کامپیوتر مختلف هستش نمیشه برای تک تک اون ها ما بیایم سرعت جداگانه الگوریتم رو حساب کنیم. پس یه روش دیگه برای تحلیل پیچیدگی یا سرعت اجرای برنامه داشته باشیم که تقریبا مستقل از سخت افزار باشه .یعنی وقتی میگیم مثلا فلان الگوریتم پیچیدگیش n هستش رو همپه ی سخت افزار ها همین هستش تقریبا و عامل سخت افزار رو معمولا با ضریب ها اثر میدن.این تا اینجا .این که میگن فلان الگوریتم اردر n هستش یعنی چی؟مثلا همون که استادتون گفتن زمان اجرای جمع یه ارایه n هستش یعنی چی؟ببینید طبق توضیحات بالا که عرض کردم برای محاسبه سریع بودن یه الگوریتم اومدن گفتن که خوب چون زمان اجرا تقریبا وابسته به سخت افزار هستش ما یه روشی ارائه میدیم که زیاد سخت افزار دخیل نباشه وقتی میگیم الگوریتم مرتبه ی اجراش t(n)=n هستش یا همون که شما میگید n(مفهوم عام نه دقیق ریاضی) یعنی این که زمان اجرا برنامه شما همون t تابعی از مقدار(بزرگی)ورودی برنامه شما n هست .این یعنی چی؟یعنی اینکه اگه شما قبلا جمع ارایه برای ۲تا عنصر انجام میدادید و حالا برای ۴ تا عنصر میخواید همون کار رو انجام بدید زمان اجرای برنامه ۲ برابر میشه پس t(2)=2 t(4)=4 t(8)=8 t(10)=10 متوجه شدید؟یعنی اگه یه ارایه ی ۱۰۰ تایی داشته باشید میشه t(100)=100 یعنی یه صورت خطی اگه شما اندازه ی ارایه رو ۱۰۰ برابر کنید زمان اجرای برنامه شما هم ۱۰۰ برابر میشه. اگه مثلا زمان اجرای برنامه شما[tex]n^2[/tex] بود اگه وردی شما مثلا ۴ بود بعد زمان اجرای برنامه شما ۱۶ میشد حالا اگه ورودی رو شما ۸ میکردید زمان اجرای برنامه شما دیگه دوبرابر نمیشه میشه ۴برابر زمان قبلی یعنی ۶۴/ حالا چرا مثلا جمع ارایه میشه n؟ببیند تیکه کد اصلی که توی برنامه جمع ارایه استفاده میشه این هستش (++for (i=0; i<num_elements; i { ;[ sum = sum + a[i } (return(sum یعنی عمل اصلیمون که هی داره تکرار میشه ;[ sum = sum + a[i این تیکه هست یعنی هی میره خونه iام ارایه رو از حافظه میخونه با sum جمع میکنه بعدی میره سراغ خونه ی بعدی حالا ما اگه n تا خونه داشته باشیم یعنی یه ارایه n عضوی این عمل n بار انجام میشه یه همین خاطر میگن از مرتبه n هستش.برای بقیه اون مثال هاتون هم به همین ترتیب که توضیح دادم هستش. این چیزهایی که من گفتم خیلی به زبان ساده و بدون پشتوانه ریاضیش بود تقریبا که شما بفهمید جریان از چه قرار هستش اگه دقیق تر و بهتر میخواید مطالعه کنید میتونید برید سراغ منابع درسی مثل کتاب clsr و نیپولیتان و... مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید. لینک هم که میزارم دقیق تر و فرمال تر توضیح داده. امیدوارم که متوجه شده باشید |
RE: مرتبه ی اجرایی (پیچیدگی الگوریتم) - fusion - 14 فروردین ۱۳۹۴ ۰۲:۰۵ ب.ظ
سلام و تشکر از دوستان گرامی توضیحات واقع عالی و ساده بود من خیلی ضعف دارم تو این درس و مشکلات در دانشگاه هست مجبورم سر فصل بیام اینجا قرار بدم باتوجه که با دوستان مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید. بحث شد تو فصل مربوط به الگوریتم ها ، محاسبه گام به گام الگوریتم بحث شده امکانش هست این بحث تو ضحیات بدید یکی از مثالها استاد این : for(a=1) , a<=s;a++ printf(%d;a) ===> 1,2,3,4,5 |