581 likes | 1.31k Views
درس طراحی الگوریتم ها. محاسبه هزینه الگوریتم ها. مدرس: سید محمد بیدکی. زمستان 1391. تحلیل کارایی. پیچیدگی مکانی space complexity مقدار فضایی از حافظه که برنامه برای اجرا نیاز خواهد داشت. پیچیدگی زمانی time complexity زمانی که طول می کشد برنامه اجرا شود و خروجی را تولید کند.
E N D
درس طراحی الگوریتم ها محاسبه هزینه الگوریتم ها مدرس: سید محمد بیدکی زمستان 1391
تحلیل کارایی • پیچیدگی مکانی space complexity • مقدار فضایی از حافظه که برنامه برای اجرا نیاز خواهد داشت. • پیچیدگی زمانی time complexity • زمانی که طول می کشد برنامه اجرا شود و خروجی را تولید کند. درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
پیچیدگی مکانی • انواع متغیرها • متغیرهای اولیه (int, float, char, …) • متغیرهای غیر اولیه (ترکیبی از متغیرهای اولیه هستند: آرایه، ساختار و ...) • معیار فضا: هر متغیر اولیه یک واحد مکانی را اشغال می کند. درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
مثال محاسبه پیچیدگی مکانی الگوریتم زیر درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
پیچیدگی زمانی [1] مثال: a = 4 b = a + 3 c = sin(b) * 3.14 / cos (a*2) Sum ( a , b) { c = a + b return c } 1 1 • الگوریتم های غیربازگشتیو متوالی • معیار زمان: هر دستورالعمل اجرایی یک واحد زمانی طول می کشد. درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
الگوریتم های غیر بازگشتی 1 n مرتبه 1 1 • هزینه حلقه ها • باید تعداد دفعات تکرار دستورات حلقه را محاسبه کرد. درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
هزینه حلقه for • محاسبه هزینه حلقه for که اندازه گام آن 1 می باشد. for i=1 to n { statement1 … statementn } شمارنده حلقه دستورات بدنه مرحله آخر حلقه درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
هزینه حلقه for درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
تمرین در کلاس Sp = ? Tn = ? محاسبه پیچیدگی مکانی و زمانی الگوریتم جمع دو ماتریس m*n درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
پیچیدگی زمانی [2] • الگوریتم های بازگشتی • تعیین رابطه بازگشتی و شرط پایان • رابطه بازگشتی: یک تساوی یا نامساوی است که یک تابع را بر حسب مقدار آن روی ورودیهای کوچکتر توصیف می کند. • پیچیدگی زمانی: از روی متن تابع بدست می آید. رابطه بازگشتی باید بسط داده شود تا به فرم غیر بازگشتی درآید. • روش استقراء • روش جایگزینی • روش استفاده از معادله مشخصه • روش تغییر متغیر درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
مثال محاسبه فاکتوریل عدد n محاسبه جمله nام دنباله فیبوناچی درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
روش استقراء • ایجاد یک حدس اولیه برای تابع بازگشتی • هدف: اثبات درستی حدس با استفاده از استقراء • استقراء سه مرحله دارد: • مبنای استقراء: حدس برای شرط اولیه برقرار است • فرض استقراء: فرض می شود که حدس به ازای n صحیح است. • گام استقراء: باید اثبات شود که حدس برای جمله n+1 ام نیز برقرار می باشد. درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
مثال استقراء [1] برای n=1: T(1) = lg 1 + 1 = 1 برای مقادیری از n داریم: T(n) = lg n +1 • چند جمله را محاسبه می کنیم: چون استقرا برای توانهای دو است: 2p+1 =2n then Tn+1 = T2n باید نشان دهیم: T(2n) = lg (2n) + 1 T(1) = 1 T(2) = T(1) + 1 = 1+1 = 2 T(4) = T(2) + 1 = 2+1 = 3 T(8) = T(4) + 1 = 3+1 = 4 T(16) = T(8) + 1 = 4+1 = 5 T(n) = T(n/2) + 1 then T(2n) = T(n) + 1 T(2n) = lg n + 1 + 1 =lg n + lg 2 + 1 = lg (n*2) + 1 = lg 2n + 1 T(n) = lg n +1حدس می زنیم که: • حال باید حدس خود را اثبات کنیم: استقراء درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
مثال استقراء [2] حدس خود را با استقراء ثابت می کنیم: برای n=0: T(0) = 0! = 1 • چند جمله را محاسبه می کنیم: برای مقادیری از n داریم: T(n) = n! T(0) = 1 T(1) = 1*T(0) = 1*1 = 1 T(2) = 2*T(1) = 2*1 = 2 T(3) = 3*T(2) = 3*2 = 6 T(4) = 4*T(3) = 4*6 = 24 T(k) = K*T(k-1) = k! باید نشان دهیم: T(n+1) = (n+1)! T(n) = n* T(n-1) then T(n+1) = (n+1) * T(n) T(n+1) = (n + 1)* n! = (n+1) ! T(n) = n!حدس می زنیم که: درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
روش جایگزینی T(n) = T(n-1) + 5 = T(n-2) + 5 + 5 = T(n-3) + 5 + 5 + 5 =T(n-4) + 5 + 5 + 5 + 5 … =T(n-k) + 5k باید به T(1) برسیم بنابراین: T(n) = T(n-1) + 5 T(n-1) = T(n-2) + 5 T(n-2) = T(n-3) +5 … T(n-k) = T(n-k-1)+5 … T(1) = 2 با جایگذاری مقدارk داریم: درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
تمرین در کلاس پیچیدگی تابع زیر را بدست آورید: درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
روش استفاده از معادله مشخصه • این روش برای دسته بزرگی از رابطه های بازگشتی خطی، قابل استفاده است. • خطی بودن یعنی اینکه در معادله بازگشتی، هر جمله ti با توان اول خود ظاهر شود مثلاً جملاتی مثل t2iیا tn-itn-j یا tc(n-i) که در آن c یک مقدار ثابت و غیر صفر است (مثل tn/2 و t3(n-4))، مشاهده نمی شود. • حل رابطه های بازگشتی خطی در دو دسته کلی بیان می شود: • بازگشتی خطی همگن • بازگشتی خطی ناهمگن درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
1- حل بازگشتی های خطی همگن دنباله فیبوناچی • تعریف: بازگشتی زیر را درنظر بگیرید که در آن k و aiها ثابتند: a0tn+a1tn-1+…+aktn-k = 0 این بازگشتی، معادله خطی همگن با ضرایب ثابت از مرتبه kاُم نام دارد. • یک بازگشتی خطی همگن از مرتبه kاُم، نیازمند k شرط اولیه می باشد. tn = tn-1 + tn-2 t0 = 0 t1= 1 درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
1- حل بازگشتی های خطی همگن ... معادله مشخصه مربوط به معادله بازگشتی a0tn+a1tn-1+…+aktn-k = 0 اگر قرار دهیم tn= prn، به صورت زیر خواهد بود: a0rk+a1rk-1+…+akr0 = 0 اگر بتوانیم k تا ریشه برای معادله مشخصه فوق پیدا کنیم، جوابی به فرم زیر: an = c1r1n+c2r2n+…+ckrkn در معادله بازگشتی صدق خواهد کرد و ضرایب ck از شرایط اولیه محاسبه می شوند. درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
مثال (دنباله فیبوناچی) tn = tn-1 + tn-2 t0 = 0 t1= 1 معادله مشخصه: r2 - r – 1 = 0 => r1 = (1+√5)/2 , r2 =(1-√5)/2 درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
1- حل بازگشتی های خطی همگن ... قضیه: فرض کنید r یک ریشه m-گانه معادله مشخصه یک بازگشتی خطی همگن باشد، قسمتی از جواب بازگشتی که مربوط به این ریشه می باشد به صورت زیر در حل بازگشتی اعمال می شود: (c0+c1n+c2n2+…+cm-1nm-1)rn در معادله بازگشتی صدق خواهد کرد و ضرایب ck از شرایط اولیه محاسبه می شوند. مثال an = 6an-1 – 9an-2 a0 = 0 a1 = 1 درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
2- حل بازگشتی های خطی ناهمگن تعریف: بازگشتی زیر را درنظر بگیرید که در آن k و aiها ثابت و f(n) تابعی غیر صفر می باشد: a0tn+a1tn-1+…+aktn-k = f(n) این بازگشتی، معادله خطی ناهمگن با ضرایب ثابت از مرتبه kاُم نام دارد. حل بازگشتی های خطی ناهمگن را در حالتی خاص که f(n) یک چندجمله ای باشد در ادامه شرح می دهیم. درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
2- حل بازگشتی های خطی ناهمگن ... حل بازگشتی: • قضیه: بازگشتی ناهمگن زیر را درنظر بگیرید: a0tn+a1tn-1+…+aktn-k = bnp(n) این شکل از بازگشتی، می تواند به بازگشتی همگنی تبدیل شود که معادله مشخصه آن به صورت زیر است: (a0rk+a1rk-1+…+akr0 )(r – b)d+1 = 0 که d برابر با درجه p(n) است. • اگر بیش از یک جمله مانند bnp(n) در سمت راست وجود داشته باشد، هر یک از آنها در معادله مشخصه ظاهر می شود. an = anh + anp درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
مثال tn – 3tn-1 = 4n(2n+1) for n>1 t0 = 0 , t1 = 12 معادله مشخصه: (r-3)(r-4)1+1 = 0 حل بازگشتی: tn = c13n + c24n + c3n4n => tn = 20(3n) - 20(4n) + 8n4n درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
روش تغییر متغیر n = 2m T(2m) = T(2m/2) + 1 T(2m) = S(m) S(m) = S(m/2) + 1 با روش جایگذاری حل می شود: S(1) = c → S(m) = c + lg m در نهایت داریم: m = lg n → T(n) = c + lglg n با تغییر متغیر می توان رابطه بازگشتی را به یک رابطه ساده تر برای حل تبدیل کرد. درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
تمرین در خانه 1. پیچیدگی توابع زیر را به روشهای خواسته شده، بدست آورید: روش جایگزینی استقرا با حدس اولیه:tn= n/(n+1) روش معادله مشخصه روش تغییر متغیر درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی
تمرین در خانه 2. تحلیل کنید که برای جمع دو ماتریس m*n روش ستونی بهتر است یا سطری؟ راهنمایی: ابتدا الگوریتم هر دو روش را بنویسید و سپس با محاسبه هزینه، آنها را تحلیل کنید. 3. هزینه زمانی و مکانی الگوریتم ضرب ماتریس ها را بدست آورید. A m*p* Bp*n درس طراحی الگوریتم ها - پیوست دوم - محاسبه هزینه الگوریتم ها- مدرس: بیدکی