تالار گفتمان مانشت
بدست آوردن مرتبه این تابع بازگشتی...؟ - نسخه‌ی قابل چاپ

بدست آوردن مرتبه این تابع بازگشتی...؟ - sos006 - 23 دى ۱۳۸۹ ۰۲:۴۱ ق.ظ

با سلام.
مرتبه زمانی این تابع چنده؟
کد:
int F(N)
{
if (N<3) return 1;
return F (n-3)  -  F (n-2)  +  F (n-1);
}
با تشکر فراوان از همه دوستان عزیز...

RE: بدست آوردن مرتبه این تابع بازگشتی...؟ - حامد - ۲۴ دى ۱۳۸۹ ۰۱:۳۱ ق.ظ

بدلیل اینکه الگوریتم بازگشتی تابع در صورت سوال عنوان شده است در ابتدا باید رابطه‌ی بازگشتی تابع را بنویسیم که خواهیم داشت:

[tex]T(n)= T(n-3) T(n-2) T(n-1) 1[/tex]
که از راه تقریب می توان گفت که مرتبه‌ی آن نمایی خواهد شد.حدودا [tex]O(3^n)[/tex]
اشتباهی که بسیار رایج نیز می باشد این است که بنویسید:

[tex]T(n)= T(n-3) - T(n-2) T(n-1)[/tex]
بعد معادله مشخصه رو بنویسید.ریشه‌ها برابرند با -۱ و ۱ که -۱ ریشه مضاعف میباشد.در نتیجه بگویید مرتبه‌ی تابع میشه [tex]O(n)[/tex].

RE: بدست آوردن مرتبه این تابع بازگشتی...؟ - sos006 - 24 دى ۱۳۸۹ ۱۲:۰۵ ب.ظ

(۲۴ دى ۱۳۸۹ ۰۱:۳۱ ق.ظ)حامد نوشته شده توسط:  که از راه تقریب می توان گفت که مرتبه‌ی آن نمایی خواهد شد
منظورتون ا این چمله ای که فرمودین چه روشی هستش؟لطف میکنید توضیحش بدین؟

RE: بدست آوردن مرتبه این تابع بازگشتی...؟ - حامد - ۲۴ دى ۱۳۸۹ ۱۲:۳۰ ب.ظ

(۲۴ دى ۱۳۸۹ ۱۲:۰۵ ب.ظ)sos006 نوشته شده توسط:  
(24 دى ۱۳۸۹ ۰۱:۳۱ ق.ظ)حامد نوشته شده توسط:  که از راه تقریب می توان گفت که مرتبه‌ی آن نمایی خواهد شد
منظورتون ا این چمله ای که فرمودین چه روشی هستش؟لطف میکنید توضیحش بدین؟
میدانیم که:
[tex]T(n-2)\leq T(n-1)[/tex]
[tex]T(n-3)\leq T(n-1)[/tex]
پس:
[tex]T(n)\leq T(n-1) T(n-1) T(n-1) 1\leq3T(n-1) 1[/tex]
بصورت بازگشتی که جایگذاری کنید خواهید داشت:
[tex]T(n)\leq 3^n \Rightarrow T(n)=O(3^n)[/tex]