1 / 36

فصل دوم

درس طراحی الگوریتم ها. فصل دوم. روش تقسیم و غلبه Divide & Conquer. مدرس: سید محمد بیدکی. زمستان 1391. تقسیم و غلبه (divide and conquer).

zareh
Download Presentation

فصل دوم

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. درس طراحی الگوریتم ها فصل دوم روش تقسیم و غلبه Divide & Conquer مدرس: سید محمد بیدکی زمستان 1391

  2. تقسیم و غلبه (divide and conquer) • نمونه اي از يك مساله را به صورت بازگشتي به تعدادي نمونهكوچكتر تقسيم می كند (تا زماني كه راه حل نمونه هاي كوچكتربه سادگي قابل تعيين باشند) و از حل نمونه های کوچکتر به حل نمونه بزرگ می رسد. • تقسیم (divide): مسئله به تعدادی زیر مسئله تقسیم می شود. • غلبه(conquer): زیرمسئله ها به صورت بازگشتی حل می شوند. • ترکیب (combine): در صورت لزوم، ترکیب حل زیرمسئله ها برای یافتن جواب مسئله کلی • روش تقسیم و غلبه یک رهيافت بالا به پايين (top-down)است كه توسط روتين هاي بازگشتي به كار مي رود. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  3. جست و جوی دودویی (binary search) x < 25 x > 13 x ==18 مثال: می خواهیم در آرایه مرتب زیر x=18 را جست و جو کنیم. 10 12 13 14 18 20 25 27 30 35 40 45 47 درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  4. جست و جوی دودویی (binary search) < درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  5. پیچیدگی زمانی • اگر n به توانی از دو محدود نباشد: • در بدترین حالت W(n) • عمل اصلی: تعداد مقایسه • اندازه ورودی: تعداد عناصر آرایه • حل: درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  6. مرتب سازی ادغامی (merge sort) • تقسيم آرايه n عنصری به دو زير آرايه به اندازه n/2 • حلهر يك از زير آرايه ها با مرتب سازي آن. اگر زيرآرايه به اندازه كافي كوچك نبود، براي حل آن به روش بازگشتي عمل مي كنيم. • تركيبحل هاي زير آرايه ها با ادغام آن ها در يك آرايه مرتب. • ادغام دوطرفه (two-way merge): به معنای ترکیب دو آرایه مرتب شده در یک آرایه مرتب است. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  7. Merge sort 27 10 12 20 25 13 15 22 تقسیم 27 10 12 20 25 13 15 22 27 10 12 20 25 13 15 22 حل 27 10 12 20 25 13 15 22 12 20 15 22 10 27 13 25 ترکیب 10 12 20 27 13 15 22 25 10 12 13 15 20 22 25 27 درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  8. الگوریتم مرتب سازی ادغامی (Merge sort) • این الگوریتم درجا (in-place) نمی باشد زیرا از دو آرایه کمکی استفاده می کند. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  9. ادغام (merge) درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  10. پیچیدگی زمانی ادغام • در بدترین حالت w(n) : (زمانی که تمام مقایسه ها در حلقه صورت گرفته باشد یعنی مثلاً i به h رسیده باشد و j به m-1) • عمل اصلی: مقایسه U[i] و V[j] • اندازه ورودی: m و h، تعداد عناصر دو آرایه درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  11. پیچیدگی زمانی مرتب سازی ادغامی • دربدترین حالت w(n) • عمل اصلی: مقایسه ای که در ادغام انجام می شود • اندازه ورودی: تعداد عناصر آرایه h = n/2 , m = n - h • حل: درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  12. مرتب سازی سریع (quick sort) ≤ x x ≥ x • توسط Hoare در سال 1962 ارائه شد. • مراحل الگوریتم: • انتخاب عنصر محوری (pivot) : میتواند هر عنصری باشد (مثلاً عنصر اول) • جابجایی عناصر آرایه و تقسيم آن به دو بخش به طوري كه عناصر كوچكتر از عنصرمحوري در سمت چپ و عناصر بزرگتر از آن در سمت راست آنقرار بگيرند. • مرتب سازي هر بخش به صورت بازگشتي به روش مرتب سازی سریع درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  13. Quick sort • این الگوریتم بر خلاف الگوریتم مرتب سازی ادغامی درجا می باشد. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  14. افراز (partitioning) درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  15. partitioning (سطح صفر) درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  16. Partitioning (سطح یک) درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  17. Partitioning (سطح دو) درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  18. Partitioning (سطح سه) درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  19. Partitioning (سطح چهار) درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  20. پیچیدگی زمانی الگوریتم افراز T(n) = n - 1 • در تمام حالات T(n) • عمل اصلی: تعداد مقایسه • اندازه ورودی: تعداد عناصر آرایه n = high – low + 1 • عنصر اول با بقیه عناصر مقایسه می شود. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  21. پیچیدگی زمانی الگوریتم مرتب سازی سریع(بدترین حالت) w(n) = w(0) + w(n-1) + n-1 زمان مرتب سازی آرایه سمت چپ زمان مرتب سازی آرایه سمت راست زمان انجام عمل افراز • زمان اجرا به متوازن بودن یا نبودن افراز بستگی دارد. • بدترین حالت زمانی است که آرایه از قبل مرتب باشد. • هموارهآرایه اصلی به یک آرایه خالی و یک آرایه با n-1 عنصر افراز می شود. • عمل اصلی: مقایسه عناصر با عنصر محوری • اندازه ورودی: تعداد عناصر آرایه • حل: درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  22. پیچیدگی زمانی الگوریتم مرتب سازی سریع (حالت میانگین) • احتمال اینکه هر یک از عناصر به عنوان محور انتخاب شود را برابر گرفته، 1/n در نظر می گیریم. • روش حل در کتاب • حل: درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  23. افراز (partitioning) pivotIndex = random(low, high) pivotItem = s[pivotIndex] برای اینکه کارایی الگوریتم افراز را بهتر کرده و عنصر محوری مناسب را انتخاب کنند از روش تصادفی (randomized) استفاده می کنند. سؤال: با این تغییر، در الگوریتم افراز چه تغییری باید ایجاد شود؟ درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  24. بازگشت در انتها (tail-recursion) • بازگشت در انتها به الگوریتم هایی گفته می شود که در آنها هیچ عملی پس از فراخوانی بازگشتی انجام نمی گردد. • مثال: • جست وجوی دودویی • مرتب سازی سریع • در این دسته از الگوریتم ها ایجاد یک نسخه تکراری کار آسانی است. • مزایای تبدیل به الگوریتم تکراری: • حذف پشته در فراخوانی ها و صرفه جویی درحافظه • الگوریتم های تکراری سریع تر از بازگشتی ها هستند. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  25. ضرب ماتریسها به روش استراسن • ضرب ماتريس ها به روش استاندارد: • تعداد ضربها • تعداد جمع و تفریق ها • توسط Strassen در سال 1969 ارائه شد. • پیچیدگی آن بهتر از درجه سوم می باشد. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  26. ضرب ماتریسها در روش استراسن برای ضرب دو ماتریس 2*2 به 7 عمل ضرب و 18 عمل جمع و تفریق نیاز است. در روش عادی به 8 عمل ضرب و 4 عمل جمع و تفریق نیاز است برای محاسبه استراسن معین کرد که اگر فرض کنیم آنگاه حاصل ضرب C به صورت زیر بدست می آید درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  27. ضرب ماتریسها به روش استراسن • مراحل الگوریتم • تقسیم: ابعاد ماتریس ها توانی از 2 باید باشد. هر یک از ماتریس های A و B را به چهار زیرماتریس با ابعاد n/2 تقسیم می کنیم. • حل: ضرب هر کدام از بخش های مورد نیاز با فراخوانی بازگشتی انجام می شود. • ترکیب: پاسخ های بدست آمده را مطابق با روابط استراسن ترکیب نمایید. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  28. روش استراسن • هنگامی که ماتریس ها به اندازه کافی کوچک باشند آنها را به روش استاندارد در هم ضرب می کنیم. • M2 تاM7 نیز به همین شیوه محاسبه می شوند و مقادیر c11 ، c12 ، c21 و c22 به دست می آیند. با ترکیب آنها ماتریس نهایی حاصل می شود. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  29. الگوریتم Strassen درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  30. پیچیدگی زمانی الگوریتم استراسن جمع و تفریق عناصر دو ماتریس n/2 * n/2 اندازه ورودی: n، تعداد سطر و ستون ماتریس ها عمل اصلی: یک ضرب ساده عمل اصلی: جمع و تفریق درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  31. روش Strassen • اگر اندازه ماتریسها توانی از 2 نباشد • به تعداد کافی سطر و ستون صفر به آنها اضافه می کنیم. • ضرب ماتریسها نیازمند الگوریتمی با پیچیدگی زمانی حداقل از درجه دوم دارد: • هنوز کسی نتوانسته است برای ضرب ماتریسها الگوریتمی درجه دو ارائه کند. • کسی هم نتوانسته است اثبات کند که ایجاد چنین الگوریتمی غیر ممکن است. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  32. پیچیدگی الگوریتم های تقسیم و حل درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  33. تعیین مقادیر آستانه • منظور از مقدار آستانه ی n برای یک الگوریتم بازگشتی، اندازه نمونه ایست که به ازای تمام نمونه های کوچکتر از آن، بهتر است به جای فراخوانی بازگشتی، از یک الگوریتم دیگر استفاده شود. • از لحاظ زمان اجرا • مقدار آستانه بهینه همواره وجود ندارد. • تعیین مقدار آستانه برای یک الگوریتم تا حدودی به کامپیوتر میزبان آن بستگی دارد. • زمان پردازشهای مربوط به تقسیم و ترکیب مسئله، در هر کامپیوتر متفاوت است. • در تعیین مقدار آستانه، بدترین حالت الگوریتم را مورد بررسی قرار می دهیم (در واقع سعی داریم رفتار بدترین حالت را بهینه نماییم). درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  34. تعیین مقادیر آستانه (مثال1) فرض کنید برای مرتب سازی ادغامی، t را به عنوان مقدار آستانه داشته باشیم. در اینصورت برای نمونه های کوچکتر از t، از مرتب سازی تعویضی استفاده می کنیم.فرض کنید زمان تقسیم و ادغام زیرآرایه به طول n، 32n میکرو ثانیه باشد و لذا: مقدار آستانه، مقداریست که در آن زمان اجرای هر دو الگوریتم یکسان باشد. درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  35. تعیین مقادیر آستانه (مثال2) • فرض کنید برای انجام کاری در کامپیوتر از دو الگوریتم بازگشتی و غیر بازگشتی به صورت ترکیبی با زمانهای اجرای زیر استفاده می شود. مقدار آستانه t را بدست آورید. حل: درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

  36. چه وقت نباید از D&C استفاده کرد؟ در صورت امکان: هنگامی که نمونه به اندازه n به دو یا چند نمونه تقسیم شود که اندازه آنها نیز تقریبا برابر با n است. (مرتبه نمایی) هنگامی که نمونه با اندازه n تقریبا به n نمونه با اندازه n/c تقسیم شود که c یک مقدار ثابت است. (مرتبه nlgn) درس طراحی الگوریتمها - فصل دوم: روش تقسیم و غلبه - مدرس: بیدکی

More Related