• هیچ محصولی در سبد خرید نیست.

برنامه نویسی داینامیک چیست؟

برنامه نویسی داینامیک چیست؟

برنامه نویسی داینامیک راهی برای کارآمد تر کردن الگوریتم ها با ذخیره کردن یک سری از نتایج است . و زمانی که شما الگوریتم هایی دارید که محاسبات تکراری زیادی را انجام می دهد به خوبی عمل می کند و دیگر نیازی به این موضوع که الگوریتم هایتان را چندین بار، دوباره و دوباره، محاسبه کنید ندارید و از بار اضافه ای که روی برنامه می گذارد جلو گیری می کند.

برنامه نویسی داینامیک یک تکنیک قدرتمند است که امکان حل برخی از مشکلات را به طور چشمگیر و موثرتر از یک راه حل بازگشتی معمول ممکن می سازد. این متود به نوعی زمان را معامله می کند، به جای محاسبه حالات مختلف راه حل (وقت زیادی می گیرد ولی هیچ فضایی نمیگیرد) ، ما فضای مورد نیاز را برای ذخیره راه حل های همه مسائل فرعی در نظر می گیریم تا بعدا وقت خود را صرفه جویی کنیم که به این یادآوری گفته می شود.

این موضوع را با استفاده از مثال کلاسیک فیبوناچی باز می کنیم:

اگر با مبحث اعداد فیبوناچی آشنایی ندارید بگذارید این موضوع را اینطوری براتون توضیح بدهم:

همانطور که در عکس بالا میبینید دنباله اعداد فیبوناچی اعدادی هستند که از جمع دوعدد قبلی بدست میایند ، ابتدا دو عدد ۱ داریم که مجموع آنها برابر با ۲ است و به همین ترتیب و حال دو عدد بعدی که ۱ و ۲ هستند را با هم جمع می کنیم که حاصل ۳ می شود و این دنباله تا بی نهایت ادامه دارد.( این معادله را معادله فیبوناچی می گویند)

حال در شکل زیر معادله ای که برای این دنباله هست را مشاهده میکنید. که آن را (fib(n و n برابر است با مرتبه آن عدد به طور مثال در شکل زیر (fib(6 از مجموعه (fib(5 و (fib(6 به دست آمده، یا در مثالی که بالا گفته شد ، (fib(4 که همان عدد ۳ است از مجموعه (fib(3 و (fib(2 حاصل شده است.

برنامه نویسی داینامیک

حال می خواهیم با استفاده از دنباله اعداد فیبوناچی برنامه نویسی داینامیک را آموزش بدهیم.

سه قدم کلی برای برنامه نویسی داینامیک وجود دارد:

  1. بازگشتی (Recursion)
  2. ذخیره سازی(store)
  3. Bottom-Up

بازگشتی (Recursion)

  • بازگشتی از محاسبه معادله ای که قبلا انجام شده جلو گیری میکند.

به این طریق که وقتی یک معادله انجام می شود در بخش ذخیره سازی یا store ، ذخیره می شود و زمانی که صدا زده می شود دیگه نیازی به محاسبه مجدد نیست. به نحوی وقتی برنامه ای بدون استفاده از dynamic programming نوشته می شود هیچ فضایی گرفته نمی شود اما با استفاده از dynamic programming فضایی برای سرعت بخشیدن به برنامه ایجاد می شود که مقادیر memoize می شود( با memorize اشتباه نگیرید) به معنای یادآوری.

زمانی که (fib(3 یک بار برای (fib(4 محاسبه میشود دیگر برای (fib(5 محاسبه نمیشود و memoize می شود.

ذخیره سازی

  • ذخیره سازی همان فضایی است که برای نگه داشتن معادله های محاسبه شده از آن استفاده می کنیم.(برای memoize کردن)

Bottom-Up

یک روش سریع تر از store یا ذخیره سازیست که با استفاده از آرایه ها انجام می شود.

به این صورت که برنامه ها در آرایه ها ذخیره می شوند و زمان نیاز صدا زده می شوند و باعث جلو گیری از بار اضافه در برنامه می شوند به نوعی شبیه به store است اما با این تفاوت که همه این ها در یک آرایه ذخیره می شود و نیاز به چند آرایه نیست. همچنین تا مقدار بیشتری میتواند پیشروی کند.

این مقاله ها را نیز مطلعه کنید : Reinforcement learning چیست؟ و Dynamic Programing

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

درباره ما

پایتونی/تیم توسعه زبان برنامه نویسی پایتون ، اولین ارایه دهنده خدمات هوش مصنوعی بر بستری ابری ایران می باشد . هدف اصلی پایتونی ها ساخت یک جامعه از توسعه دهندگان به روز ترین و کاربردی ترین زبان برنامه نویسی دنیا در ایران است .

 

logo-samandehi

[form to=”[email protected]” subject=”Subject”] [form_element type=”text” validate=”email” options=”” placeholder=”ایمیل”] [form_element type=”submit” validate=”” options=”” placeholder=”ارسال”] [/form]

 

 

X