درس ششم - برنامه نویسی پویا PDF
Document Details
Uploaded by Deleted User
دانشگاه آزاد اسلامی واحد تهران مرکزی
Takbiri
Tags
Summary
این جزوه آموزشی به مباحث برنامهنویسی پویا در الگوریتمها میپردازد. این جزوه به بررسی و توضیح ویژگیها، انواع کاربردها، و مثالهای برنامهنویسی پویا میپردازد.
Full Transcript
به نام آنکه جان را فکرت آموخت مباحثی در الگوريتمها Topics in Algorithms درس ششم :برنامه نویسی پویا Dynamic Programming 1 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri برنامه نویسی...
به نام آنکه جان را فکرت آموخت مباحثی در الگوريتمها Topics in Algorithms درس ششم :برنامه نویسی پویا Dynamic Programming 1 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri برنامه نویسی پویا ()Dynamic Programming در برنامه نویسی پویا ،معموال از یک آرایه یا یک جدول استفاده ◼ میشود ،بدین صورت که یک نمونه به نمونه های کوچکتر تقسیم می شود ،مشابه روش تقسیم و حل است ولی در این روش ،نخست نمونه های کوچکتر را حل می کنیم ،سپس نتایج را ذخیره می کنیم و هر زمان به یکی از آن ها نیاز پیدا شد ،به جای محاسبه دوباره کافی است آن را بازیابی کنیم. 2 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri مراحل بسط یک الگوریتم برنامه نویسی پویا -1ارائه یک ویژگی بازگشتی برای حل نمونه ای از مسئله . -2حل نمونه ای از مسئله به شیوه جزء به کل با حل نمونه های کوچک تر. نکته :هر مسئله بهینهسازی را با استفاده از برنامهنویسی پویا نمی توان حل نمود بهینه بودن باید در مسئله صدق بکند بهینگی در یک مسئله صدق میکند اگر یک حل بهینه برای نمونه مسئله همواره حاوی حل بهینه برای همه زیر نمونهها باشد. 3 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri ویژگی های برنامه نویسی پویا مسئله معموال بهینه (مینیمم یا ماکزیمم) ا ست. ◼ برای حل مسئله باید زیر مسائل نیز بهینه حل شوند. ◼ حل به روش استقرائی و تقسیم وحل موجب حل تکراری ◼ یک زیر مسئله دلخواه خواهد شد. 4 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri الگوریتم هایی که بااستفاده از برنامه نویسی پویا حل می شوند دنبالهفیبوناچی ◼ ضریبدوجملهای ◼ ضربزنجیرهایماتریسها ◼ درختهایجستجویدودوئیبهینه ◼ کولهپشتیصفرویک ◼ فلوید ◼ فروشندهدورهگرد ◼ 5 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri الگوریتم بازگشتی محاسبه دنباله فیبوناچی 6 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri تعداد جمالت محاسبه شده توسط الگوریتم بازگشتی فیبوناچی برای جمله nام بزرگتر از2n/2 تعداد جمالت محاسبه شده توسط این الگوریتم خوب نیست ،برابر 2n/2 } 7 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri بهبود الگوریتم بازگشتی فیبوناچی که مرتبه آن 2n/2می باشد را می خواهیم به خطی تبدیل کنیم 3+5+1=9 5+9+1=15 9+15+1=25 تعداد جمالت محاسبه شده توسط این الگوریتم خوب نیست 2n/2 𝟏K 𝒏 =𝑲 𝐧−𝟏 +𝐤 𝐧−𝟐 + 8 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri الگوریتم محاسبه جمله nام فیبوناچی با استفاده از برنامه نويسی پويا معموال از یک آرایه یا یک جدول استفاده میکنیم ،سپس نتایج را ذخیره می کنیم و هر زمان به یکی از آن ها نیاز پیدا شد ،به جای محاسبه دوباره کافی است آن را بازیابی کنیم. توسط الگوریتم بازگشتی فیبوناچی برای جمله nام بزرگتر از2n/2 و الگوریتم تکرار محاسبه جمله nام فیبوناچی با استفاده از برنامه نویسی پویا از مرتبه خطی )O(n 9 مباحثی در الگوریتم ها -درس ششم – برنامه نویسی پویا By:Takbiri الگوریتم ترکیب و تحلیل پیچیدگی زمانی برای تعداد عملیات جمع )Combination (n,m الگوریتم عملیات ترکیب در آمار و ریاضی { )If (n==m||m==0 ترکیب با 𝑛−1 𝑛−1 ;return 1 استفاده از تقسیم و حل از + از Else 𝑚 ;)return combination(n-1,m-1)+combination(n-1,m 𝑚−1 } T(n-m,m-1)+T(n-1,m)+1 0