1 / 249

درس طراحی الگوریتم ها (با شبه کد های c ++ )

درس طراحی الگوریتم ها (با شبه کد های c ++ ). تعداد واحد: 3 تهیه کننده : جعفر پورامینی منبع : کتاب طراحی الگوریتمها مترجم : جعفر نژاد قمی . فصل اول: کارایی ، تحلیل و مرتبه الگوریتم ها. این کتاب در باره تکنیک های مربوط به حل مسائل است. تکنیک ، روش مورد استفاده در حل مسائل است.

mada
Download Presentation

درس طراحی الگوریتم ها (با شبه کد های c ++ )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. درس طراحی الگوریتم ها(با شبه کد های c ++) تعداد واحد: 3 تهیه کننده : جعفر پورامینی منبع : کتاب طراحی الگوریتمها مترجم : جعفر نژاد قمی

  2. فصل اول: کارایی ، تحلیل و مرتبه الگوریتم ها

  3. این کتاب در باره تکنیک های مربوط به حل مسائل است. • تکنیک ، روش مورد استفاده در حل مسائل است. • مسئله ، پرسشی است که به دنبال پاسخ آن هستیم.

  4. بکار بردن تکنیک منجر به روشی گام به گام (الگوریتم ) در حل یک مسئله می شود. • منظورازسریع بودن یک الگوریتم، یعنی تحلیل آن از لحاظ زمان و حافظه.

  5. نوشتن الگوریتم به زبان فارسی دو ایراد دارد: 1- نوشتن الگوریتم های پیچیده به این شیوه دشوار است. 2- مشخص نیست از توصیف فارسی الگوریتم چگونه می توان یک برنامه کامپیوتری ایجاد کرد.

  6. الگوریتم 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 ;

  7. الگوریتم 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; }

  8. الگوریتم 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]; }

  9. الگوریتم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;

  10. for (k = 1 ; k <= n ; k++) C [i][j] = C[i] [j] + A [i][k] * B [k][j] }}

  11. 2- 1اهمیت ساخت الگوریتم های کارآمد • جست و جوی دودویی معمولا بسیار سریع تر ازجست و جوی ترتیبی است. • تعداد مقایسه های انجام شده توسط جست و جوی دودویی برابر با lg n + 1 است .

  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. الگوریتم 6-1: جمله n ام فیبوناچی (بازگشتی) مسئله : جمله n ام از دنباله فیبوناچی را تعیین کنید. int fib (int n) { if ( n <= 1) return n; else return fib (n – 1) + fib (n – 2); }

  16. الگوریتم 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]; }

  17. 3-1 تحلیل الگوریتم ها • برای تعیین میزان کارایی یک الگوریتم را باید تحلیل کرد. 1-3-1 تحلیل پیچیدگی زمانی • تحلیل پیچیدگی زمانی یک الگوریتم ، تعیین تعداد دفعاتی است که عمل اصلی به ازای هر مقدار از ورودی انجام می شود.

  18. T(n) را پیچیدگی زمانی الگوریتم در حالت معمول می گویند. • W(n) را تحلیل پیچیدگی زمانی در بدترین حالت می نامند. • A(n) را پیچیدگی زمانی در حالت میانگین می گویند.

  19. تحلیل پیچیدگی زمانی برای حالت معمول برای الگوریتم(جمع کردن عناصرآرایه) عمل اصلی:افزودن یک عنصر از آرایه به sum. اندازه ورودی:n، تعداد عناصر آرایه. T(n) = n

  20. تحلیل پیچیدگی زمانی برای حالت معمول برای الگوریتم(مرتب سازی تعویضی) عمل اصلی:مقایسه S [j] با S[i] . اندازه ورودی:تعداد عناصری که باید مرتب شوند. T(n) = n(n -1) /2

  21. تحلیل پیچیدگی زمانی دربدترین حالت برای الگوریتم(جست و جوی ترتیبی) عمل اصلی:مقایسه یک عنصر آرایه با x. اندازه ورودی:, n تعداد عناصر موجود در آرایه. W (n) = n

  22. تحلیل پیچیدگی زمانی در بهترین حالت برای الگوریتم(جست وجوی ترتیبی) عمل اصلی:مقایسه یک عنصر آرایه با x. اندازه ورودی:, n تعداد عناصر آرایه. B (n) = 1

  23. 4-1مرتبه الگوریتم • الگوریتم ها یی با پیچیدگی زمانی ازقبیل n و100n را الگوریتم های زمانی خطی می گویند. • مجموعه کامل توابع پیچیدگی را که با توابع درجه دوم محض قابل دسته بندی باشند، n²)(θمی گویند.

  24. مجموعه ای ازتوابع پیچیدگی که با توابع درجه سوم محض قابل دسته بندی باشند، n³)(θنامیده می شوند. • برخی از گروه های پیچیدگی متداول در زیر داده شده است: θ(lg n)< θ (n) < θ (n lg n) < θ (n²) < θ (n³) <θ (2 ⁿ)

  25. 2-4-1آشنایی بیشتر بامرتبه الگوریتم ها • برای یک تابع پیچیدگی مفروض ƒ(n) ،O (ƒ (n)”O بزرگ“ مجموعه ای از توابع پیچیدگی g (n) است که برای آن ها یک ثابت حقیقی مثبت c و یک عدد صحیح غیر منفی N وجود دارد به قسمی که به ازای همه ی N =< n داریم: g (n) >= c × ƒ (n)

  26. برای یک تابع پیچیدگی مفروض ƒ(n) ، (Ω (ƒ(n)مجموعه ای از توابع پیچیدگی g (n) است که برای آن ها یک عدد ثابت حقیقی مثبت c و یک عدد صحیح غیر منفی N وجود دارد به قسمی که به ازای همه ی N =< n داریم: g (n) =< c × ƒ (n)

  27. برای یک تابع پیچیدگی مفروض ƒ(n)، داریم: θ (ƒ(n)) = O (ƒ(n)) ∩Ω (ƒ(n)) یعنی θ(ƒ(n)) مجموعه ای از توابع پیچیدگی g (n) است که برای آن ها ثابت های حقیقی مثبت c وd و عدد صحیح غیر منفی N وجود دارد به قسمی که : c × ƒ (n) <= d × ƒ(n)

  28. برای یک تابع پیچیدگی ƒ(n) مفروض،( o(ƒ(n) ”o کوچک” عبارت ازمجموعه کلیه توابع پیچیدگیg (n) است که این شرط را برآورده می سازند : به ازای هرثابت حقیقی مثبت c ،یک عدد صحیح غیر منفی N وجود دارد به قسمی که به ازای همه ی N =< n داریم: g (n) =< c × ƒ (n)

  29. ویژگی های مرتبه 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ⁿ)

  30. 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))

  31. 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))

  32. فصل دوم: روش تقسیم و حل

  33. روش تقسیم و حل یک روش بالا به پایین است. • حل یک نمونه سطح بالای مسئله با رفتن به جزء و بدست آوردن حل نمونه های کوچکتر حاصل می شود.

  34. هنگام پی ریزی یک الگوریتم بازگشتی ، باید: 1- راهی برای به دست آوردن حل یک نمونه از روی حل یک نمونه ازروی حل یک یا چند نمونه کوچک تر طراحی کنیم. 2- شرط(شرایط ) نهایی نزدیک شدن به نمونه(های) کوچک تر را تعیین کنیم. 3- حل را در حالت شرط (شرایط)نهایی تعیین کنیم.

  35. الگوریتم1-2:جست و جوی دودویی (بازگشتی) index location ( index low, index high ) { index mid; if (low > high ) return 0; else { mid = Į (low + high) /2⌡; if (x = = S [mid]) return mid;

  36. else if ( x < S [mid]) return location (low , mid – 1); else return location (mid + 1, high); } }

  37. تحلیل پیچیدگی زمانی دربدترین حالت برای الگوریتم جست و جوی دودویی بازگشتی عمل اصلی: مقایسه x با S [mid]. اندازه ورودی: n ، تعداد عناصر آرایه. W (n) = W (n / 2) + 1 برای n >1 ، n توانی از 2 است W (n) = W (n / 2) + 1 W (1) = 1 W (n) = Į lg n ⌡+ 1 Єθ (lg n)

  38. 2-2مرتب سازی ادغامی • ادغام یک فرآیند مرتبط با مرتب سازی است. • ادغام دوطرفه به معنای ترکیب دو آرایه مرتب شده در یک آرایه ی مرتب است.

  39. مرتب سازی ادغامی شامل مراحل زیر می شود: 1- تقسیم آرایه به دو زیر آرایه، هر یک با n/2 عنصر. 2- حل هر زیر آرایه با مرتب سازی آن. 3- ترکیب حل های زیر آرایه ها از طریق ادغام آن ها در یک آرایه مرتب.

  40. الگوریتم2-2: مرتب سازی ادغامی void mergsort (int n , keytype S [ ]) { const int h = Į n/2 ⌡ , m = n – h; keytype U [1...h],V [1..m]; if (n >1) { copy S[1] through S[h] to U[h]; copy S [h + 1] through S[h] to V[1] through V[m]; mergesort(h, U); mergesort(m,V); merge (h , m , U,V,S); } }

  41. الگوریتم3-2:ادغام void merg ( int h , int m, const keytype U[ ], const keytype V[ ], keytype S[ ] ) { index i , j , k; i = 1; j = 1 ; k = 1; while (i <= h && j <= m) { if (U [i] < V [j]) { S [k] = U [i] i+ + ;

  42. } else { S [k] = V [j]; j+ +; } k+ +; } if ( i > h) copy V [j] through V [m] to S [k] through S [ h + m ] else copy U [i] through U [h] to S [k] through S [ h + m ] }

  43. تحلیل پیچیدگی زمانی دربدترین حالت برای الگوریتم 3-2(ادغام) عمل اصلی: مقایسهU [i] با . V[j] اندازه ورودی:h وm ،تعداد عناصر موجود در هر یک از دو آرایه ورودی. W ( h , m) = h + m - 1

  44. تحلیل پیچیدگی زمانی دربدترین حالت برای الگوریتم 2-2( مرتب سازی ادغامی) عمل اصلی: مقایسه ای که درادغام صورت می پذیرد. اندازه ورودی: n ، تعداد عناصر آرایه S. W (n) = W (h) + W ( m) + h + m – 1 ↓ ↓ ↓ زمان لازم برای ادغام زمان لازم برای مرتب سازی Vزمان لازم برای مرتب سازی U برای n >1 که n توانی از 2 استW (n) = 2 W( n / 2) + n -1 W (1) = 0 W( n ) Єθ ( n lg n)

  45. الگوریتم4-2: مرتب سازی ادغامی 2(mergesort 2 ) void mergesort2 (index low, index high) { index mid; if (low < high) { mid = Į ( low + high) / 2 ⌡; mergesort 2 (low, mid); mergesort 2 (mid +1, high); merge2(low,mid,high) } }

  46. الگوریتم5-2:ادغام2 مسئله:ادغام دو آرایه ی مرتب Sکهدرmergesortایجاد شده اند. void mrge2 (index low, index mid, index high) { index i, j , k; keytype U [ low..high] i = low; j = mid +1 ; k = low; while ( i <= mid && j <= high) { if ( S [i] < S [j] ) { U [k] = S [i]; i + + ; }

  47. else { U [k] = S [j] j ++; } k ++; } if ( i > mid ) move S [j] through S [high] to U [k] through U [high] else move S [i] through S [mid] to U [k] through U [high] move U [low] through U [high] to S [low] through S [high] }

  48. 3-2روش تقسیم و حل راهبرد طراحی تقسیم و حل شامل مراحل زیر است: 1- تقسیم نمونه ای ازیک مسئله به یک یا چند نمونه کوچکتر. 2- حل هر نمونه کوچکتر. اگر نمونه های کوچک تر به قدر کوچک تر به قدر کافی کوچک نبودند، برای این منظور از بازگشت استفاده کنید. 3- در صورت نیاز، حل نمونه های کوچک تر را ترکیب کنید تا حل نمونه اولیه به دست آید.

  49. 4-2 مرتب سازی سریع (quicksort) • در مرتب سازی سریع، ترتیب آنها از چگونگی افراز آرایه ها ناشی می شود. • همه عناصر کوچک تر آز عنصر محوری در طرف چپ آن وهمه عناصربزرگ تر، درطرف راست آن واقع هستند.

  50. مرتب سازی سریع، به طور بازگشتی فراخوانی می شود تا هر یک از دوآرایه را مرتب کند، آن ها نیز افراز می شوند واین روال ادامه می یابد تا به آرایه ای با یک عنصربرسیم. چنین آرایه ای ذاتاً مرتب است.

More Related