مشاهده - سید محمد بیدکی
Download
Report
Transcript مشاهده - سید محمد بیدکی
درس طراحی الگوریتم ها
محاسبه هزینه الگوریتم ها
مدرس :سید محمد بیدکی
زمستان 1391
تحلیل کارایی
پیچیدگی مکانی space complexity
مقدار فضایی از حافظه که برنامه برای اجرا نیاز خواهد داشت.
پیچیدگی زمانی time complexity
زمانی که طول می کشد برنامه اجرا شود و خروجی را تولید کند.
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
2
پیچیدگی مکانی
انواع متغیرها
متغیرهای اولیه )… (int, float, char,
متغیرهای غیر اولیه (ترکیبی از متغیرهای اولیه هستند :آرایه ،ساختار و )...
معیار فضا :هر متغیر اولیه یک واحد مکانی را اشغال می کند.
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
3
مثال
محاسبه پیچیدگی مکانی الگوریتم زیر
نام
نوع
فضا
a
غیر اولیه
n
n
اولیه
1
s
اولیه
1
i
اولیه
1
جمع
n+3
{ )sum_element(a[], n
s=0
for i=1 to n
]s = s + a[i
return s
}
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
1
2
3
4
5
6
4
پیچیدگی زمانی ][1
الگوریتم های غیربازگشتی و متوالی
معیار زمان :هر دستورالعمل اجرایی یک واحد زمانی طول می کشد.
مثال:
a=4
b=a+3
)c = sin(b) * 3.14 / cos (a*2
{ )Sum ( a , b
1
c=a+b
1
return c
Tn = 2
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
}
5
الگوریتم های غیر بازگشتی
هزینه حلقه ها
باید تعداد دفعات تکرار دستورات حلقه را محاسبه کرد.
1
s=0
i=1
]s= s + a[1
nمرتبه
i=2
]s = s + a[2
…
i=n
]s = s + a[n
1
i = n+1
1
return s
tn = 2n + 3
{ )sum_element(a[], n
1
s=0
2
for i=1 to n
3
4
]s = s + a[i
5
return s
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
}
6
6
هزینه حلقه for
محاسبه هزینه حلقه forکه اندازه گام آن 1می باشد.
{ for i=1 to n
statement1
…
statementn
}
1
n
) (1 n
i 1
مرحله آخر حلقه
دستورات بدنه
شمارنده حلقه
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
7
for هزینه حلقه
loop
b–a+1
for i=a to b
for i=1 to n step p
for (i=1; i <= n; i *= 2)
8
#iteration
(n – 1) / p + 1
k
n 2 p p lg n
k p 1 k lg n 1
بیدکی: مدرس- محاسبه هزینه الگوریتم ها- پیوست دوم- درس طراحی الگوریتم ها
تمرین در کالس
محاسبه پیچیدگی مکانی و زمانی الگوریتم جمع دو
ماتریس m*n
? = Sp
? = Tn
{ )1 add_matrix(a[][ ], b[][ ], c[][ ], m, n
2
for i=1 to m
for j=1 to n
]c[i, j] = a[i,j] + b[i,j
3
4
} 5
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
9
پیچیدگی زمانی ][2
الگوریتم های بازگشتی
تعیین رابطه بازگشتی و شرط پایان
رابطه بازگشتی :یک تساوی یا نامساوی است که یک تابع را بر حسب مقدار آن روی
ورودیهای کوچکتر توصیف می کند.
پیچیدگی زمانی :از روی متن تابع بدست می آید .رابطه بازگشتی باید بسط
داده شود تا به فرم غیر بازگشتی درآید.
روش استقراء
روش جایگزینی
روش استفاده از معادله مشخصه
روش تغییر متغیر
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
10
مثال
محاسبه جمله nام دنباله فیبوناچی
n2
محاسبه فاکتوریل عدد n
a0 a1 1
an an 1 an 2
{ )1 fib (n
2
)if (n == 0 or n == 1
3
return 1
)return fib (n-1) + fib(n-2
4
n0
n0
!)n * (n 1
n!
1
{ )1 fact (n
2
)if (n == 0
return 1
)return n * fact(n-1
} 5
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
3
4
} 5
11
روش استقراء
ایجاد یک حدس اولیه برای تابع بازگشتی
هدف :اثبات درستی حدس با استفاده از استقراء
استقراء سه مرحله دارد:
مبنای استقراء :حدس برای شرط اولیه برقرار است
فرض استقراء :فرض می شود که حدس به ازای nصحیح است.
گام استقراء :باید اثبات شود که حدس برای جمله n+1ام نیز برقرار می
باشد.
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
12
مثال استقراء ][1
n 1
1
T ( n) n
p
T
(
)
1
n
1
,
n
2
2
چند جمله را محاسبه می کنیم:
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
مبنای استقراء:
برای :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(n) = T(n/2) + 1 then
حدس می زنیم که:
T(n) = lg n +1
حال باید حدس خود را اثبات کنیم :استقراء
T(2n) = T(n) + 1
T(2n) = lg n + 1 + 1 =lg n + lg 2
+ 1 = lg (n*2) + 1 = lg 2n + 1
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
13
مثال استقراء ][2
n0
1
T ( n)
n * T (n 1) n 0
حدس خود را با استقراء ثابت می کنیم:
مبنای استقراء:
برای :n=0
فرض استقراء:
برای مقادیری از 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(0) = 0! = 1
!T(n) = n
!)T(n+1) = (n+1
T(n) = n* T(n-1) then
T(n+1) = (n+1) * T(n)
حدس می زنیم که:
!T(n) = n
! )T(n+1) = (n + 1)* n! = (n+1
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
14
روش جایگزینی
T(n) = T(n-1) + 5
= T(n-2) + 5 + 5
n 1
n 1
2
T ( n)
T (n 1) 5
= T(n-3) + 5 + 5 + 5
=T(n-4) + 5 + 5 + 5 + 5
T(n) = T(n-1) + 5
…
T(n-1) = T(n-2) + 5
=T(n-k) + 5k
باید به )T(1برسیم بنابراین:
T(n-2) = T(n-3) +5
T (n k ) T (1)
n k 1 k n 1
…
T(n-k) = T(n-k-1)+5
با جایگذاری مقدار kداریم:
T (n) T (n k ) 5k
…
T(1) = 2
T (n) T (1) 5(n 1) 2 5n 5 5n 3
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
15
تمرین در کالس
پیچیدگی تابع زیر را بدست آورید:
n 1
n 1
3
T ( n)
)4T (n 1
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
16
روش استفاده از معادله مشخصه
این روش برای دسته بزرگی از رابطه های بازگشتی خطی ،قابل
استفاده است.
خطی بودن یعنی اینکه در معادله بازگشتی ،هر جمله tiبا توان اول خود
ظاهر شود مثالً جمالتی مثل t2iیا tn-itn-jیا ) tc(n-iکه در آن cیک مقدار
ثابت و غیر صفر است (مثل tn/2و ) ،)t3(n-4مشاهده نمی شود.
حل رابطه های بازگشتی خطی در دو دسته کلی بیان می شود:
.1بازگشتی خطی همگن
.2بازگشتی خطی ناهمگن
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
17
-1حل بازگشتی های خطی همگن
تعریف :بازگشتی زیر را درنظر بگیرید که در آن kو aiها ثابتند:
a0tn+a1tn-1+…+aktn-k = 0
این بازگشتی ،معادله خطی همگن با ضرایب ثابت از مرتبه kاُم نام
دارد.
یک بازگشتی خطی همگن از مرتبه kاُم ،نیازمند kشرط اولیه می
باشد.
دنباله فیبوناچی
tn = tn-1 + tn-2
t0 = 0
t1 = 1
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
18
-1حل بازگشتی های خطی همگن ...
معادله مشخصه مربوط به معادله بازگشتی
a0tn+a1tn-1+…+aktn-k = 0
اگر قرار دهیم ،tn= prnبه صورت زیر خواهد بود:
a0rk+a1rk-1+…+akr0 = 0
اگر بتوانیم kتا ریشه برای معادله مشخصه فوق پیدا کنیم ،جوابی به
فرم زیر:
an = c1r1n+c2r2n+…+ckrkn
در معادله بازگشتی صدق خواهد کرد و ضرایب ckاز شرایط اولیه
محاسبه می شوند.
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
19
مثال (دنباله فیبوناچی)
tn = tn-1 + tn-2
t0 = 0
t1 = 1
: r2 - r – 1 = 0 => r1 = (1+√5)/2 , r2 =(1-√5)/2معادله مشخصه
n
n
1 1 5
1 1 5
t n 5 2 5 2
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
20
-1حل بازگشتی های خطی همگن ...
قضیه :فرض کنید rیک ریشه -mگانه معادله مشخصه یک بازگشتی
خطی همگن باشد ،قسمتی از جواب بازگشتی که مربوط به این ریشه
می باشد به صورت زیر در حل بازگشتی اعمال می شود:
(c0+c1n+c2n2+…+cm-1nm-1)rn
در معادله بازگشتی صدق خواهد کرد و ضرایب ckاز شرایط اولیه
محاسبه می شوند.
مثال
an = 6an-1 – 9an-2
a0 = 0
a1 = 1
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
21
-2حل بازگشتی های خطی ناهمگن
تعریف :بازگشتی زیر را درنظر بگیرید که در آن kو aiها ثابت و
) f(nتابعی غیر صفر می باشد:
)a0tn+a1tn-1+…+aktn-k = f(n
این بازگشتی ،معادله خطی ناهمگن با ضرایب ثابت از مرتبه kاُم نام
دارد.
حل بازگشتی های خطی ناهمگن را در حالتی خاص که ) f(nیک
چندجمله ای باشد در ادامه شرح می دهیم.
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
22
-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
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
23
مثال
for n>1
)tn – 3tn-1 = 4n(2n+1
t0 = 0 , t1 = 12
: (r-3)(r-4)1+1 = 0معادله مشخصه
: tn = c13n + c24n + c3n4nحل بازگشتی
=> tn = 20(3n) - 20(4n) + 8n4n
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
24
روش تغییر متغیر
با تغییر متغیر می توان رابطه بازگشتی را به یک رابطه ساده تر برای حل تبدیل
کرد.
T ( n) T ( n ) 1
با روش جایگذاری حل می شود:
S(1) = c → S(m) = c + lg m
n = 2m
T(2m) = T(2m/2) + 1
در نهایت داریم:
m = lg n → T(n) = c + lg lg n
)T(2m) = S(m
S(m) = S(m/2) + 1
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
25
تمرین در خانه
.1پیچیدگی توابع زیر را به روشهای خواسته شده ،بدست آورید:
روش جایگزینی
استقرا با حدس اولیه:
)tn= n/(n+1
روش معادله مشخصه
روش تغییر متغیر
T (1) 1
n 1
1
a ) T ( n)
T (n 1) n n 1
1
n 1
2
b) T ( n)
T (n 1) 1
n 1
)n(n 1
n
2
5 - 6
- 5n 7
t n1 t n 2 n
c) T (n) 0
n0
1
n 1
d ) T ( n) 2T ( n ) lg n
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
26
تمرین در خانه
.2تحلیل کنید که برای جمع دو ماتریس m*nروش ستونی بهتر است یا سطری؟
راهنمایی :ابتدا الگوریتم هر دو روش را بنویسید و سپس با محاسبه هزینه ،آنها را تحلیل
کنید.
.3هزینه زمانی و مکانی الگوریتم ضرب ماتریس ها را بدست آورید.
A m*p * Bp*n
درس طراحی الگوریتم ها -پیوست دوم -محاسبه هزینه الگوریتم ها -مدرس :بیدکی
27