Presentation is loading. Please wait.

Presentation is loading. Please wait.

برنامه نویسی پویا (Dynamic Programming)

Similar presentations


Presentation on theme: "برنامه نویسی پویا (Dynamic Programming)"— Presentation transcript:

1

2 برنامه نویسی پویا (Dynamic Programming)
روش تقسیم و حل، روشی بالا به پایین است. این روش در مسائلی مانند مرتب سازی ادغامی جواب می‌دهد چراکه نمونه‌های کوچکتر به مرتبط نیستند. ولی در محاسبه جمله nام فیبوناجی، نمونه‌ها کوچکتر به هم مرتبطند

3 بنابراین روشی پایین به بالا است
برنامه نویسی پویا برنامه نویسی پویا از این نظر که نمونه به نمونه‌های کوچکتر تقسیم می‌شود، مشابه روش تقسیم و حل است ولی 1- ابتدا نمونه‌های کوچکتر را حل می‌کنیم 2- نتایج را ذخیره می‌کنیم و 3- بعدا هرگاه به آنها نیاز شد به جای محاسبه مجدد تنها آنها را بازیابی می‌کنیم بنابراین روشی پایین به بالا است

4 برنامه نویسی پویا مراحل بسط یک الگوریتم برنامه نویسی پویا: 1- ارائه یک ویژگی بازگشتی برای نمونه‌ای از مسئله 2- حل مسئله به شیوه پایین به بالا با حل نمونه‌های کوچکتر

5 الف) ضریب دوجمله‌ای

6 الف) ضریب دوجمله‌ای حل با استفاده از روش تقسیم‌وحل: function [result]=binCoef(n,k) if (k==0 || k==n) result=1; else result=binCoef(n-1,k-1)+binCoef(n-1,k); end

7 الف) ضریب دوجمله‌ای همانند محاسبه جمله nام فیبوناجی، این الگوریتم نیز کارایی کمی دارد. مثلا binCoef(n-1,k-1) و binCoef(n-1,k) هر دو نیاز به نتیجه binCoef(n-2,k-1) دارند و این نمونه در هر فراخوانی بازگشتی به صورت جداگانه محاسبه می‌شود.

8 الف) ضریب دوجمله‌ای حل با روش پویا: 1- یک ویژگی بازگشتی ایجاد می‌کنیم
2- مسئله را به صورت پایین به بالا حل می‌کنیم ...

9 الف) ضریب دوجمله‌ای حل با روش پویا: 1- یک ویژگی بازگشتی ایجاد می‌کنیم
2- مسئله را به صورت.... پایین به بالا حل می‌کنیم:

10 الف) ضریب دوجمله‌ای حل با روش پویا: function [result]=binCoef2(n,k) for i=0:n for j=0:min([i k]) if ((j==0)||(j==i)) B(i,j)=1; else B(i,j)=B(i-1,j-1)+B(i-1,j); end result=B(n,k); تمرین: تابع فوق را به گونه‌ای تغییر دهید که اجرای آن در Matlab صحیح باشد

11 الف) ضریب دوجمله‌ای پیچیدگی محاسباتی و مرتبه آن: for i=1:n
for j=1:min([i k]) end پیچیدگی محاسباتی و مرتبه آن:

12 الف) ضریب دوجمله‌ای تمرین: مسئله ضریب دو جمله‌ای را با برنامه‌نویسی پویا با آرایه یک بعدی حل کنید

13 تمامی راه حل‌های ممکن هستیم.
مسائل بهینه سازی در ریاضیات و علوم کامپیوتر مساله بهینه‌سازی به صورت زیر تعریف می‌شود: مساله‌ای است که در آن به دنبال یافتن بهترین راه حل در بین... تمامی راه حل‌های ممکن هستیم. این مسائل باتوجه متغیرهای موثر در حل مسئله به دو گروه زیر تقسیم می‌شوند: متغیرهای پیوسته مساله بهینه‌سازی پیوسته متغیرهای گسستهمساله بهینه‌سازی ترکیبی

14 مسائل بهینه سازی فرم استاندارد این مسائل به صورت زیر است:
مساله بهینه‌سازی پیوسته فرم استاندارد این مسائل به صورت زیر است: که ... تابع هدفی است که می‌خواهیم xای را برایش بیابیم که آن را کمینه کند. محدودیت‌هایی هستند که به صورت عدم تساوی بیان می‌شوند. محدودیت‌هایی هستند که به صورت تساوی بیان می‌گردند.

15 I مجموعه نمونه‌ها است مانند ...
مسائل بهینه سازی مسائل بهینه‌سازی ترکیبی مانند .... مساله یافتن کوتاه‌ترین مسیر بین دو شهر این مسائل به صورت چهارتایی (I, f, m, g) بیان می‌شوند که .... I مجموعه نمونه‌ها است مانند ... مجموعه شهرها به صورت دوبه‌دو xای که عضو I است را در نظر بگیرید مانند ... (یزد و کرمانشاه) f(x) مجموعه راه حل‌های ممکن برای این x است مانند ... مسیرهای مختلف جاده‌ای بین این دو شهر Some examples of combinatorial optimization problems that fall into this framework are shortest paths and shortest path trees, flows and circulations, spanning trees, matching, and matroid problems.

16 بهینه‌ترین راه حل (y) با توجه به تابع هدف را پیدا کنیم.
مسائل بهینه سازی مسائل بهینه‌سازی ترکیبی (I, f, m, g) فرض کنید که y، یکی از راه حل‌های ممکن باشد مانند... یزد-ابرکوه-اصفهان-بروجرد-کنگاور-کرمانشاه m(x,y) تابعی است که اندازه y به ازای x که معمولا عددی مثبت است را برمی‌گرداند. g، تابع هدف است که معمولا یا min و یا max است. هدف در این مسائل بهینه‌سازی آن است تا .... برای هر x، ... بهینه‌ترین راه حل (y) با توجه به تابع هدف را پیدا کنیم. Some examples of combinatorial optimization problems that fall into this framework are shortest paths and shortest path trees, flows and circulations, spanning trees, matching, and matroid problems.

17 حل مسائل بهینه‌سازی ترکیبی با برنامه‌نویسی پویا
برای حل مسائل بهینه‌سازی ترکیبی روش‌های مختلفی وجود دارد که با رویکردهای حل آنها با روش‌های برنامه‌نویسی پویا، حریصانه، عقبگرد و شاخ‌وحد انشاا... در طول ترم آشنا خواهیم شد. مسائل بهینه‌سازی ترکیبی ای را می‌توان با برنامه نویسی پویا حل کرد به شرط آن‌که اصل بهینگی در مورد آن برقرار باشد

18 حل مسائل بهینه‌سازی ترکیبی با برنامه‌نویسی پویا
اصل بهینگی (Principle of Optimality) تعریف: مساله‌ای شرایط اصل بهینگی را دارد چنانچه در آن مساله ... زیر راه‌حل‌های یک راه‌‌حل بهینه برای هر نمونه مساله‌ ... خودشان راه‌حل‌های بهینه برای زیرمسائلی متناظر باشند.

19 حل مسائل بهینه‌سازی ترکیبی با برنامه‌نویسی پویا
مثال: آیا شرایط بهینگی در مساله کوتاه‌ترین مسیر برقرار است؟ روش بررسی .... اگر برای مساله کوتاه‌ترین مسیر از هر a به هر bای، ... a,x1,x2,...,xn,b راه‌حل بهینه باشد ... در این‌صورت هر بخش xi to xj در این راه‌حل بهینه ... خود را حل بهینه برای کوتاه‌ترین مسیر از xi به xj می‌باشد ... چراکه اصلا ممکن نیست بخشی از راه‌حل کوتاه‌ترین مسیر نباشد ولی کل راه حل بهینه گردد.

20 حل مسائل بهینه‌سازی ترکیبی با برنامه‌نویسی پویا
مثال: همان مساله قبلی را به جای کوتاه‌ترین مسیر، طولانی‌ترین مسیر ساده درنظر بگیرید. مسیر ساده: مسیری که هیچگاه دوبار از یک راس نگذرد. حالا چرا مسیر ساده ؟ .... اصل بهینگی برقرار است؟ آیا نمی‌توان همان توجیه کوتاه‌ترین مسیر را اینجا نیز مطرح کنیم؟ امکان دارد بین دو راس میانی طولانی‌ترین مسیر ساده‌ای وجود داشته باشد که اگر طولانی‌ترین مسیر مساله اصلی بخواهد از همان بگذرد دیگر ساده نشود یعنی مجبور است از یک راس دوبار بگذرد.

21 حل مسائل بهینه‌سازی ترکیبی با برنامه‌نویسی پویا
به مثال زیر توجه کنید: طولانی‌ترین مسیر از v1 به v4، .... [v1, v3, v2, v4] هست ولی ... طولانی‌ترین مسیر از v1 به v3 دیگر ... [v1, v3] نیست بلکه .... [v1,v2,v3] است.

22 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
نمایش یک گراف وزن‌دار جهت‌دار در شکل زیر آمده است:

23 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
چرخه: مسیری از یک راس به خود آن راس مسیر ساده: مسیری که هیچگاه دوبار از یک راس نگذرد طول مسیر: حاصلجمع وزن یال‌های مسیر و اگر یال‌ها وزن نداشتند برابر با تعداد یال‌ها در مسیر

24 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
با این الگوریتم می‌خواهیم کوتاه‌ترین مسیر بین هر دو گره را به‌دست بیاوریم. یک الگوریتم واضح: تعیین طول همه مسیر‌ها برای هر راس از آن راس به همه رئوس دیگر

25 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
یک گراف وزن‌دار حاوی n راس را با آرایه W نشان می‌دهیم:

26 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
در این الگوریتم، در نهایت می‌خواهیم ماتریس D را که دربرگیرنده کوتاه‌ترین مسیر بین هر دو گره است را پیدا کنیم

27 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
D(k) [i][j] را برابر طول کوتاه‌ترین مسیری قرار می‌دهیم که vi را به vj وصل می‌کند و فقط هم از راس‌های موجود در مجموعه {v1,v2,…,vk} به عنوان رئوس میانی استفاده می‌کند.

28 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
بنابراین برای پیداکردن D بایستی به دنبال راه حلی باشیم که ... D(n) را از D(0) به دست بیاوریم. همانگونه که در جلسه قبل بیان شد در برنامه نویسی پویا باید ابتدا ... ویژگی بازگشتی بنویسیم که ... D(k) را از D(k-1) بدست بیاورد. سپس ... برنامه‌ای بنویسیم که مساله را به صورت پایین به بالا حل کند. یعنی در برنامه ... k را ابتدا صفر قرار دهیم و تا n این فرایند را تکرار کنیم.

29 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
گام اول: ویژگی بازگشتی بنویسیم که D(k) را از D(k-1) بدست بیاورد. برای حل این گام می‌توانیم دو حالت را در نظر بگیریم: حالت اول: ... استفاده از راس kام در مرحله kام سبب کوتاه‌ترشدن مسیر نمی‌شود. حالت دوم: ... استفاده از راس kام سبب کوتاه‌ترشدن مسیر می‌شود.

30 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
گام اول: ویژگی بازگشتی بنویسیم که D(k) را از D(k-1) بدست بیاورد. حالت دوم: ... استفاده از راس kام سبب کوتاه‌ترشدن مسیر می‌شود. از آنجایی که vk نمی‌تواند راس میانی در زیر مسیرها از vi به vk و همچنین از vk به vj باشد بنابراین ... در این مسیرها تنها از مجموعه رئوس {v1,…,vk-1} به عنوان رئوس میانی استفاده می‌شود. یعنی ...

31 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
بنابراین چون حالت‌های ما از این دو حالت خارج نیست بنابراین ... حالتی که کمتر می‌شود درنظر گرفته می‌شود ...

32 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف

33 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
بعد از اینکه کل آرایه D(1) محاسبه شد سپس آرایه D(2) محاسبه می‌شود.

34 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
function [D,P]=floyd(W) n=length(W); D=zeros(n,n,n); D(0,:,:)=W; for k=1:n for i=1:n for j=1:n if ((D(k-1,i,k)+D(k-1,k,j)<D(k-1,i,j))) D(k,i,j)=D(k-1,i,k)+D(k-1,k,j); else D(k,i,j)=D(k-1,i,j); end

35 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
اگر بخواهیم به جای آرایه سه‌بعدی با یک آرایه دو‌بعدی الگوریتم را بنویسیم ... چه مشکلی پیش می‌آید؟ ... امکان دارد در دور kامی مقدار D[i][k] یا D[k][j]ای تغییر کند و ما دیگر در همان دور kام نتوانیم به مقادیر دور k-1ام آنها دسترسی پیدا کنیم. نشان می‌دهیم که این دو مقدار در دور kام هیچگاه تغییر نمی‌کنند ...

36 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
چاپ کردن کوتاه‌ترین مسیر ماتریس P[i][j] را به این صورت تعریف می‌کنیم: 0: چنانچه راس میانی در کوتاه‌ترین مسیر از vi به vj وجود نداشته باشد. بزرگترین اندیس راس میانی: چنانچه حداقل یک راس میانی در کوتاه‌ترین مسیر وجود داشته باشد. if ((D(i,k)+D(k,j)<D(i,j))) P(i,j)=k;

37 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
function [D,P]=floyd(W) n=length(W); D=W; P=zeros(n,n); for k=1:n for i=1:n for j=1:n if ((D(i,k)+D(k,j)<D(i,j))) D(i,j)=D(i,k)+D(k,j); P(i,j)=k; else D(i,j)=D(i,j); end

38 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
چنانچه الگوریتم گفته‌شده بر گراف زیر اعمال شود، ماتریس P محتوایی برابر مقدار زیر خواهد داشت.

39 ب) الگوریتم فلوید برای یافتن کوتاه‌ترین مسیر در گراف
تمرین: تابعی با نام printPath بنویسید که با دادن i و j، اندیس راس‌های واقع در کوتاه‌ترین مسیر بین این دو راس را با رویکرد تقسیم‌وحل چاپ کند. فرض کنید P به صورت global تعریف شده‌است. پیچیدگی زمانی الگوریتم فلوید:

40 ج) ضرب زنجیره‌ای ماتریس‌ها
ظرب چهار ماتریس زیر را درنظر بگیرید: ابعاد هر ماتریس در زیر آن نشان داده شده است. اپراتور ضرب ماتریس‌ها ویژگی انجمنی (associative) دارد. ویژگی انجمنی به این معنا است که ترتیب ضرب در نتیجه حاصل تاثیری ندارد. برای مثال A (B (CD)) و (AB (CD) هر دو نتیجه یکسانی دارند. چهار ماتریس را با پنج ترتیب متفاوت می‌توان در هم ضرب کرد. هر ترتیب ضرب تعداد عملیات‌های ضرب پایه‌ای متفاوتی خواهد داشت.

41 ج) ضرب زنجیره‌ای ماتریس‌ها
برای این پنج ماتریس تعداد عملیات‌های پایه‌ای ضرب آورده شده است. سومین ترتیب از این نظر که تعداد عملیات‌های ضرب پایه‌ای کمتری در آن صورت می‌پذیرد بهینه است.

42 ج) ضرب زنجیره‌ای ماتریس‌ها
در این مساله به دنبال آن هستیم ترتیب بهینه ضرب n ماتریس را بدست آوریم که ... تعداد عملیات پایه‌ای ضرب کمتری در آن صورت پذیرد.

43 ج) ضرب زنجیره‌ای ماتریس‌ها
این مساله به صورت چهارتایی (I, f, m, g) بیان می‌شوند که .... I مجموعه نمونه‌ها است. در اینجا ... مجموعه حاصلضرب ماتریس‌های مختلف با ابعاد و n های مختلف xای که عضو I است را درنظر بگیریم. مثلا ... یک نمونه از حاصلضرب ماتریس‌ها مانند مثال اسلاید قبل f(x) مجموعه راه حل‌های ممکن از ویژگی انجمنی ضرب این نمونه است. با فرض اینکه y، یکی از این راه حل‌ها باشد، m(x,y) بیانگر تعداد ضرب‌های پایه است. g، تابع هدف است که در اینجا min می‌باشد.

44 ج) ضرب زنجیره‌ای ماتریس‌ها
الگوریتمی که تمام yها را به ازای هر x درنظر می‌گیرد: ... (brute force) در این مساله بهینه سازی، بیاییم و تمامی ترتیب‌های ممکن را ایجاد کنیم، .... در هر ترتیب، تعداد ضرب‌های پایه را بشماریم و ... ترتیبی را انتخاب کنیم که کمترین تعداد ضرب‌های پایه را دارد.

45 ج) ضرب زنجیره‌ای ماتریس‌ها
الگوریتم brute force: فرض کنید tn تعداد ترتیب‌های مختلفی باشد که n ماتریس A1, A2, …, An را در هم می‌توان در هم ضرب کرد. خانواده‌ای از ترتیب‌ها می‌تواند به این صورت باشد: غیر از این خانواده، گروهی دیگر را هم می‌توان درنظر گرفت که ... An آخرین ماتریسی باشد که ضرب می‌شود.

46 ج) ضرب زنجیره‌ای ماتریس‌ها
بنابراین، و از آنجاییکه t2 = 1، این رابطه بازگشتی به صورت زیر حل می‌شود.

47 ج) ضرب زنجیره‌ای ماتریس‌ها
آیا اصل بهینگی در این مساله برقرار است؟ بله، چراکه چنانچه ترتیب بهینه برای ضرب n ماتریس اگر داشته باشیم در این صورت، هر زیر راه حل آن مسلما خود راه حل بهینه برای ماتریس‌های موجود در زیر راه حل می‌باشد. به عنون مثال چنانچه راه حل زیر ترتیب بهینه برای ضرب ماتریس‌های A1 تا A6 باشد، آنگاه ... باید ترتیب بهینه برای ضرب ماتریس‌های A2 تا A4 باشد.

48 ج) ضرب زنجیره‌ای ماتریس‌ها
برای آغاز حل مساله ابتدا ساختاری را تعریف می‌کنیم که بر اساس آن بتوانیم ویژگی بازگشتی را تعریف کنیم: فرض کنید در ماتریس M، M [i] [j] برابر با حداقل تعداد ضرب‌ها برای ضرب ماتریس‌های Ai تا Aj باشد (چنانچه i<j باشد). بنابراین ... M [i] [i] =0

49 ج) ضرب زنجیره‌ای ماتریس‌ها
ترتیب بهینه برای ضرب شش ماتریس A1 تا A6 در یکی از پنج حالت‌ زیر قرار می‌گیرد. A1 (A2A3A4A5A6) (A1A2) (A3A4A5A6) (A1A2A3) (A4A5A6) (A1A2A3A4) (A5A6) (A1A2A3A4A5) (A6)

50 ج) ضرب زنجیره‌ای ماتریس‌ها
آیا ویژگی بازگشتی بدست آمد؟ شبیه هر حل با برنامه نویسی پویا بعد از بدست آوردن ویژگی بازگشتی بایستی ترتیب اجرایی در برنامه نویسی پیدا کنیم تا مساله از پایین به بالا حل شود. یعنی باید مشخص کنیم که المان‌های ماتریس M به چه نحوی مقدار دهی شود تا در نهایت ....؟ M[1][n] بدست آید.

51 ج) ضرب زنجیره‌ای ماتریس‌ها

52 ج) ضرب زنجیره‌ای ماتریس‌ها
function [m,P]=minimult(d) n=length(d)-1; M=zeros(n,n); P=zeros(n,n); for diagonal=2:n for i=1:n-diagonal+1 j=i+diagonal-1; clear values; for k=i:j-1 values(k)=M(i,k)+M(k+1,j)+d(i)*d(k+1)*d(j+1); end [M(i,j),k]=min(values); P(i,j)=k; m=M(1,n); ج) ضرب زنجیره‌ای ماتریس‌ها

53 ج) ضرب زنجیره‌ای ماتریس‌ها
تمرین: نشان دهید که حاصل این سیگما برابر با رابطه زیر است. for diagonal=2:n for i=1:n-diagonal+1 j=i+diagonal-1; for k=i:j-1 end

54 ج) ضرب زنجیره‌ای ماتریس‌ها
The array P

55 ج) ضرب زنجیره‌ای ماتریس‌ها
function order(i,j) global P; if (i==j) disp(['A' num2str(i)]); else k=P(i,j); disp('('); order(i,k); order(k+1,j); disp(')'); end

56 د) درخت جستجوی دودویی بهینه
درخت جستجوی دودویی، درختی دودویی از آیتم‌ها است. این آیتم‌ها معمولا کلید‌هایی هستند که ... از یک مجموعه مرتب بدست می‌آیند یعنی ... برای آیتم‌ها اپراتورهای کوچکتر، بزرگتر و مساوی وجود دارد مانند مجموعه کدهای ملی، مجموعه نام‌های خانوادگی در این درخت: هر راس، شامل یک کلید می‌شود کلیدهایی که در زیردرخت سمت چپ هر راس وجود دارند، کوچکتر از کلید آن راس هستند. کلیدهایی که در زیردرخت سمت راست هر راس وجود دارند، بزرگتر از کلید آن راس هستند.

57 د) درخت جستجوی دودویی بهینه

58 د) درخت جستجوی دودویی بهینه
عمق هر راس در درخت برابر است با ... تعداد یالهایی که در مسیر واحد ریشه به آن راس وجود دارد. به عمق، همچنین سطح نیز گفته می‌شود. عمق درخت، ... بیشینه عمق راس‌های درخت می‌باشد. درخت دودویی بالانس است، اگر ... تفاوت عمق دو زیردرخت هر راس، بیشتر از یک نباشد.

59 د) درخت جستجوی دودویی بهینه
هدف آن است تا کلیدها در درخت جستجویی دودویی به گونه‌ای سازمان‌دهی شوند که ... میانگین زمان برای پیداکردن کلیدها‌ کمینه شود. درختی که با این رویکرد سازمان‌دهی شود، بهینه گفته می‌شود. اگر همه کلیدهای با احتمال یکسان کلید جستجو باشند ... بین این دو درخت کدام‌یک بهینه است؟

60 د) درخت جستجوی دودویی بهینه
مساله بهینه‌سازی که در این جلسه مد نظر است، ... کلید‌ها دارای احتمال جستجوی یکسان نیستند. مثلا، درخت جستجوی دودویی را درنظر بگیرید که کلیدها نام افراد می‌باشد. در این درخت باتوجه به نام افراد به رکورد اطلاعاتی آنها دست می‌یابیم. چون «Tom» بیشتر از نام «Ursula» عمومی است، بنابراین احتمال بیشتری به آن نسبت داده می‌شود. برای آنکه میانگین زمان جستجو کمینه شود بایستی تعریفی از زمان جستجو ارائه شود.

61 د) درخت جستجوی دودویی بهینه
زمان جستجو: تعداد مقایسه‌هایی که توسط تابع جستجو برای یافتن هر کلید صورت می‌پذیرد. هدف: یافتن درخت جستجوی دودویی است که ... میانگین زمان جستجو کمینه گردد.

62 د) درخت جستجوی دودویی بهینه
این مساله به صورت چهارتایی (I, f, m, g) بیان می‌شود که .... I مجموعه نمونه‌ها است. در اینجا ... مجموعه کلیدها با احتمال جستجو برای هر کلید xای که عضو I است را درنظر بگیریم. مثلا ... یک تعدادی مشخص از کلیدها که به هر کلید احتمال جستجویی نسبت داده شده است. f(x) مجموعه درخت‌های جستجوی دودویی متفاوتی که می‌توان درنظر گرفت. با فرض اینکه y، یکی از این راه حل‌ها باشد، m(x,y) بیانگر میانگین زمان جستجو در درخت y می‌باشد. g، تابع هدف است که در اینجا min می‌باشد.

63 د) درخت جستجوی دودویی بهینه
می‌توانیم رابطه زیر را برای زمان جستجوی هر کلید ارائه دهیم: مثلا در درخت جستجوی دودویی زیر زمان جستجو برای کلید «Ursula» برابر است با:

64 د) درخت جستجوی دودویی بهینه
فرض کنید «Key1, Key2,…, Keyn»، n کلید مرتب شده باشد. فرض کنید که pi احتمالی است که Keyi جستجو شود. چنانچه ci زمان جستجوی یافتن Keyi در هر درخت فرضی باشد، با توجه به فرضیات بالا، برای درخت جستجوی دودویی مفرض، میانگین زمان جستجو با رابطه زیر محاسبه می‌شود: این همان مقداری است که به دنبال کمینه کردن آن هستیم.

65 د) درخت جستجوی دودویی بهینه
برای این پنج درخت، میانگین زمان جستجو به صورت زیر محاسبه می‌شود: 3 (0.7) + 2 (0.2) + 1 (0.1) = 2.6 2 (0.7) + 3 (0.2) + 1 (0.1) = 2.1 2 (0.7) + 1 (0.2) + 2 (0.1) = 1.8 1 (0.7) + 3 (0.2) + 2 (0.1) = 1.5 1 (0.7) + 2 (0.2) + 3 (0.1) = 1.4

66 د) درخت جستجوی دودویی بهینه
(brute force) در این مساله به ازای هر x، تمامی درخت‌های جستجوی دودویی را ایجاد کنیم و به ازای هر درخت، میانگین زمان جستجو را محاسبه کنیم و ... درختی را انتخاب کنیم میانگین زمان جستجوی کمتری دارد.

67 د) درخت جستجوی دودویی بهینه
(brute force) در اینجا نمی‌خواهیم تمامی درخت‌های جستجوی دودویی را ایجاد کنیم ... بلکه شبیه جلسه قبل می‌خواهیم نشان دهیم تعداد آنها از یک کفی بیشتر است. اگر فقط درخت‌های جستجوی دودویی را درنظر بگیریم که دارای عمق n-1 هستند ... نشان می‌دهیم که تعداد این درخت‌ها نمایی است. در اینگونه درخت‌ها (درخت‌های با عمق n-1)، یک راس در ریشه است (سطح صفر) ... راسی که در سطح اول قرار می‌گیرد، می‌تواند سمت چپ و یا سمت راست راس سطح صفر قرار گیرد ... راسی که در سطح دوم قرار می‌گیرد، می‌تواند در سمت چپ و یا راست راس سطح اول قرار گیرد و ...

68 د) درخت جستجوی دودویی بهینه
(brute force) این به آن معنا است که می‌توان .... 2n−1 درخت جستجوی دودویی متفاوت با عمق n-1 ایجاد کرد.

69 د) درخت جستجوی دودویی بهینه
هدف ادامه مبحث درس این جلسه آن است تا با رویکرد برنامه‌نویسی پویا الگوریتمی کاراتر بدست آوریم.

70 د) درخت جستجوی دودویی بهینه
مسلما هر زیردرخت در هر درخت بهینه خود باید بهینه باشد ... بنابراین اصل بهینگی در این مساله برقرار است.

71 د) درخت جستجوی دودویی بهینه
فرض کنید کلیدهای Keyi تا Keyj در یک درخت بگونه‌ای قرار گرفته باشند که رابطه زیر کمینه شود. که cm برابر با زمان جستجو برای یافتن Keym در درخت می‌باشد. این درخت را درخت بهینه می‌نامیم که در A [i] [j] ذخیره شده است. در درختی که تنها یک کلید دارد، .... چون تنها یک مقایسه برای یافتن آن کلید نیاز است پس ... A [i] [i] = pi

72 د) درخت جستجوی دودویی بهینه
چنانچه مجموعه‌ای از n کلید مرتب در اختیار داشته باشیم، هرکدام از n حالت زیر را می‌توان متصور شد: 1) فرض کنید «tree 1» درختی باشد که بهینه است و Key1 در ریشه قرارا گرفته باشد. 2) فرض کنید «tree 2» درختی باشد که بهینه است و Key2 در ریشه قرارا گرفته باشد. 3) فرض کنید «tree 3» درختی باشد که بهینه است و Key3 در ریشه قرارا گرفته باشد. n) فرض کنید «tree n» درختی باشد که بهینه است و Keyn در ریشه قرارا گرفته باشد. مسلما ... برای هرکدام از حالت‌های بالا، زیردرخت‌ها نیز بایست بهینه باشند.

73 د) درخت جستجوی دودویی بهینه
بنابراین اگر A [1] [n] میانگین زمان جستجو در درخت بهینه باشد، بنابراین میانگین زمان جستجو در درخت‌های سمت چپ و راست به صورت زیر است.

74 د) درخت جستجوی دودویی بهینه
حال می‌خواهیم میانگین زمان جستجوی tree k را براساس.... زیردرخت‌هایش بنویسیم یعنی همان رابطه

75 د) درخت جستجوی دودویی بهینه
توجه کنیم که فرض می‌کنیم میانگین زمان جستجوی بهینه را برای هر دو زیر درخت داریم. همانگونه که در این شکل مشهود است برای m ≠ k دقیقا یک جستجوی بیشتر نسبت به زیر درخت‌ مربوطه بایستی انجام پذیرد تا Keym در «درخت k» پیدا شود. این یک مقایسه بیشتر چگونه در میانگین زمان جستجو تاثیر می‌گذارد؟ برای Keym ، 1 x pm به میانگین زمان جستجو در «درخت k» اضافه می‌کند. بنابراین میانگین زمان جستجو در «درخت k» برابر خواهد بود با:

76 د) درخت جستجوی دودویی بهینه
که با رابطه زیر برابر خواهد بود: به دلیل آنکه یکی از این درخت‌های «درخت k» بهینه می‌باشد بنابراین .... میانگین زمان جستجو برای درخت بهینه به صورت زیر خواهد بود: که A [1] [0] و A [n + 1] [n]، صفر درنظر گرفته می‌شوند.

77 د) درخت جستجوی دودویی بهینه
همین بحث‌ها برای Keyi تا Keyj که i < j نیز معتبر است. بنابراین رابطه زیر را خواهیم داشت:

78 د) درخت جستجوی دودویی بهینه
function [R,minavg]=optSearchTree(P) n=length(P); A=zeros(n,n); for i=1:n A(i,i)=P(i); R(i,i)=i; end for diagonal=2:n for i=1:n-diagonal+1 j=i+diagonal-1; clear values; for k=i:j values(k)=A(i,k-1)+A(k+1,j); [A(i,j),k]=min(values); A(i,j)=A(i,j)+sum(P(i:j)); R(i,j)=k; minavg=A(1,n); د) درخت جستجوی دودویی بهینه با آنالیزی شبیه آنالیز جلسه قبل خواهیم داشت:

79 د) درخت جستجوی دودویی بهینه
مثال) چهار کلید و احتمال‌های آنها را درنظر بگیرید: ماتریس A و R پس از حل به صورت زیر خواهد بود:

80 د) درخت جستجوی دودویی بهینه
که شکل درخت جستجوی بهینه به صورت زیر خواهد بود:

81 ز) زمان‌بندی خطوط مونتاژ (Assembly-line scheduling)
شرکتی خودروسازی کارخانه‌ای دارد که دو خط مونتاژ دارد

82 ز) زمان‌بندی خطوط مونتاژ
شاسی خودرو در هرکدام از خطوط مونتاژ وارد می‌شود و در هر ایستگاه (station) بخش‌هایی به آن اضافه می‌شود و خودروی تکمیل‌شده در انتهاب خط خارج می‌شود

83 ز) زمان‌بندی خطوط مونتاژ
هر خط مونتاژ تعداد n ایستگاه با شماره‌های j=1,2,…,n دارد. j امین ایستگاه در خط مونتاژ iام را با Si,j مشخص می‌کنیم. jامین ایستگاه در خط اول (S1,j) کارکر یکسانی همانند ایستگاه jام در خط دوم (S2,j) انجام می‌دهد. البته ایستگاه‌ها با تکنولوژی‌های مختلفی ساخته شده‌اند که سبب می‌شود زمان عملکرد متفاوتی داشته باشند. زمان مونتاژ در ایستگاه Si,j را با ai,j نشان می‌هیم.

84 ز) زمان‌بندی خطوط مونتاژ
ei زمان ورود شاسی به خط مونتاژ iام می‌باشد و xi زمان خروج اوتوموبیل کامل شده از خط مونتاژ i ام می‌باشد.

85 ز) زمان‌بندی خطوط مونتاژ
در حالت نرمال وقتی شاسی وارد خط مونتاژی می‌شود، عملیات‌های مونتاژ فقط در ایستگاه‌های همان خط انجام می‌شود. زمان گذراز یک ایستگاه به ایستگاه بعدی در همان خط تولید قابل چشم‌پوشی است. در موارد محدودی که مشتری می‌خواهد اتومبیلش در سریعترین زمان ممکن ساخته شود، این امکان وجود دارد که مدیر کارخانه برای سرعت بخشیدن به عملیات‌های تولید اتومبیل نیمه‌ساخته را از یک خط مونتاژ به خط مونتاژ بعدی انتقال دهد. زمان مورد نیاز برای انتقال شاسی از خط مونتاژ iام پس از آنکه عملیات ایستگاه Si,j روی آن انجام شد، ti,j می‌باشد که i=1,2 و j=1,2,…,n-1 (چراکه بعد از ایستگاه nام اتومبیل تکمیل شده است)

86 ز) زمان‌بندی خطوط مونتاژ
مساله در اینجا این است تا مشخص کنیم که کدام ایستگاه‌های خط اول و کدام ایستگاه‌های خط دوم را انتخاب کنیم تا زمان کلی برای ساخت خودرو کمینه شود.

87 ز) زمان‌بندی خطوط مونتاژ
روش brute force: می‌توانیم کلیه راه‌های ممکن را بررسی کنیم ... اتومبیل وارد خط یک یا دو شود، سپس به ایستگاه بعدی در همان خط برود یا ایستگاه بعدی در خط دیگر و ... که نهایتا 2n حالت ممکن می‌شود. برای همه حالت‌های زمان کلی ساخت را محاسبه کنیم و ... حالتی را انتخاب کنیم که زمان ساخت کمینه داشته باشد.

88 ز) زمان‌بندی خطوط مونتاژ
آیا اصل بهینگی برقرار است؟

89 ز) زمان‌بندی خطوط مونتاژ
چنانچه با سریعترین راه ممکن به ایستگاه S1,j رسیده‌باشیم در این صورت یا از ایستگاه j-1 از خط 1 یا 2 آمده‌ایم. بنابراین سریعترین راه برای رسیدن به ایستگاه S1,j برابر است با سریعترین زمان رسیدن به ایستگاه S1,j-1 و سپس مستقیما به ایستگاه S1,j بیاییم. یا سریعترین زمان رسیدن به ایستگاه S2,j-1 و سپس از خط 2 به خط 1 منتقل شده و به ایستگاه S1,j برسیم. با استنتاجی مشابه، سریعترین راه برای رسیدن به ایستگاه S2,j برابر است با سریعترین زمان رسیدن به ایستگاه S2,j-1 و سپس مستقیما به ایستگاه S2,j بیاییم. یا سریعترین زمان رسیدن به ایستگاه S1,j-1 و سپس از خط 1 به خط 2 منتقل شده و به ایستگاه S2,j برسیم.

90 ز) زمان‌بندی خطوط مونتاژ
چنانجه به سریعترین زمان ممکن برای گرفتن شاسی از ایستگاه Si,j باشد هدف نهایی ما آن است تا کوتاه‌ترین زمانی را مشخص کنیم که عملیات‌های شاس در پایان هر کدام از خطوط تمام می‌شود و نهایتا از کارخانه خارج می‌شود. این زمان را با f* نشان می‌دهیم.

91 ز) زمان‌بندی خطوط مونتاژ

92 ز) زمان‌بندی خطوط مونتاژ

93 ز) زمان‌بندی خطوط مونتاژ

94 ز) زمان‌بندی خطوط مونتاژ

95 و) طولانی‌ترین زیررشته مشترک (Longest Common Substring)
در کاربردهای زیست‌شناسی اغلب می‌خواهیم DNA دو یا چند موجود زنده را با هم مقایسه کنیم. یک رشته DNA شامل رشته‌ای از مولکول‌ها است که به آنها پایه (base) می‌گویند. DNA مربوط به یک موجود زنده: S1=ACCGGTCGAGTGCGCGGAAGCCGGCCGAA DNA مربوط به به یک موجود زنده دیگر: S2=GTCGTTCGGAATGCCGTTGCTCTGTAAA

96 و) طولانی‌ترین زیررشته مشترک
S1=ACCGGTCGAGTGCGCGGAAGCCGGCCGAA S2=GTCGTTCGGAATGCCGTTGCTCTGTAAA در بسیاری از موارد برای مقایسه شباهت بین دو ارگانیسم نیاز است تا رشته DNA مربوط به آنها را مقایسه کنیم.

97 و) طولانی‌ترین زیررشته مشترک
S1=ACCGGTCGAGTGCGCGGAAGCCGGCCGAA S2=GTCGTTCGGAATGCCGTTGCTCTGTAAA برای تعریف شباهت بین دو رشته DNA راه‌های مختلفی وجود دارد. روشی که استفاده می‌شود اینگونه است که بیاییم زیر رشته مشترکی بین دو رشته S1 و S2 را بیابیم. در این زیر رشته مشترک نیازی نیست تا base ها دقیقا پشت سرهم آمده باشند بلکه چنانچه فقط به ترتیب یکسانی آمده باشند کفایت می‌کند. هرچه زیر رشته مشترکی که می‌یابیم طولانی‌تر باشد در این صورت درو رشته S1 و S2 بیشتر به هم شبیه هستند. مثلا در این مثال، رشته S3 طولانی‌ترین زیر رشته مشترک است. S3=GTCGTCGGAAGCCGGCCGAA.

98 و) طولانی‌ترین زیررشته مشترک
S1=ACCGGTCGAGTGCGCGGAAGCCGGCCGAA S2=GTCGTTCGGAATGCCGTTGCTCTGTAAA S3=GTCGTCGGAAGCCGGCCGAA این مساله تحت عنوان طولانی‌ترین زیر رشته مشترک longest-common-subsequence (LCS) نام‌برده می‌شود

99 و) طولانی‌ترین زیررشته مشترک
For example, if X=<A,B,C,B,D,A,B> and Y=<B,D,C,A,B,A>, the sequence <B,C,A> is a common subsequence of both X and Y. The sequence <B,C,A> is not a LCS of X and Y, however, since it has length 3 and the sequence <B,C,B,A>, which is also common to both X and Y, has length 4.

100 و) طولانی‌ترین زیررشته مشترک
In the longest-common-subsequence problem, we are given two sequences X=<x1,x2,…, xm> and Y=<y1,y2,…, yn> and wish to find a maximum length common subsequence of X and Y.

101 و) طولانی‌ترین زیررشته مشترک
In a brute-force approach: we would enumerate all subsequences of X and check each subsequence to see whether it is also a subsequence of Y, keeping track of the longest subsequence we find. Each subsequence of X corresponds to a subset of the indices{1,2,…,m}of X. Because X has 2m subsequences, this approach requires exponential time, making it impractical for long sequences.

102 و) طولانی‌ترین زیررشته مشترک
Principle of Optimality in LCS?

103 و) طولانی‌ترین زیررشته مشترک
The way that Theorem 15.1 characterizes longest common subsequences tells us that an LCS of two sequences contains within it an LCS of prefixes of the two sequences. Thus, the LCS problem has Principle of Optimality.

104 و) طولانی‌ترین زیررشته مشترک
Let us define c[i,j] be the length of an LCS of the sequences Xi and Yj. If either i=0 or j=0, one of the sequences has length 0, and so the LCS has length 0. The optimal substructure of the LCS problem gives the recursive formula

105 function [lcsValue,B]=LCS-LENGTH(X,Y) m=length(X);n=length(Y);
for i=1:m for j=1:n if X(i)==Y(i) C(i,j)=C(i-1,j-1)+1; B(i,j)='√'; else if C(i-1,j)>=C(i,j-1) %X(i) is not in LCS C(i,j)=C(i-1,j); B(i,j)='↑'; else C(i,j)=C(i,j-1); %Y(i) is not in LCS B(i,j)='←'; end lcsValue=C(m,n); function [lcsValue,B]=LCS-LENGTH(X,Y) m=length(X);n=length(Y); %It is assumed that index 0 is accepted in Matlab C=zeros(m,n);B=zeros(m,n); for i=1:m C(i,0)=0; end for j=1:n C(0,j)=0;

106 و) طولانی‌ترین زیررشته مشترک

107 و) طولانی‌ترین زیررشته مشترک
The B table returned by LCS-LENGTH enables us to quickly construct an LCS of X=<x1,x2,…, xm>and Y=<y1,y2,…,yn>. We simply begin at b(m,n) and trace through the table by following the arrows. Whenever we encounter a ‘√’ in entry B(i,j) , it implies that xi=yj is an element of the LCS

108 و) طولانی‌ترین زیررشته مشترک
function PRINT_LCS(B,i,j) global X; if (i==0) || (j==0) else if strcmp(B(i,j),' √ ') PRINT_LCS(B,i-1,j-1); disp(X(i)); else if strcmp(B(i,j),' ↑ ') PRINT_LCS(B,i-1,j); else PRINT_LCS(B,i,j-1); end

109 و) طولانی‌ترین زیررشته مشترک


Download ppt "برنامه نویسی پویا (Dynamic Programming)"

Similar presentations


Ads by Google