dynammic programming یا برنامه نویسی پویا یعنی چی ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

dynammic programming یا برنامه نویسی پویا یعنی چی ؟

+1 امتیاز

سلام دوستان این dynammic programming چیه ؟  من 3 روز دیگه امتحان دارم هر چی میخونمش نمی فهمم !blush

سوال شده دی 23, 1392  بوسیله ی PSPCoder (امتیاز 1,301)   14 40 57
دوباره تگ گذاری شد اردیبهشت 6, 1393 بوسیله ی BlueBlade

2 پاسخ

+5 امتیاز
 
بهترین پاسخ

در برنامه نویسی پویا وقتی چند زیرمسئله نتیجه یکسانی دارن لازم نیست که همشون رو حساب کنیم. فقط یکیش رو حساب میکنیم و تو بقیه از اون استفاده میکنیم.

مثلا تو دنباله فیبوناچی برای حساب کردن جمله 7 به جملات 5 و 6 نیاز داریم و برای حساب کردن جملات 5 و 6 تو هرکدوم نیاز داریم که جمله 4 رو حساب کنیم. در روش پویا فقط یک بار جمله چهارم حساب میشه و دفعات بعد دیگه محاسبه نمیشه بلکه از مقدارش که توی حافظه ذخیره شده استفاده میشه.

من که اینقدر میدونم smiley

پاسخ داده شده دی 23, 1392 بوسیله ی Bad Programmer (امتیاز 250)   2 3 11
انتخاب شد دی 25, 1392 بوسیله ی PSPCoder
تشکر به خاطر پاسخ کاملتون .
+4 امتیاز

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

کد اول که بهینه نیست :

#include <iostream>
using namespace std ;
unsigned long long F(int a)
{
    if ( a == 0 )
        return 0 ;
    if( a == 1 )
        return 1 ;
    else
        return F(a-1) + F(a-2) ;
}
int main()
{
    for ( int i = 0 ; i <= 90 ; i++ )
        cout << i << " : " << F(i) << endl ;
}

و کد دوم که بهینه تر هست :

#include <iostream>
#include <vector>
using namespace std ;
vector <unsigned long long> v ;
unsigned long long F(int a)
{
    if ( a < v.size() )
        return v[a] ;
    unsigned long long z = F(a-1)+F(a-2) ;
    v.push_back(z);
    return z ;
}
int main()
{
    v.push_back(0) ;
    v.push_back(1) ;
    for ( int i = 0 ; i <= 90 ; i++ )
        cout << i << " : " << F(i) << endl ;
}

پیشاپیش عذر میخوام اگه مشکلی هست و اشتباهی دارم

پاسخ داده شده دی 23, 1392 بوسیله ی Elyas74 (امتیاز 1,144)   6 14 27
ممنون مثالتون خیلی کمک کرد .
...