آموزش ساختمان داده ها - بخش اول
TRANSCRIPT
ساختمان داده ها
faradars.org/fvds9402
:مدرسفرشید شیرافکن
دانشگاه تهران دانشجوی دکتری (بیو انفورماتیک: دکتری( )کامپیوتر نرم افزار: کارشناسی و کارشناسی ارشد )
ساختمان داده ها
1
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
سرفصل
(اجراییپیچیدگی)اجراییمرتبه1.
بازگشتیتوابع2.
آرایه3.
پشتهوصف4.
پیوندیلیست5.
درخت6.
گراف7.
سازیمرتب8.
سازیدرهم9.
2
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402منابعکرمن•هورویتز•دکتر قدسی•لیپ شوتز•شیرافکن•
3
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
اندازه nی یک الگوریتم، تابعی است که مدت زمان اجرای استفاده شده توسط الگوریتم را بر حسب تعداد داده های ورودپیچیدگی . می گیرد
پیچیدگی اجرایی
4
namenotation
constantO(1)
linearO(n)
logarithmicO(logn)
quadraticO(n^2)
polynomialO(n^c)
exponentialO(c^n)
factorialO(n!)
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مرتبه اجرایی توابع چند جمله ای
:در صورتی که داشته باشیم
:مثال
5
)()(...)( 21 mmm nOnfcnnnnnf
)(435)( 22 nOnnnf
)()!()2()()lg()()(lg)1( 2 nn nOnOOnOnnOnOnOO
nn lglog2
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
نمادهای پیچیدگی اجرایی
بزرگاویتوابعازایمجموعهبهg(n)،O(g(n))مفروضپیچیدگیتابعبرای:یعنیعبارت:داریمهمهبرایبطوریکهدارند،وجودوcثابتهایآنهابرایکهدارداشاره
بزرگامگاازایمجموعهبه،g(n)مفروضپیچیدگیتابعبرای:یعنیعبارت
:داریمهمهبرایبطوریکهدارند،وجودوcثابتهایآنهابرایکهدارداشارهتوابع
تتاو:یعنیعبارت
6
،
)()( ngOnf
)()( ncgnf 0nn 0n
))(()( ngnf
)()( ncgnf
))(( ng
0n0nn
)()( ngnf )()( ngOnf )()( ngnf
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
: نشان دهید
7
)(10 22 nOnn
1010210 222 nnnnnn
22 10 cnnn
22 210 nnn فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
: نشان دهید
:حل
:یعنی
8
)(2
)1( 2nOnn
22
)1( 2nnn
2
2
)1(cn
nn
2
1,00 cn
022
)1( 2
nnnn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
9
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
: نشان دهید
:حل
: یعنی
10
2
2
1n
nn
22
4
1
22n
nn
2
2
1cn
nn
4
1,20 cn
2422
22
nnnn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
:نشان دهید که :جواب
:بنابراین در مثال های قبل دیدیم که و
11
،
2
2
1n
nn
2
2
1nO
nn
2
2
1n
nn
2
2
1n
nn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
خواص توابع رشد
:بازتابی(1
.تراگذاری(2
:تتابرایمثال
:داردتقارنخاصیتتتا(3
4)Oدارندترانهادهتقارنخاصیت:
12
،
))(()())(()( nfngngnf
))(()())(()(
))(()(nhnf
nhng
ngnf
))(()())(()( nfngngOnf
))(()()),(()()),(()( nfnfnfnfnfOnf
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
ifپیچیدگی دستور
:کنیدتوجهزیرifدستوربهif(cond)
block1
else
block2
:بااستبرابرحالتبدتریندراجرازمان
Max( time(block1) , time(block2) )
13
،
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مرتبه اجرایی حلقه های ساده
(a<=b):زیر را در نظر بگیریدforحلقه
: تکرار تعداد
.این مقدار اعشاری بود، حد باالی آن را در نظر بگیریداگر
.است(sequence of statement)، توالی از دستورها sاز منظور
14
for (i=a ; i<=b ; i=i+k ) s;
k
ab 1
for (i=b ; i>=a ; i=i-k ) s;فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار دستور داخل حلقه را مشخص کنید
: جواب
:تعداد تکرار
o(n): مرتبه اجرایی
15
for ( i=1 ; i<=n ; i=i+1 ) s;
nn
1
11
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار دستور داخل حلقه را مشخص کنید
: جواب
:تعداد تکرار
o(n): مرتبه اجرایی
16
for ( i=3 ; i<=n ; i=i+2 ) s;
122
13
nn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال.تعداد تکرار دستور داخل حلقه را مشخص کنید
: جواب
:تعداد تکرار
o(n): مرتبه اجرایی
17
for ( i=9 ; i<3n+4 ; i=i+5 ) s;
15
3
5
943
nn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مرتبه ثابت
.را مشخص کنیدx=x+1مرتبه اجرایی دستور
: جواب
18
i=n;while(i>1){
i=i % 2;x=x+1;
}
)1(O
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مرتبه لگاریتمی
: حلقه زیر را در نظر بگیرید
: تعداد تکرار
.اگر این مقدار صحیح نبود، حد باالی آن را در نظر بگیرید
19
for ( i=a ; i<=b ; i=i*k ) s;
1loglog a
k
b
k
for ( i=b ; i>=a ; i=i/k ) s;فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
:جواب
20
for ( i=1 ; i<=8 ; i=i*2 ) s;
41loglog 1
2
8
2
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
:جواب
21
for ( i=27 ; i<=n ; i=i*3 ) s;
)(log2log1loglog 33
27
33
nnn O
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
:جواب
22
for ( i=n ; i>=16 ; i=i/4 ) s;
)(log1log1loglog 44
16
44
nnn O
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
: جواب
:می توان نوشت
: بنابراین تعداد تکرار برابر است با
23
for ( i=n ; i>=1; i=i - i/3 )s;
1log1loglog 2/3
1
2/32/3 nn
for ( i=n ; i>=1; i= i / (3/2) )
s;2
33
2 iii
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
حلقه های تودرتو
.تعداد تکرار را مشخص کنید
: حل
n: تعداد تکرار هر حلقه
: sتعداد تکرار دستور
24
for ( i=1 ; i<=n ; i++ )for ( j=1 ; j<=n ; j++)
s;
2n
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
: جواب
25
for ( i=2 ; i<=n ; i=i+4 )for ( j=n ; j>3 ; j=j-2 )
s;
)(2
3
4
12 2nOnn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
: جواب
26
for ( i=1 ; i<=n ; i=i*2 )for ( j=1 ; j<=n ; j++ )
s;
)lg()1(lg nnOnn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
حلقه های پشت سرهم
.تعداد تکرار را مشخص کنید
: جواب
یا
27
for ( i=1 ; i<=n ; i++) {s;
}for ( j=1 ; j<=m ; j++) {
s; }
)( mnO
)),(max( mnO
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
ترکیب حلقه های تودر تو و پشت سرهم
.تعداد تکرار را مشخص کنید
: جواب
28
for ( i=1 ; i<=n ; i++) {for ( j=1 ; j<=n ; j++) {
s;}
}for ( k=1 ; j<=n ; k++) {
s; }
)()),(max( 22 nOnnO
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
وابسته حلقه های تودرتو
.تعداد تکرار را مشخص کنید
: جواب
:مجموع تعداد تکرار
: روش دوم
29
for ( i=1 ; i<=n ; i++ )for ( j=1 ; j<=i ; j++ )
s;
i 1 2 3 … n
تعداد تکرار 1 2 3 000 n
)(2
)1(...321 2nO
nnn
2
)1(1
11 1
nni
n
i
n
i
i
j
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
: جواب
:مجموع تعداد تکرار
30
for ( i=1 ; i<=n ; i=i*2 )for ( j=1 ; j<=i ; j++ )
s;
i 1 2 4 … n
تعداد تکرار 1 2 4 000 n
)(1212212
122...222...421 lg
1lglog210 2 nOnn n
nn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
: جواب
تکرارکلتعدادشود،میتکرارمرتبهnاولحلقهچون.شودمیتکرارمرتبه(2n-1)داخلیحلقهدوکهدیدیمقبلمثالدر:بااستبرابر
31
for ( k=1 ; k<=n ; k++ )for ( i=1 ; i<=n ; i=i*2 )
for ( j=1 ; j<=i ; j++ )s;
)()12( 2nOnn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
: جواب
:مجموع تعداد تکرار
32
for ( i=1 ; i<=n ; i++ )for ( j=1 ; j<=n ; j=j+i )
s;
i 1 2 3 … n
تعداد تکرار n n/2 n/3 000 1
)lg(ln)1
...3
1
2
11(1...
32nnOnn
nn
nnn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
: جواب
:مجموع تعداد تکرار
33
for ( i=1 ; i<=n ; i=i*3 )for ( j=i ; j<=n ; j++ )
s;
i 1 3 9 … n
تعداد تکرار n-1+1 n-3+1 n-9+1 000 n-n+1
)lg(2
13)1)(1(log)...931()1)(1(log 33 nnO
nnnn nn
2
13
13
133...333...931
1loglog210
3
3
n
n
n
n
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعداد تکرار را مشخص کنید
: جواب
:مجموع تعداد تکرار
34
for ( i=1 ; i<=n ; i++ )for ( j=1 ; j<=log(i) ; j++ )
s;
i 1 2 … n
تعداد تکرار log(1) log(2) 000 log(n)
)!log()...21log()log(...)2log()1log( nnn
)lg()!log( nnn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تغییر مقدار نهایی شمارنده
.تعداد تکرار را مشخص کنید
: جواب
:مجموع تعداد تکرار
35
for ( i=1 ; i<=n ; i++ )for ( j=1 ; j<=n ; j++)
{ s;n=n-1; }
i 1 2 3 …
تعداد تکرار n/2 n/4 n/8 000
)(2/11
2/1...)
8
1
4
1
2
1(...
842nOnnn
nnn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
پیچیدگی در حالت فراخوانی تابع
.باشد، پیچیدگی را مشخص کنیدO(k)برابر f(k)با فرض اینکه پیچیدگی زمانی تابع : مثال
: جواب
: مثال
:جواب
36
for ( i=1 ; i<=n ; i++ )f(n);
)( 2nOnn
for ( i=1 ; i<=n ; i++ )f(i);
)(2
)1(...21)(...)2()1( 2nO
nnnnfff
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مسئله خرس قطبی
یکیروزهراو.استکردهذخیرهغاریدررا(nتا،1،2هایاندازهبهدقیقا)گوشتقطعهnقطبیخرس،سردزمستانیکدربود،وجزاگر.خوردمیکامالراآنبود،فردیعددگوشتیاندازهاگر.کندمیانتخابتصادفیصورتبهراهاگوشتقطعهایناز
سخرنباشد،موجودگوشتیاگر.دهدمیقرارغاردرمجددارادیگرنصفوخوردمیراآننصفیککند،مینصفدقیقاراآنبود؟خواهدچگونهعمرخرسازباقیماندهروزهایبزرگ،خیلیهایnبرایالگوریتم،اینبا.میردمی:حل
برای.شودمیتمامهاگوشتروز7ازبعدبخوردکهترتیبیهربا.باشندمی4و3و2و1برابرگوشتهایقطعه،n=4فرضباn=82مسئلهاینجواب.است15جوابn-1است.
:دومروش
37
)(2
2
11
1...)
4
1
2
11(...
42nOnnn
nnn
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تابع
(رکوچکتیا)یکبرابرحاصلشود،گرفتهلگاریتمnازاگرکهدفعاتیتعدادبااستبرابرتابعاینخروجی.استکندبسیارتابعاینرشدبنابراین.شدخواهد
38
،
n*lg
24lg* 124
465536lg
316lg
*
*
12416
1241665536
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
امگای کوچک وتعریف نماد اوی کوچک
f(n)= oعبارت (g(n)) برقرار است در صورتی که:
:برقرار است در صورتی که f(n)= (g(n))عبارت
: رابطه برقرار است: مثال
39
،
02
1lim
2/lim
3
2
nn
n
nn
)(2
32
non
0)(
)(lim
ng
nf
n
)(
)(lim
ng
nf
n
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تمرین
.تعداد تکرار و مرتبه اجرایی را در هر یک از حلقه های زیر مشخص کنید
40
for ( i=1 ; i<=n; i++ )for ( j=i ; j<=n ; j=j*3 )
s;
for ( i=1 ; i<=n ; i++ )for ( j=1 ; j<=i ; j++)for ( k=1; k<=j ; k++)
s;
for ( i=1 ; i<n/2 ; i++ )for( j=n/2 ; j<n ; j++)
for( k=0 ; k<i+j ; k++)s;
for ( t=1 ; t<=n-1 ; t++ ) {for( i=1 ; i<n-t ; i++) {
j=i+t;for( k=i ; k<=j-1 ; k++)
s;} }
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تمرین
: نشان دهید که
.کندمیحلزمانواحدیکدرمرتبهازالگوریتمیبارا8اندازهبهمسئلهیککامپیوتری:تمرینکرد؟خواهدحلزمانواحدیکدررامسئلههمانازایاندازهچهشود،برابر64کامپیوترسرعتاگر
41
،
)2( nn ne
)(lg2 2lg2n
n)1(lg
1
nn ))(lg(lglg ** nn
)()(lg* nOnn
nn 2log lg4
)(4 2lg nn )2(3 32 nn
O
)2( no
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
42
این اسالید ها بر مبنای نکات مطرح شده در فرادرس« مجموعه فرادرس های ساختمان داده ها»
.تهیه شده است
.نماییدلینک زیر مراجعه برای کسب اطالعات بیشتر در مورد این آموزش به
faradars.org/fvds9402
فرادرس
FaraDars.org