۱
subtitle
ارسال: #۱
حل مسئله ی بازگشتی T(n)=T(n/2 + √n)+√۶۰۴۶
سلام.کسی میدونه که باید چجور پیچیدگی زمانی این مسئله ی بازگشتی رو بدست بیارم؟
T(n)=T(n2√n)√6046
T(n)=T(n2√n)√6046
(۲۸ آبان ۱۳۹۴ ۰۲:۲۷ ق.ظ)sixsixsix نوشته شده توسط: حالا جواب چی بوده؟متاسفانه جوابشو نمیدونم.یه تمرینه.هرچقد بهش فکر کردم،به ذهنم نرسید که چجور حلش کنم.
(۲۸ آبان ۱۳۹۴ ۰۲:۲۷ ق.ظ)sixsixsix نوشته شده توسط: T(n) < T(n/2 + n) + 80یه سوال داشتم.شما گفتین رشد ( T( n کوچکتر از رشد T(3n/2) + 80 هستش...ولی این T(3n/2) + 80 که اصلا قابل حل نیست.چون اینجور که ما n رو نمیشکنیم.هر بار بزرگترش میکنیم که.
پس
T(n) < T(3n/2) + 80
در نتیجه
T(n)=O(log n)
(۲۸ آبان ۱۳۹۴ ۰۴:۱۱ ق.ظ)IranianWizard نوشته شده توسط:(28 آبان ۱۳۹۴ ۰۲:۲۷ ق.ظ)sixsixsix نوشته شده توسط: حالا جواب چی بوده؟متاسفانه جوابشو نمیدونم.یه تمرینه.هرچقد بهش فکر کردم،به ذهنم نرسید که چجور حلش کنم.
خب اینجور شما یه حد بالا واسش تعریف کردین.ولی دقیقش که معلوم نیست
(۲۸ آبان ۱۳۹۴ ۰۲:۲۷ ق.ظ)sixsixsix نوشته شده توسط: T(n) < T(n/2 + n) + 80یه سوال داشتم.شما گفتین رشد ( T( n کوچکتر از رشد T(3n/2) + 80 هستش...ولی این T(3n/2) + 80 که اصلا قابل حل نیست.چون اینجور که ما n رو نمیشکنیم.هر بار بزرگترش میکنیم که.
پس
T(n) < T(3n/2) + 80
در نتیجه
T(n)=O(log n)
با قضیه مستر هم که قابل حل نیست.چون در aT(n/b) + c باید b بزرگتر از ۱ باشه،ولی اینجا b=2/3 هستش.
(۲۸ آبان ۱۳۹۴ ۰۳:۳۴ ب.ظ)amniat0101 نوشته شده توسط: برای این سوال نکته داریم :
T(n)=T(na)b,a>1⇒O(logan)
علاوه بر حل با نکته شما با توجه به رابطه ای که با هم ارزی ساخته شده می توانید از تغییر متغیر استفاده کنید و یک رابطه ی ناهمگن بسازید.
به این شکل که جمله ی 3n2k=1 را در نظر گرفته که ۱ شرط توقف می باشد. سپس مقدار k را از این رابطه بدست آورید که می شود :
k=log23n
سپس در معادله ی اصلی به جای مقداری ۳n قرار دهید 2k .
معادله به صورت مقابل میشود :
T(2k)=T(2k2)80=T(2k−1)80
سپس با تغییر متغیر :
tk=T(2k) در معادله ی فوق آن را به صورت :
tk=tk−180 بنویسید.
حال با توجه به روابط بازگشتی و حل آنها،این رابطه را که یک رابطه ی ناهمگن است حل کنید که به مرتبه ی زمانی ذکر شده در نکته خواهید رسید.
فکر کنم با درخت بازگشت هم قابل حل باشد
(۲۸ آبان ۱۳۹۴ ۰۳:۵۲ ب.ظ)sixsixsix نوشته شده توسط: آره شما درست میگید ولی درحالت کلی برای nهای بزرگ sqrt(n) < n/a هست که a عددی ثابت هست.
یعنی شما میتونید یه a دلخواه در نظر بگیرید که مقدار T(bn/c) جوری بدست بیاد که b/c <1 بشه و باز هم جواب logn هست. حالا مبناش خیلی فرق نمیکنه
امیدوارم منظورم رو متوجه شده باشید
(۲۸ آبان ۱۳۹۴ ۰۸:۲۹ ب.ظ)amniat0101 نوشته شده توسط: بله حق با شماست بنده اشتباه کردم :خیلی ممنونم از وقتی که میذارید.
ولی فکر کنم این راه حل درست باشد :
T(n)=3T(n2)80
در رابطه ی بالا اگر به روش جایگذاری و تکرار عمل کنیم میرسیم به چنین رابطه ای :
3kT(n2k)
حال داریم :
n2k=1⇒n=2k,k=log2n3kT(1)=3log2n
حال به جای n ها قرار میدهیم : n=2k
که به این رابطه میرسیم :
T(2k)=3log22kT(2k2)80⇒T(2k)=2klog23T(2k−1)80
حال اگر log23≈1 و فکر کنم با توجه به اینکه تمرکز ما بیشتر بر روی مقدار k است این درست باشد.داریم :
T(2k)=2kT(2k−1)80
حال با تغییر متغیر : tk=2k
داریم :
tk=tk(tk−1)80⇒tk−tk×tk−1=80⇒tk(1−tk−1)=80⇒k(1−k)=80
حال برای حل رابطه ی ناهمگن بالا داریم : مقدار چند جمله ای ما عدد ثابت ۸۰ هست که از درجه ی صفر می باشد.(البته در بالا دقت نمایید که برای حل روابط بازگشتی ناهمگن ما میتوانیم قسمت همگن را با برابر قرار دادن صفر محاسبه کنیم که از همانجا یک ریشه ی k=0 بدست می آید و نادیده گرفته میشود)
نهایتا به این میرسیم که : (k−1)2=0
که ریشه ی تعدد ۲ دارد:
حال در آخر سر داریم :
tk=c1(1)nc2k(1)n
با جایگذاری k=log2n
و به دست آوردن مقادیر C ها میتوان به پیچیدگی log2n رسید
امیدوارم درست باشد