مشاهده - سید محمد بیدکی

Download Report

Transcript مشاهده - سید محمد بیدکی

‫درس طراحی الگوریتم ها‬
‫فصل اول‬
‫کارایی ‪ ،‬تحلیل و مرتبه الگوریتم ها‬
‫مدرس‪ :‬سید محمد بیدکی‬
‫زمستان ‪1391‬‬
‫هدف از مطالعه درس طراحی الگوریتم‬
‫‪ ‬به طور معمول برای حل یک مسئله مشخص بیش از یک الگوریتم وجود‬
‫دارد‪.‬‬
‫‪ ‬مثال‪ :‬یافتن معنی کلمه الگوریتم در فرهنگ لغت‬
‫‪ ‬برخی از این الگوریتم ها از بقیه کاراتر می باشند‪.‬‬
‫‪ ‬الگوریتمی انتخاب می شود که بیشترین کارایی را داشته باشد‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪2‬‬
‫هدف از مطالعه درس طراحی الگوریتم‬
‫‪ ‬پرسش های مطرح شده‪:‬‬
‫‪ ‬آیا الگوریتمی که ارائه می شود درست است یا خیر؟‬
‫‪ ‬چگونه الگوریتم های مربوط به یک مسئله مقایسه می شوند؟‬
‫‪ ‬کارایی )‪ (efficiency‬هر الگوریتم چگونه تعیین می شود؟‬
‫‪ ‬برای این کار نیاز به تحلیل الگوریتم ها داریم‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪3‬‬
‫تفاوت دروس طراحی الگوریتم و ساختمان داده ها‬
‫ساختمان داده ها‬
‫طراحی الگوریتم ها‬
‫‪‬مسائل ساده تر‬
‫‪‬مسائل پیچیده تر‬
‫‪‬یادگیری مسائل قطعی‪ :‬مرتب سازی‪،‬‬
‫جست و جو و ‪...‬‬
‫‪‬یادگیری روش های کلی جهت حل مسائل‬
‫قطعی‪ :‬تقسیم و غلبه‪ ،‬برنامه نویسی پویا‪،‬‬
‫الگوریتم حریصانه و ‪...‬‬
‫‪‬چگونگی حل این مسائل قطعی‬
‫‪‬چگونگی حل مسائل گوناگون با استفاده از‬
‫این روش ها‬
‫‪‬مروری بر درس ساختمان داده ها‬
‫‪‬یادآوری مفاهیم اولیه ریاضیات ( سری ∑‪ ،‬لگاریتم ‪ log‬و ‪) ...‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪4‬‬
‫تعریف الگوریتم‬
‫‪ ‬دنباله ای از دستورات که با اجرای مرحله به مرحله آنها می توان به نتیجه‬
‫مورد نظر دست یافت‪.‬‬
‫‪ ‬خصوصیات هر الگوریتم‪:‬‬
‫‪ ‬دارای ورودی است‪.‬‬
‫‪ ‬دارای خروجی است‪.‬‬
‫‪ ‬دارای ترتیب (توالی) است‪.‬‬
‫‪ ‬واضح و صریح است‪ ( .‬بدون ابهام می باشد)‪.‬‬
‫‪ ‬محدود است‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪5‬‬
‫تعریف مسئله‬
‫‪ ‬مسئله‪ :‬سؤالی که به دنبال پاسخ آن هستیم‪.‬‬
‫‪ .1‬مرتب سازی یک لیست ‪ S‬متشکل از ‪ n‬عدد به ترتیب غیر نزولی‪ .‬پاسخ دنباله مرتب از ‪n‬‬
‫عدد می باشد‪.‬‬
‫پارامترهای مسئله‬
‫‪ .2‬تعیین اینکه آیا عدد ‪ x‬در لیست ‪ S‬متشکل از ‪ n‬عدد وجود دارد یا خیر‪ .‬در صورت‬
‫وجود پاسخ ”بله“ و در غیر این صورت پاسخ برابر با ”خیر“ خواهد بود‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪6‬‬
‫تعریف نمونه مسئله‬
‫‪ ‬مسائلی که شامل پارامترها هستند بیانگر کالسی از مسائل می باشند‪.‬‬
‫‪ ‬نمونه مسئله‪ :‬هر انتساب خاصی از مقادیر به پارامترها‬
‫‪ ‬راه حل یک نمونه مسأله‪ :‬پاسخ سؤال پرسیده شده توسط مسأله در آن نمونه‬
‫مسئله‬
‫‪ ‬نمونه مسئله ‪:1‬‬
‫‪ ‬راه حل‪:‬‬
‫}‪n = 6 , S = {8 , 13, 5, 11, 7, 10‬‬
‫}‪{5, 7, 8, 10, 11,13‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪7‬‬
‫الگوریتم درست‪/‬نادرست‬
‫‪ ‬چنانچه الگوریتمی بتواند برای هر نمونه از ورودی‪ ،‬خروجی درست را تولید‬
‫کند و متوقف شود‪ ،‬آن الگوریتم درست )‪ (correct‬است‪.‬‬
‫‪ ‬چناچه نرخ خطای الگوریتم های نادرست قابل کنترل باشد می توان از‬
‫آنها نیز استفاده کرد‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪8‬‬
‫حل مسئله‬
‫‪‬‬
‫حل مسئله فرایندیست شامل ‪ 3‬بخش‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫تعیین پارامترهای مسئله‬
‫بیان الگوریتم‬
‫پاسخ مسئله‬
‫‪ ‬الگوریتم می تواند به زبان طبیعی‪ ،‬به صورت برنامه کامپیوتری (توسط‬
‫زبان برنامه نویسی) یا طراحی سخت افزاری مشخص شود‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪9‬‬
‫بیان الگوریتم‬
‫‪ ‬یک الگوریتم برای مسأله ‪( 2‬جستجو)‪:‬‬
‫‪ ‬با شروع از اولین عنصر ‪ S‬به ترتیب ‪ x‬را با هر یک از عناصر ‪ S‬مقایسه کن تا‬
‫اینکه ‪ x‬را پیدا کنی یا به انتهای لیست برسی‪ .‬اگر ‪ x‬پیدا شد پاسخ ”بله“ و در‬
‫غیر این صورت پاسخ ”خیر“ را تولید کن‪.‬‬
‫‪ ‬معایب نوشتن الگوریتم ها به زبان طبیعی‬
‫‪ ‬مشکل بودن نوشتن و درک الگوریتم های پیچیده‬
‫‪ ‬مشکل بودن ترجمه آن به یک زبان برنامه نویسی‬
‫‪‬‬
‫لذا الگوریتم ها را توسط شبه کدهایی از یک زبان برنامه نویسی بیان می‬
‫کنیم‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪10‬‬
‫شبه کد‬
‫‪ ‬بیان الگوریتم جستجوی ترتیبی به صورت شبه کد‪:‬‬
‫‪ ‬در شبه کد هر گاه بتوانیم مراحل را با وضوح بیشتر‬
‫با استفاده از روابط ریاضی و توضیحات انگلیسی نشان‬
‫می دهیم‪.‬‬
‫{ ) ‪if ( low ≤ x ≤ high‬‬
‫…‬
‫{‬
‫‪‬ساختار کنترلی غیر استاندارد‪:‬‬
‫{ )‪repeat ( n times‬‬
‫…‬
‫}‬
‫; ‪exchange x and y‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪11‬‬
‫تمرین در کالس‬
‫‪ ‬توجه‪ :‬برای هر الگوریتم ورودی و خروجی را تعیین کنید‪.‬‬
‫‪ ‬الگوریتم جمع عناصر یک آرایه‬
‫‪ ‬الگوریتم ضرب ماتریسها‬
‫‪ ‬الگوریتم مرتب سازی عناصر به ترتیب غیر نزولی ( ‪ -exchange sort‬مرتب‬
‫سازی تعویضی)‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪12‬‬
‫پاسخ‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪13‬‬
‫اهمیت توسعه الگوریتم های کارا‬
‫‪ ‬کارآیی الگوریتم ها همواره و بدون در نظر‬
‫گرفتن افزایش سرعت کامپیوترها و کاهش‬
‫قیمت حافظه‪ ،‬باید مد نظر باشد‪.‬‬
‫چرا؟‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪14‬‬
‫الگوریتم جستجوی ترتیبی‬
Void seqsearch ( int n, const keytype S[ ], keytype x,
index &location)
{
location = 1;
while (location <= n && S[location] ! = x)
location++;
if (location > n )
location = 0 ;
}
15
‫ بیدکی‬:‫ مدرس‬-‫ تحلیل و مرتبه الگوریتم ها‬،‫ کارائی‬- ‫ فصل اول‬- ‫درس طراحی الگوریتم ها‬
‫الگوریتم جستجوی دودویی‬
‫‪Binary search ‬‬
‫‪ ‬شرط انجام این جستجو داشتن‬
‫یک آرایه مرتب است‪.‬‬
‫‪ ‬تقسیم آرایه به دو نیمه و‬
‫مقایسه با عنصر میانی‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪16‬‬
‫مقایسه دو الگوریتم ]‪[1‬‬
‫‪ ‬با فرض داشتن آرایه ‪ 32‬عنصری‬
‫‪ 32‬مقایسه در بدترین حالت‬
‫‪ Linear search:‬‬
‫‪ Binary search:‬‬
‫تعداد مقایسه های انجام شده توسط‬
‫جستجوی ترتیبی )‪(n‬‬
‫تعداد مقایسه های انجام شده توسط‬
‫جستجوی دودویی )‪(lg n +1‬‬
‫اندازه آرایه‬
‫‪128‬‬
‫‪8‬‬
‫‪128‬‬
‫‪1024‬‬
‫‪11‬‬
‫‪1024‬‬
‫‪1048576‬‬
‫‪21‬‬
‫‪1048576‬‬
‫‪4294967294‬‬
‫‪33‬‬
‫‪4294967294‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪17‬‬
‫الگوریتم دنباله فیبوناچی‬
‫‪‬محاسبه جمله ‪n‬ام فیبوناچی (تکراری)‬
‫محاسبه ‪ n+1‬جمله‬
‫‪‬محاسبه جمله ‪n‬ام فیبوناچی‬
‫(بازگشتی)‬
‫‪n‬‬
‫محاسبه بیش از ‪ 2 2‬جمله‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪18‬‬
‫الگوریتم جمله ‪ n‬اُم فیبوناچی (بازگشتی)‬
‫‪‬‬
‫با رسم درخت بازگشتی واضح است که‬
‫این الگوریتم بسیار ناکارآمد می باشد‪.‬‬
‫تعداد جمالت‬
‫محاسبه شده‬
‫‪n‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪3‬‬
‫‪2‬‬
‫‪5‬‬
‫‪3‬‬
‫‪9‬‬
‫‪4‬‬
‫‪15‬‬
‫‪5‬‬
‫‪25‬‬
‫‪6‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪19‬‬
‫الگوریتم جمله ‪ n‬اُم فیبوناچی (بازگشتی) ‪...‬‬
‫‪ : T(n) ‬تعداد جمالت محاسبه شده در درخت بازگشتی‬
‫‪ ‬با افزودن ‪ 2‬واحد به ‪ ،n‬تعداد جمالت درخت بیش از ‪ 2‬برابر می شود‪.‬‬
‫)‪T(n) > 2 × T(n-2‬‬
‫)‪> 2 × 2 × T(n-4‬‬
‫)‪> 2 × 2 × 2 × T(n-6‬‬
‫‪.‬‬
‫‪.‬‬
‫)‪> 2 × 2 × 2 × … × 2 ×T(0‬‬
‫‪‬‬
‫‪T(n) > 2n/2‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪20‬‬
‫الگوریتم جمله ‪ n‬اُم فیبوناچی (تکراری)‬
‫‪‬الگوریتمی کارآمد‬
‫‪‬برای تعیین جمله ‪-n‬اُم دنباله‪ ،‬هر‬
‫یک از )‪ (n-1‬جمله نخست را فقط‬
‫یک بار محاسبه می کند‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪21‬‬
‫مقایسه دو الگوریتم ]‪[2‬‬
‫زمان اجرای بازگشتی‬
‫زمان اجرای )‪(ns‬‬
‫تکراری‬
‫روش بازگشتی‬
‫روش‬
‫تکراری‬
‫‪n‬‬
‫‪1048 μs‬‬
‫‪1s‬‬
‫‪41‬‬
‫‪61‬‬
‫‪1.048576‬‬
‫‪1.1*109‬‬
‫‪41‬‬
‫‪61‬‬
‫‪40‬‬
‫‪60‬‬
‫‪13 days‬‬
‫‪36 years‬‬
‫‪3.8*107 years‬‬
‫‪101‬‬
‫‪121‬‬
‫‪161‬‬
‫‪1.1*1015‬‬
‫‪1.2*1018‬‬
‫‪1.2*1024‬‬
‫‪101‬‬
‫‪121‬‬
‫‪161‬‬
‫‪100‬‬
‫‪120‬‬
‫‪160‬‬
‫‪4*1013 years‬‬
‫‪201‬‬
‫‪1.3*1030‬‬
‫‪201‬‬
‫‪200‬‬
‫‪ ‬با فرض محاسبه هر جمله در مدت ‪ 1‬نانوثانیه‬
‫‪1 μs = 10-6 s‬‬
‫‪1 ns = 10-9 s‬‬
‫‪Note:‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪22‬‬
‫تحلیل الگوریتم ها‬
‫‪ ‬هدف از تحلیل الگوریتم ها‪:‬‬
‫‪ ‬بررسی رفتار الگوریتم از نظر زمان اجرا و مقدار حافظه مصرفی‬
‫قبل از پیاده سازی‬
‫‪ ‬مقایسه الگوریتم ها از نظر کارآیی‬
‫‪Time complexity‬‬
‫‪Space complexity‬‬
‫‪ ‬عوامل موثر در زمان اجرای یک برنامه ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫سرعت سخت افزار‬
‫نوع کامپایلر ( بهینگی کد مقصد)‬
‫برنامه نویس ( بهینگی کد منبع)‬
‫اندازه ورودی‬
‫ترکیب داده های ورودی‬
‫پیچیدگی الگوریتم‬
‫‪...‬‬
‫در الگوریتم های مختلف‬
‫تاثیر ثابت دارند‬
‫‪ ‬مهمترین عامل‪ ،‬پیچیدگی الگوریتم می باشد که خود‬
‫تابعی از اندازه ورودی است‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪23‬‬
‫تحلیل الگوریتم ها‬
‫‪‬چنانچه اندازه داده ها را ‪ 10‬میلیون عدد در نظر بگیریم‪:‬‬
‫‪‬مرتب سازی درجی به طور تقریبی ‪ 2.3‬روز‬
‫‪‬مرتب سازی ادغامی ‪ 20‬دقیقه زمان الزم دارد‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪24‬‬
‫تحلیل الگوریتم ها‬
‫‪ ‬تحلیل پیچیدگی زمانی‬
‫‪ ‬محاسبه کارآیی بر حسب زمان‬
‫‪ ‬هدف تعیین تعداد سیکل های ‪ cpu‬نیست چون در ماشینهای مختلف‪،‬‬
‫متفاوت است‪.‬‬
‫‪ ‬مستقل از کامپیوتر‪ ،‬زبان برنامه نویسی و برنامه نویس‬
‫‪ ‬تحلیل پیچیدگی زمانی یک الگوریتم‪ ،‬تعیین تعداد دفعاتی است که‬
‫عملیات اصلی الگوریتم ( مقایسه‪ ،‬جمع‪ ،‬ضرب و ‪ )...‬بر حسب اندازه ورودی‬
‫انجام می شود‪.‬‬
‫‪ ‬برای تحلیل پیچیدگی یک الگوریتم تابعی به نام )‪ T(n‬در نظر میگیریم‬
‫که در آن ‪ n‬اندازه ورودی می باشد‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪25‬‬
‫اندازه ورودی‬
‫‪ ‬در بسیاری از الگوریتم ها یافتن میزانی منطقی از اندازه ورودی آسان است‬
‫‪ ‬مثال‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫جستجوی ترتیبی‬
‫محاسبه مجموع عناصر آرایه‬
‫مرتب سازی تعویضی‬
‫جستجوی دودوی‬
‫ضرب ماتریس ها‬
‫‪ ‬در برخی از الگوریتم ها بهتر است اندازه ورودی را برحسب دو عدد بسنجیم‪:‬‬
‫‪ ‬اگر ورودی الگوریتم یک گراف باشد‪ ،‬اندازه وروی را برحسب تعداد رئوس و تعداد‬
‫یال ها می سنجیم‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪26‬‬
‫عملیات اصلی‬
‫‪ ‬عمل اصلی‬
‫‪ ‬دستور یا مجموعه ای از دستورات به طوری که کل کار انجام شده توسط‬
‫الگوریتم‪ ،‬تقریبا متناسب با تعداد دفعات اجرای این دستور یا مجموعه‬
‫دستورات باشد‪.‬‬
‫‪ ‬مثال‪ :‬جستجوی ترتیبی و جستجوی دودویی لیستی به طول ‪ n‬عنصر‬
‫‪ ‬در هر بار گذر از حلقه عنصر ‪ x‬با یک عنصر از ‪ S‬مقایسه می شود‪.‬‬
‫‪ ‬با تعیین اینکه هر یک از این الگوریتم ها چند بار این عمل اصلی را انجام می‬
‫دهند‪ ،‬می توان کارآیی این دو الگوریتم را به ازای هر مقدار از ‪ n‬مقایسه‬
‫نمود‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪27‬‬
‫تحلیل پیچیدگی در حاالت مختلف‬
‫)‪ :T(n‬تعداد دفعاتی که الگوریتم عمل اصلی را به ازای یک نمونه با‬
‫اندازه ورودی ‪ n‬انجام می دهد‪.‬‬
‫‪ ‬در برخی موارد مانند الگوریتم مجموع عناصر آرایه‪ ،‬عمل اصلی همواره‬
‫به ازای یک نمونه با اندازه ورودی ‪ n‬به یک میزان انجام می شود‬
‫‪ ‬در برخی موارد دیگر‪ ،‬تعداد دفعات اجرای عمل اصلی نه تنها به اندازه‬
‫ورودی بلکه به ترکیب و چیدمان مقادیر ورودی نیز بستگی دارد‪.‬‬
‫‪ ‬مثال‪ :‬در جستجوی ترتیبی (با اندازه ورودی برابر با ‪)n‬‬
‫‪ ‬اگر ‪ x‬در اولین مکان آرایه باشد‪:‬‬
‫‪ ‬اگر ‪ x‬در آرایه نباشد‪:‬‬
‫تعداد مقایسه ها = ‪1‬‬
‫تعداد مقایسه ها = ‪n‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪28‬‬
‫تحلیل پیچیدگی در حاالت مختلف‬
‫‪ ‬بهترین حالت )‪B(n‬‬
‫‪ ‬حالتی که الگوریتم می تواند سریعترین زمان اجرا را داشته باشد‪.‬‬
‫‪ ‬کران پایین زمان اجرا است‪.‬‬
‫‪ ‬بدترین حالت )‪W(n‬‬
‫‪ ‬حالتی که زمان اجرای الگوریتم هرگز از آن بیشتر نخواهد شد‪.‬‬
‫‪ ‬کران باالی زمان اجرا است‪.‬‬
‫‪ ‬جهت مقایسه منصفانه بین الگوریتم ها به طورمعمول از این تابع استفاده‬
‫می شود‬
‫‪ ‬حالت میانگین )‪A(n‬‬
‫‪ ‬برای تحلیل آن نیاز به در نظر گرفتن توزیع های مختلف مقادیر ورودی می باشد‪.‬‬
‫‪ ‬محاسبه آن مشکل است‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪29‬‬
‫مثال‬
‫‪ ‬محاسبه هزینه جستجوی خطی )‪(linear search‬‬
‫‪ ‬عمل اصلی‪ :‬تعداد مقایسه‬
‫‪ ‬اندازه ورودی‪ :‬تعداد عناصر آرایه ‪n‬‬
‫‪ ‬بهترین حالت‪ :‬وقتی که عنصر مورد نظر در اولین خانه باشد‬
‫‪ ‬بدترین حالت‪ :‬وقتی که عنصر مورد نظر در آرایه موجود نباشد‬
‫‪B (n)  1‬‬
‫‪W (n)  n‬‬
‫‪ ‬حالت متوسط‪:‬‬
‫‪ ‬احتمال وجود عنصر مورد نظر در آرایه برابر با ‪p‬‬
‫‪ ‬احتمال وجود آن در خانه ‪k‬ام برابر با ‪ p/n‬است‪.‬‬
‫‪ ‬احتمال عدم وجود عنصر در آرایه ‪1- p‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪30‬‬
‫حالت متوسط‬
‫‪ ‬محاسبه هزینه در حالت متوسط‬
‫تعداد گذر(وجود)‬
‫تعداد گذر(عدم وجود)‬
‫) ‪ n * (1  p‬‬
‫‪n‬‬
‫‪p‬‬
‫) ‪ (k * n‬‬
‫‪A(n) ‬‬
‫‪k 1‬‬
‫) ‪ n * (1  p‬‬
‫)‪p ( n  1‬‬
‫‪‬‬
‫‪2‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪31‬‬
‫مرتبه الگوریتم‬
‫‪ ‬مرتبه یک الگوریتم با بزرگترین جمله تابع پیچیدگی زمانی آن تعیین می شود‪.‬‬
‫‪ ‬الگوریتم هایی با پیچیدگی زمانی ازقبیل ‪ n‬و‪ 100n‬را الگوریتم های زمانی‬
‫خطی می گویند‪.‬‬
‫‪ ‬مجموعه کامل توابع پیچیدگی را که با توابع درجه دوم محض قابل دسته بندی‬
‫باشند‪ θ ( n²) ،‬می گویند‪.‬‬
‫‪ ‬تابعی که عضو مجموعه )‪ θ ( n²‬باشد‪ ،‬از مرتبه ‪ n2‬است‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪32‬‬
‫‪ ‬مجموعه ای ازتوابع پیچیدگی که با توابع درجه سوم محض قابل دسته بندی‬
‫باشند‪ θ ( n³) ،‬نامیده می شوند‪.‬‬
‫‪ ‬برخی از گروه های پیچیدگی متداول در زیر داده شده است‪:‬‬
‫)‪θ(lg n) < θ (n) < θ (n lg n) < θ (n²) < θ (n³) < θ (2ⁿ‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪33‬‬
‫زمان اجرا برای الگوریتم هایی با پیچیدگی زمانی مختلف‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪34‬‬
‫سرعت رشد برخی توابع‬
‫پیچیدگی‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪35‬‬
‫آشنایی بیشتر با مرتبه الگوریتم ها‬
‫‪ ‬برای یک تابع پیچیدگی مفروض )‪ O” O (ƒ (n))، ƒ(n‬بزرگ“‬
‫مجموعه ای از توابع پیچیدگی )‪ g(n‬است که برای آن ها یک‬
‫ثابت حقیقی مثبت ‪ c‬و یک عدد صحیح غیر منفی ‪ N‬وجود‬
‫دارد به قسمی که به ازای همه ی ‪ n <= N‬داریم‪:‬‬
‫)‪g (n) <= c × ƒ (n‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪36‬‬
‫‪ ‬برای یک تابع پیچیدگی مفروض )‪ Ω (ƒ(n)) ، ƒ(n‬مجموعه ای از‬
‫توابع پیچیدگی )‪ g (n‬است که برای آن ها یک عدد ثابت حقیقی‬
‫مثبت ‪ c‬و یک عدد صحیح غیر منفی ‪ N‬وجود دارد به قسمی که به‬
‫ازای همه ی ‪ n <= N‬داریم‪:‬‬
‫)‪g (n) >= c × ƒ (n‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪37‬‬
‫برای یک تابع پیچیدگی مفروض )‪ ،ƒ(n‬داریم‪:‬‬
‫))‪θ (ƒ(n)) = O (ƒ(n)) ∩ Ω (ƒ(n‬‬
‫یعنی ))‪ θ(ƒ(n‬مجموعه ای از توابع پیچیدگی )‪ g (n‬است که برای‬
‫آن ها ثابت های حقیقی مثبت ‪ c‬و ‪ d‬و عدد صحیح غیر منفی ‪N‬‬
‫وجود دارد به قسمی که ‪:‬‬
‫)‪c × ƒ (n) <= g(n) <= d × ƒ(n‬‬
‫‪‬اگر تابع پیچیدگی زمانی الگوریتمی عضو مجموعه ))‪ θ (ƒ(n‬باشد‪،‬‬
‫می گوییم از مرتبه )‪ f(n‬است‪.‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪38‬‬
‫نمایشی از ‪ Ω ،O‬و ‪θ‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪39‬‬
‫مثالی از مجموعه های )‪ Ω(n2) ،O(n2‬و )‪θ(n2‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪40‬‬
‫‪ ‬برای یک تابع پیچیدگی )‪ ƒ(n‬مفروض‪ o” o(ƒ(n)) ،‬کوچک”‬
‫عبارت ازمجموعه کلیه توابع پیچیدگی)‪ g(n‬است که این شرط را‬
‫برآورده می سازند ‪ :‬به ازای هر ثابت حقیقی مثبت ‪، c‬یک عدد‬
‫صحیح غیر منفی ‪ N‬وجود دارد به قسمی که به ازای ‪n <= N‬‬
‫داریم‪:‬‬
‫)‪g (n) <= c × ƒ (n‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪41‬‬
‫ویژگی های مرتبه‬
‫‪ g (n) Є O (ƒ(n)) -1‬اگروفقط اگر))‪.ƒ (n) Є Ω (g(n‬‬
‫‪ g (n) Є θ (ƒ(n)) -2‬اگروفقط اگر))‪.ƒ (n) Є θ (g (n‬‬
‫‪ -3‬اگر ‪ b >1‬و ‪ ،a > 1‬در آن صورت‪:‬‬
‫)‪loga n Є θ (logb n‬‬
‫‪ -4‬اگر ‪،b > a > 0‬در آن صورت‪:‬‬
‫)‪aⁿ Є o (bⁿ‬‬
‫‪42‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪ -5‬به ازای همه ی مقادیر ‪ a > 0‬داریم ‪:‬‬
‫‪ⁿ‬‬
‫)!‪a Є o (n‬‬
‫‪ -6‬اگر‪ g (n) Є O (ƒ(n)) ، d >0 ،c >= 0‬و‬
‫))‪ h(n) Є θ(ƒ(n‬باشد‪ ،‬درآن صورت‪:‬‬
‫))‪c × g(n) + d × h (n) Є θ (ƒ(n‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪43‬‬
‫‪ -7‬ترتیب دسته های پیچیدگی زیر را در نظربگیرید‪:‬‬
‫)!‪θ (lg n) θ (n) θ(n lg n) θ(n²) θ(nj) θ (nk) θ (aⁿ) θ (bⁿ) θ (n‬‬
‫که در آن ‪ k > j > 2‬و ‪ b > a > 1‬است‪ .‬اگر تابع پیچیدگی )‪ g (n‬در دسته‬
‫ای واقع در طرف چپ دسته ی حاوی )‪ ƒ (n‬باشد‪ ،‬در آن صورت‪:‬‬
‫))‪g (n) Є o (ƒ(n‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪44‬‬
‫استفاده از حد برای تعیین مرتبه‬
‫‪ ‬قضیه‬
‫‪c0‬‬
‫)) ‪g ( n )   ( f ( n‬‬
‫)‪g (n)  o( f (n‬‬
‫)) ‪f ( n )  o ( g ( n‬‬
‫‪c‬‬
‫‪g (n) ‬‬
‫‪ 0‬‬
‫‪f (n) ‬‬
‫‪‬‬
‫درس طراحی الگوریتم ها ‪ -‬فصل اول ‪ -‬کارائی‪ ،‬تحلیل و مرتبه الگوریتم ها‪ -‬مدرس‪ :‬بیدکی‬
‫‪lim‬‬
‫‪n ‬‬
‫‪45‬‬