1 / 41

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

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

kasen
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. مثالی از یک مسئله: تعیین کنید که آیا عدد x در لیست s متشکل از n عدد وجود دارد یا خیر؟ • پارامترهای این مسئله: مسئله مقادیر خاصی به آنها انتساب می دهد. s, n, x • الگوریتم: روال قدم به قدم برای حل همه نمونه ها

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

  7. الگوریتم 1-1: جست و جوی ترتیبی Void seqsearch ( intn const keytypeS[ ] keytypex, 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:ضربماتریس ها voidmatrixmult (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 است .

  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 ام فیبوناچی (بازگشتی) مسئله : جمله 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 ام فیبوناچی (بازگشتی)-تحلیل • اگر T(n) تعداد جملات در درخت بازگشتی باشد آنگاه T(n) >2 × T(n-2) T(n)> 2 ×2 ×T(n-4) ... T(n)> 2n/2 ×T(0)= 2n/2

  20. مقایسه دو الگوریتم فیبوناچی

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

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

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

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

  25. تحلیل پیچیدگی زمانی دربدترین حالت برای الگوریتم(جست و جوی ترتیبی) عمل اصلی:مقایسه یک عنصر آرایه با 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)، داریم: θ (ƒ(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. 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

More Related