برنامه‌نویسی پویا: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
FreshmanBot (بحث | مشارکت‌ها)
جز اصلاح فاصله مجازی + اصلاح نویسه با استفاده از AWB
خط ۳:
 
== تاریخچه ==
این روش در سال ۱۹۵۳ توسط ریاضی‌دانی به نام [[ریچارد بلمن]] معرفی شد. برنامهریزِی پویا در ریاضی و علوم رایانه روشی شناخته شده‌است که از آن در نوشتن الگوریتم‌های بهینه با استفاده از حذف اجرای چند بارهٔ یک زیر مسئله یکسان استفاده می‌شود. تعریف برنامه ریزِی پویا در ریاضی و علوم رایانه متفاوت است. نشان داده شده‌است که روش علوم رایانه ایرایانه‌ای برای برنامه ریزِی پویا کارایی بالاتری دارد زیرا محاسبات تکراری را حذف می‌کند در حالی که در روش ریاضی برنامه ریزِی پویا امکان کاهش فضای حافظه بیشتر است.
 
برنامه ریزِی پویا شبیه روش تقسیم و حل مسائل را با استفاده از ترکیب کردن جواب زیرمسأله‌ها حل می‌کند. [[الگوریتم تقسیم و حل]]، مسئله را به زیر مسئله‌های مستقل تقسیم می‌کند و پس از حل زیر مسئله‌ها به صورت بازگشتی،نتایج را با هم ترکیب کرده و جواب مسألهاصلی را بدست می‌آورد. به عبارت دقیق تر، برنامه ریزِی پویا در مواردی قابلاستفاده است که زیرمسأله‌ها مستقل نیستند؛ یعنی زمانی که زیرمسأله‌ها دارای زیر-زیر مسئله‌های یکسان هستند. دراین حالت روش تقسیم و حل با اجرای مکرر زیرمسأله‌های یکسان، بیشتر از میزان لازم محاسبات انجام می‌دهد. یکالگوریتم برنامه ریزِی پویا زیرمسأله‌ها را یک بار حل و جواب آنهاآن‌ها را در یک جدول ذخیره می‌کند و با این کار از تکراراجرای زیرمسأله‌ها در زمانی که مجددًا به جواب آنهاآن‌ها نیاز است جلوگیری می‌کند.
 
== ویژگی‌ها ==
خط ۱۶:
حل بهینه، سومین مرحله از بسط یک الگوریتم [[برنامه‌نویسی]] پویا برای مسائل [[بهینه‌سازی]] است. مراحل بسط چنین الگوریتمی به شرح زیر است:
 
# ارائه یک ویژگی بازگشتی که حل بهینهٔ نمونه اینمونه‌ای از مسئله را به دست می‌دهد.
# محاسبه مقدار حل بهینه به شیوهی جزء به کل.
# بنا کردن یک حل نمونه به شیوهی جزء به کل.
خط ۲۳:
اصل بهینگی در یک مسئله صدق می‌کند اگر یک حل بهینه برای نمونهای از مسئله، همواره حاوی حل بهینه برای همهی زیر نمونه‌ها باشد
 
در روش برنامه‌نویسی پویا اغلب از یک آرایه برای ذخیره نتایج جهت استفاده مجدد استفاده شده، و زیرمسائل به صورت جزء به کل حل می‌شوند. در مورد این مسئله، ابتدا زیرمسائلی که تنها از دو ماتریس تشکیل شده‌اند محاسبه می‌شوند. سپس زیرمسائلی که از سه ماتریس تشکیل شده‌اند محاسبه می‌شوند. این دسته از زیرمسائل به زیرمسائلی متشکل از دو ماتریس تجزیه می‌شوند که قبلاً محاسبات آنهاآن‌ها صورت گرفته، و نتایج آنهاآن‌ها در آرایه ذخیره شده‌اند. در نتیجه نیاز به محاسبه مجدد آنهاآن‌ها نیست. به همین ترتیب در مرحله بعد زیرمسائل با چهار ماتریس محاسبه می‌شوند، و الی آخر.
 
درختهای جستوجوی دودویی بهینه
خط ۱۱۰:
ایده‌ای که در فرای روش برنامه‌نویسی پویا نهفته‌است جلوگیری از انجام این محاسبات تکراری است و روشی که معمولاً برای این عمل بکارگرفته می‌شود استفاده از جدولی برای نگهداری نتایج حاصل از حل زیرمسائل است. در این صورت اگر [[الگوریتم]] به زیرمسئله‌ای برخورد کرد که پیش از این [[حل شده]] است، بجای حل مجدد آن، نتیجه محاسبه قبلی را از جدول برداشته و کار را با زیرمسئله بعدی دنبال می‌کند.
 
روش برنامه‌نویسی پویا یک روش پایین به بالا است به این معنی که از حل مسائل کوچکتر به حل مسائل بزرگتر می‌رسیم. در حالیکه از نظر ساختاری روش تقسیم و غلبه روشی است از بالا به پایین، یعنی بطور منطقی (نه عملی) پردازش از مسئله اولیه آغاز شده و بسمتبه سمت پایین و حل مسائل کوچکتر به پیش می‌رود.
 
== الگوریتم ضریب دو جمله ایجمله‌ای با استفاده از برنامه‌ریزی پویا ==
'''ورودی‌ها :''' اعداد صحیح و مثبت n و k که در آن k ≤ n است.
 
'''خروجی‌ها :''' bin2 ضریب دو جمله ایجمله‌ای (n¦k)
 
(int''' bin2 ('''int''' n , '''int''' k'''