Download presentation
Presentation is loading. Please wait.
1
درس طراحی الگوریتم ها (با شبه کد های c ++)
تعداد واحد: 3 تهیه کننده : جعفر پورامینی منبع : کتاب طراحی الگوریتمها مترجم : جعفر نژاد قمی
2
فصل اول کارایی ، تحلیل و مرتبه الگوریتم ها
فصل اول کارایی ، تحلیل و مرتبه الگوریتم ها
3
این کتاب در باره تکنیک های مربوط به حل مسائل است.
تکنیک ، روش مورد استفاده در حل مسائل است. مسئله ، پرسشی است که به دنبال پاسخ آن هستیم.
4
بکار بردن تکنیک منجر به روشی گام به گام (الگوریتم ) در حل یک مسئله می شود.
منظورازسریع بودن یک الگوریتم، یعنی تحلیل آن از لحاظ زمان و حافظه.
5
الگوریتم: روال قدم به قدم برای حل همه نمونه ها
مثالی از یک مسئله: تعیین کنید که آیا عدد x در لیست s متشکل از n عدد وجود دارد یا خیر؟ پارامترهای این مسئله: مسئله مقادیر خاصی به آنها انتساب می دهد. s, n, x الگوریتم: روال قدم به قدم برای حل همه نمونه ها
6
نوشتن الگوریتم به زبان فارسی دو ایراد دارد:
1- نوشتن الگوریتم های پیچیده به این شیوه دشوار است. 2- مشخص نیست از توصیف فارسی الگوریتم چگونه می توان یک برنامه کامپیوتری ایجاد کرد.
7
الگوریتم 1-1: جست و جوی ترتیبی
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 ; } هدف ارائه الگوریتم واضح، قابل فهم و مستقل از زبان برنامه نویسی است
8
الگوریتم 2-1:محاسبه مجموع عناصر آرایه
number sum (int n , const number s[ ]) { index i; number result; result = 0; for (i = 1; i <= n; i++) result = result + s[i]; return result; }
9
الگوریتم 3-1:مرتب سازی تعویضی
مسئله: n کلید را به ترتیب غیر نزولی مرتب سازی کنید. void exchangesort (int n , keytype S[ ]) { index i,j; for (i = 1 ; i<= n -1; i++) for (j = i +1; j <= n ; j++) if ( S[j] < S[i]) exchange S[i] and S[j]; }
10
الگوریتم 4-1:ضرب ماتریس ها
void matrixmult (int n const number A [ ] [ ], const number B [ ] [ ], number C [ ] [ ], { index i , j, k; for ( i = 1; I <= n ; i++) for (i = 1; j <= n ; j++) C [i] [j] = 0; for (k = 1 ; k <= n ; k++) C [i][j] = C[i] [j] + A [i][k] * B [k][j] } }
11
2- 1اهمیت ساخت الگوریتم های کارآمد
جست و جوی دودویی معمولا بسیار سریع تر ازجست و جوی ترتیبی است. تعداد مقایسه های انجام شده توسط جست و جوی دودویی برابر با lg n + 1 است . اندازه آرایه تعداد مقایسه های انجام شده توسط جستجوی ترتیبی تعداد مقایسه های انجام شده توسط جستجوی دودویی 128 8 1024 11 21 33
12
الگوریتم 1-1: جست و جوی ترتیبی
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 ;
13
الگوریتم 5-1: جست و جوی دودویی
Void binsearch (int n, const keytype S[ ], keytype x, index& location) { index low, high, mid; low = 1 ; high = n; location = 0; while (low <= high && location = = 0) { mid = Į(low + high)/2⌡;
14
if ( x = = S [mid]) location = mid; else if (x < S [mid]) high = mid – 1; else low = mid + 1; }
15
جست وجوی دودویی-تحلیل در داخل حلقه با یک پیاده سازی مناسب یک مقایسه داریم. بیشترین تعداد مقایسه: x از همه کوچک و یا از همه بزرگتر اگر n=32 و x از همه بزرگتر: مقایسه با اندیسهای 16، 24، 28، 30، 31، 32 تعداد کل مقایسه: lg n + 1
16
الگوریتم 6-1: جمله n ام فیبوناچی (بازگشتی)
int fib (int n) { if ( n <= 1) return n; else return fib (n – 1) + fib (n – 2); }
17
الگوریتم 7-1:جمله nام فیبوناچی (تکراری)
int fib2 (int n) { index i; int f [0..n]; f[0] = 0; if (n > 0) { f[1] = 1; for (i = 2 ; I <= n; i++) f[i] = f [i -1] + f [i -2]; } return f[n];
18
جمله n ام فیبوناچی (بازگشتی)-تحلیل
تعداد جملات محاسبه شده برای fib(n) بطور مثال برای محاسبه fib(5) تعداد 15 فراخوانی انجام می شود.(شکل درخت درج شود)
19
جمله n ام فیبوناچی (بازگشتی)-تحلیل
1 2 3 4 5 6 تعداد جملات محاسبه شده 9 15 25 اگر T(n) تعداد جملات در درخت بازگشتی باشد آنگاه T(n) >2 × T(n-2) T(n)> 2 ×2 ×T(n-4) ... T(n)> 2n/2 ×T(0)= 2n/2
20
مقایسه دو الگوریتم فیبوناچی
اندازه آرایه n n+1 2n/2 زمان اجرا الگوریتم 7-1 زمان اجرا الگوریتم 6-1 40 41 41 ns 1048 ms 60 61 1.1×109 61 ns 1 s 80 81 1.1×1012 81 ns 18 min 100 101 1.1×1015 101 ns 13 day 120 121 1.2×1018 121 ns 36 year 160 161 1.2×1024 161 ns 3.8 × 107 year
21
3-1 تحلیل الگوریتم ها برای تعیین میزان کارایی یک الگوریتم را باید تحلیل کرد. 1-3-1 تحلیل پیچیدگی زمانی تحلیل پیچیدگی زمانی یک الگوریتم ، تعیین تعداد دفعاتی است که عمل اصلی به ازای هر مقدار از ورودی انجام می شود. اندازه ی ورودی: اندازه آرایه، تعداد سطرها، تعداد یال و نود و .... بسته به مسئله
22
A(n) را پیچیدگی زمانی در حالت میانگین می گویند.
T(n) را پیچیدگی زمانی الگوریتم در حالت معمول می گویند. W(n) را تحلیل پیچیدگی زمانی در بدترین حالت می نامند. A(n) را پیچیدگی زمانی در حالت میانگین می گویند.
23
T(n) = n عمل اصلی: افزودن یک عنصر از آرایه به sum.
تحلیل پیچیدگی زمانی برای حالت معمول برای الگوریتم(جمع کردن عناصرآرایه) عمل اصلی: افزودن یک عنصر از آرایه به sum. اندازه ورودی: n، تعداد عناصر آرایه. T(n) = n
24
تحلیل پیچیدگی زمانی برای حالت معمول برای الگوریتم(مرتب سازی تعویضی)
عمل اصلی: مقایسه S [j] با S[i] . اندازه ورودی: تعداد عناصری که باید مرتب شوند. T(n) = n(n -1) /2
25
W (n) = n عمل اصلی: مقایسه یک عنصر آرایه با x.
تحلیل پیچیدگی زمانی دربدترین حالت برای الگوریتم(جست و جوی ترتیبی) عمل اصلی: مقایسه یک عنصر آرایه با x. اندازه ورودی: , n تعداد عناصر موجود در آرایه. W (n) = n
26
تحلیل پیچیدگی زمانی در بهترین حالت برای الگوریتم(جست وجوی ترتیبی)
عمل اصلی: مقایسه یک عنصر آرایه با x. اندازه ورودی: , n تعداد عناصر آرایه. B (n) = 1
27
4-1مرتبه الگوریتم الگوریتم ها یی با پیچیدگی زمانی ازقبیل n و100n را الگوریتم های زمانی خطی می گویند. مجموعه کامل توابع پیچیدگی را که با توابع درجه دوم محض قابل دسته بندی باشند، n²) ( θ می گویند.
28
برخی از گروه های پیچیدگی متداول در زیر داده شده است:
مجموعه ای ازتوابع پیچیدگی که با توابع درجه سوم محض قابل دسته بندی باشند، n³) ( θ نامیده می شوند. برخی از گروه های پیچیدگی متداول در زیر داده شده است: θ(lg n) < θ (n) < θ (n lg n) < θ (n²) < θ (n³) < θ (2 ⁿ)
29
واحد زمانی: 1 ns(شکل رشد)
30
2-4-1آشنایی بیشتر با مرتبه الگوریتم ها
برای یک تابع پیچیدگی مفروض ƒ(n) ،O (ƒ (n)) ”O بزرگ“ مجموعه ای از توابع پیچیدگی g (n) است که برای آن ها یک ثابت حقیقی مثبت c و یک عدد صحیح غیر منفی N وجود دارد به قسمی که به ازای همه ی N =< n داریم: g (n) >= c × ƒ (n)
31
برای یک تابع پیچیدگی مفروض ƒ(n) ، (Ω (ƒ(n)مجموعه ای از توابع پیچیدگی g (n) است که برای آن ها یک عدد ثابت حقیقی مثبت c و یک عدد صحیح غیر منفی N وجود دارد به قسمی که به ازای همه ی N =< n داریم: g (n) =< c × ƒ (n)
32
θ (ƒ(n)) = O (ƒ(n)) ∩ Ω (ƒ(n))
یعنی θ(ƒ(n)) مجموعه ای از توابع پیچیدگی g (n) است که برای آن ها ثابت های حقیقی مثبت c وd و عدد صحیح غیر منفی N وجود دارد به قسمی که : c × ƒ (n) <= d × ƒ(n)
33
برای یک تابع پیچیدگی ƒ(n) مفروض،( o(ƒ(n) ”o کوچک” عبارت ازمجموعه کلیه توابع پیچیدگیg (n) است که این شرط را برآورده می سازند : به ازای هرثابت حقیقی مثبت c ،یک عدد صحیح غیر منفی N وجود دارد به قسمی که به ازای همه ی N =< n داریم: g (n) =< c × ƒ (n)
34
نمایشی از Ω، O و θ
35
مثال در شکل زیر نشان می دهد که n2+10n از مرتبه O(n2) می باشد
36
مثال چند عضو از مجموعه های On2 Ωn2 θn2
37
ویژگی های مرتبه 1- O (ƒ(n)) Є g (n) اگروفقط اگر.ƒ (n) Є Ω (g(n)) 2- (ƒ(n)) θ Є g (n) اگروفقط اگرƒ (n) Є θ (g (n)). 3- اگر b >1 و a > 1، در آن صورت: log ⁿa Є θ (log ⁿb) 4- اگر b > a > 0 ،در آن صورت: aⁿ Є o (bⁿ)
38
c × g(n) + d × h (n) Є θ (ƒ(n))
5- به ازای همه ی مقادیر a > 0 داریم : aⁿ Є o (n!) 6- اگرc >= 0، d >0 ، g (n) Є o (ƒ(n)) و h(n) Є θ(ƒ(n)) باشد، درآن صورت: c × g(n) + d × h (n) Є θ (ƒ(n))
39
7- ترتیب دسته های پیچیدگی زیر را در نظربگیرید:
θ (lg n) θ (n) θ(n lg n) θ(n²) θ(n^j) θ (n^k) θ (aⁿ) θ (bⁿ) θ (n!) که در آن k > j > 2 و b > a > 1 است. اگر تابع پیچیدگی g (n) در دسته ای واقع در طرف چپ دسته ی حاوی ƒ (n) باشد، در آن صورت: g (n) Є o (ƒ(n))
40
استفاده از حد برای تعیین مرتبه
41
تمرینات سوال 12، 17، 19، 26، 27، 28، 29، 32
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.