تالار گفتمان مانشت
طراحی الگوریتم - مرتبه زمانی - نسخه‌ی قابل چاپ

طراحی الگوریتم - مرتبه زمانی - kiantamar - 09 مهر ۱۳۹۱ ۰۷:۵۸ ب.ظ

وقتی پیچیدگی زمانی یک تابع رو با (T (n نمایش میدیم، منظورمون بدست آوردن مقدار تابع نیست، بلگه تعداد دفعات تکرار تابع هست.

خوب خالا سوال من اینه:
اگر تابع ما از پیچیدگی زمانی (T (n-1) X T (n-1 داشته باشه. منظور این هست که در هر Tn تابع ذوبار T n-1 خواهد بود یعنی تشکیل یک درخت دودویی کامل میده با مرتبه زمانی (O (2^n و یا منظور این هست که باید مقادیر (T (n-1 در T n-1 بشه؟

توی کتاب (مقسمی صفحه ۲۶) گفته شده (T (n-1) X T (n-1 داری پیچیدیگی زمانی (O (2^n هست. اگر اینطوره یعنی تفاوتی نمی کنه عملگر بین (T (n ها ضرب باشه یا جمع؟

چون برای (T (n-1) + T (n-1 هم پیچیدگی زمانی (O (2^n هست.

طراحی الگوریتم - مرتبه زمانی - parasto - 09 مهر ۱۳۹۱ ۱۱:۲۹ ب.ظ

منظور محاسبه تعداد جملات هستش،مثلا برای ضرب همون قد باید تعداد جملات رو محاسبه کرد که برای جمع باید محاسبه کرد،دیگه کاری به این که مقدارش چقد میشه نداریم.امیدوارم متوجه شده باشید

طراحی الگوریتم - مرتبه زمانی - مورتن - ۰۹ مهر ۱۳۹۱ ۱۱:۳۷ ب.ظ

نه عزیزم t(n-1) + t(n-1) میشه O(n)

RE: طراحی الگوریتم - مرتبه زمانی - m_sardaari - 10 مهر ۱۳۹۱ ۱۰:۲۷ ق.ظ

(T(N-1)+T(N-1 یعنی به ازای هر N . تابع T دوبار خودش را فراخوانی میکند پس برابر است با (۲T(N-1 و از مرتبه [tex]2^{\tfrac{N}{1}}[/tex]

ولی برای تابعی مثل (۲T(N-1 چون برای هر N رTیکبار خودش را فراخوانی میکند پس برابر است با( T(N-1 از مرتبه ( O(N

RE: طراحی الگوریتم - مرتبه زمانی - m_gh - 10 مهر ۱۳۹۱ ۰۵:۵۵ ب.ظ

(۱۰ مهر ۱۳۹۱ ۱۰:۲۷ ق.ظ)m_sardaari نوشته شده توسط:  (T(N-1)+T(N-1 یعنی به ازای هر N . تابع T دوبار خودش را فراخوانی میکند پس برابر است با (۲T(N-1 و از مرتبه [tex]2^{\tfrac{N}{1}}[/tex]

ولی برای تابعی مثل (۲T(N-1 چون برای هر N رTیکبار خودش را فراخوانی میکند پس برابر است با( T(N-1 از مرتبه ( O(N

من نمی فهمم اصلا مگه (T(N-1)+T(N-1 با (۲T(N-1 فرق داره ؟اگه درخت بازگشتی اش رو بکشیم که عین همن.مرتبه اش هم این نمی شه

RE: طراحی الگوریتم - مرتبه زمانی - ahp89 - 11 مهر ۱۳۹۱ ۱۲:۱۲ ق.ظ

(۰۹ مهر ۱۳۹۱ ۰۷:۵۸ ب.ظ)kiantamar نوشته شده توسط:  وقتی پیچیدگی زمانی یک تابع رو با (T (n نمایش میدیم، منظورمون بدست آوردن مقدار تابع نیست، بلگه تعداد دفعات تکرار تابع هست.

خوب خالا سوال من اینه:
اگر تابع ما از پیچیدگی زمانی (T (n-1) X T (n-1 داشته باشه. منظور این هست که در هر Tn تابع ذوبار T n-1 خواهد بود یعنی تشکیل یک درخت دودویی کامل میده با مرتبه زمانی (O (2^n و یا منظور این هست که باید مقادیر (T (n-1 در T n-1 بشه؟

توی کتاب (مقسمی صفحه ۲۶) گفته شده (T (n-1) X T (n-1 داری پیچیدیگی زمانی (O (2^n هست. اگر اینطوره یعنی تفاوتی نمی کنه عملگر بین (T (n ها ضرب باشه یا جمع؟

چون برای (T (n-1) + T (n-1 هم پیچیدگی زمانی (O (2^n هست.

به نظرم [tex]T(n)[/tex] یعنی زمان اجرای الگوریتم و نه تعداد دفعات تکرار ,مثلا[tex]T(n)=2T(n-1)[/tex] یعنی زمان اجرای [tex]T(n-1)[/tex] رو حساب کن در ۲ ضرب کن و همه میدونیم [tex]2T(n-1)=T(n-1) T(n-1)[/tex] و حاصل عبارت [tex]T(n-1)*T(n-1)[/tex] برابر [tex](T(n-1))^{2}[/tex] می شود و همونطور که میدونید [tex]T(n)=2T(n-1) 1[/tex] مسئله برج هانوی است که در کتاب های یوسفی و مقسمی با جایگذاری حل شده است ولی آیا [tex](T(n-1))^{2}[/tex] با جایگذاری قابل حله؟و یا با هر روش دیگه ای؟اگه کسی حل کرد لطفا حلشو بزاره.من هیچ مثالی برای ضرب دو عبارت زمان اجرای الگوریتم ندیم در کتاب CLRS.
اما ما همیشه عباراتی مثل [tex]T(n)=aT(n-b)[/tex] و یا [tex]T(n)=aT(\tfrac{n}{b})[/tex] داریم این دو فرمول هم در کتابها به این صورت پاسخ داده شدند که[tex]\theta (a^{\frac{n}{b}})[/tex] برای نوع اول و برای نوع دوم معمولا از قضیه master استفاده میشود.

RE: طراحی الگوریتم - مرتبه زمانی - m_sardaari - 11 مهر ۱۳۹۱ ۰۸:۴۸ ق.ظ

(۱۰ مهر ۱۳۹۱ ۰۵:۵۵ ب.ظ)m_gh نوشته شده توسط:  
(10 مهر ۱۳۹۱ ۱۰:۲۷ ق.ظ)m_sardaari نوشته شده توسط:  (T(N-1)+T(N-1 یعنی به ازای هر N . تابع T دوبار خودش را فراخوانی میکند پس برابر است با (۲T(N-1 و از مرتبه [tex]2^{\tfrac{N}{1}}[/tex]

ولی برای تابعی مثل (۲T(N-1 چون برای هر N رTیکبار خودش را فراخوانی میکند پس برابر است با( T(N-1 از مرتبه ( O(N

من نمی فهمم اصلا مگه (T(N-1)+T(N-1 با (۲T(N-1 فرق داره ؟اگه درخت بازگشتی اش رو بکشیم که عین همن.مرتبه اش هم این نمی شه

بله فرق داره (T(N-1)+T(N-1 همینطور که میبینید T دوبار فراخوانی شده یه یکبار برای هر کدام از T(N-1) ها پس کلا دوبار در هر فراخوانی t.

ولی (۲T(N-1 هر بار که بخوایم t رو فرواخوانی کنیم فقط یک بار فراخوانی میشه.شما نمیخواین مقدار رو محاسبه کنید فقط میخواید مرتبه رو حساب کنید پس معیار اینه که در هر فراخوانی ]چندبار تابع فراخوانی میشه و در چه زمانی.

مهم اینه که چطور و چند بار t خودشو رو فراخوانی کنه

RE: طراحی الگوریتم - مرتبه زمانی - m_gh - 11 مهر ۱۳۹۱ ۱۱:۰۲ ق.ظ

(۱۱ مهر ۱۳۹۱ ۰۸:۴۸ ق.ظ)m_sardaari نوشته شده توسط:  
(10 مهر ۱۳۹۱ ۰۵:۵۵ ب.ظ)m_gh نوشته شده توسط:  
(10 مهر ۱۳۹۱ ۱۰:۲۷ ق.ظ)m_sardaari نوشته شده توسط:  (T(N-1)+T(N-1 یعنی به ازای هر N . تابع T دوبار خودش را فراخوانی میکند پس برابر است با (۲T(N-1 و از مرتبه [tex]2^{\tfrac{N}{1}}[/tex]

ولی برای تابعی مثل (۲T(N-1 چون برای هر N رTیکبار خودش را فراخوانی میکند پس برابر است با( T(N-1 از مرتبه ( O(N

من نمی فهمم اصلا مگه (T(N-1)+T(N-1 با (۲T(N-1 فرق داره ؟اگه درخت بازگشتی اش رو بکشیم که عین همن.مرتبه اش هم این نمی شه

بله فرق داره (T(N-1)+T(N-1 همینطور که میبینید T دوبار فراخوانی شده یه یکبار برای هر کدام از T(N-1) ها پس کلا دوبار در هر فراخوانی t.

ولی (۲T(N-1 هر بار که بخوایم t رو فرواخوانی کنیم فقط یک بار فراخوانی میشه.شما نمیخواین مقدار رو محاسبه کنید فقط میخواید مرتبه رو حساب کنید پس معیار اینه که در هر فراخوانی ]چندبار تابع فراخوانی میشه و در چه زمانی.

مهم اینه که چطور و چند بار t خودشو رو فراخوانی کنه

درسته با هم فرق دارن .ولی هنوز نفهمیدم چه جوری (O (2^n می شه ؟اگه دوبارهم فراخوانی کنی با درخت بازگشتی می شه جمع چندتاn!؟

RE: طراحی الگوریتم - مرتبه زمانی - parasto - 11 مهر ۱۳۹۱ ۱۱:۵۷ ب.ظ

[tex]t(n)=2t(n-1)[/tex]

[tex]r-2=0[/tex]

[tex]r=2[/tex]

[tex]o(2^{n})[/tex]

طراحی الگوریتم - مرتبه زمانی - m_sardaari - 12 مهر ۱۳۹۱ ۰۱:۰۵ ب.ظ


دوستمون ahp89 راه حل این شکل توابع رو گفتن

طراحی الگوریتم - مرتبه زمانی - roofia - 29 مهر ۱۳۹۱ ۰۴:۳۴ ب.ظ

این معادله بازگشتی رو که مربو میشه به مرتب سازی ادغامی چه طوری باید اثباتش کنیم ؟
t(n)= 2t(n/2)+(n-1
(راهنماییش هم اینه:
n=2^k فرض کنیم.و بعد از یه سری محاسبات به این برسیم:
t(n)=O(nlog
)

RE: طراحی الگوریتم - مرتبه زمانی - Mänu - 29 مهر ۱۳۹۱ ۱۰:۴۶ ب.ظ

[tex]n=2^{k}\Rightarrow k=logn[/tex]

[tex]T(2^{K})=2T(2^{K-1}) 2^{K}-1[/tex]
[tex]T(K)=2T(K-1) 2^{K}-1[/tex]
حالا اینو حل میکنیم

[tex](k-2)^{_{2}}[/tex]
[tex]c_{1}2^{^{k}} c_{2}k2^{^{k}}[/tex]
:[tex]k=logn[/tex]حالا داشتیم[tex]c_{1}n^{log2} c_{2}logn*n[/tex]

طراحی الگوریتم - مرتبه زمانی - csharpisatechnology - 01 آبان ۱۳۹۱ ۰۵:۱۷ ق.ظ

(۰۹ مهر ۱۳۹۱ ۱۱:۳۷ ب.ظ)مورتن نوشته شده توسط:  نه عزیزم t(n-1) + t(n-1) میشه O(n)
دوست گرامی، اون t(n/2)+t(n/2) هست که میشه teta(n) که برحسب فرمول زیر بدست میاد:
[تصویر:  attachment.php?aid=7517]
ضمنا کتاب مقسمی بدرد نمی خوره و اشتباه زیاد داره ، اثبات غلط بودن یکبار فراخوانی و دوبار فراخوانی هم بعدا بحث می کنم اگه هم اشتباه کردم اقرار خواهم کرد.
اما توی کتاب CLRS حل مسائل آورده t_n=1 + t_n minus 1 + t_n minus 1 =1+ 2 t_n minus 1 =order_(2^n) minus 1
==
(T (n-1) X T (n-1 هم جوابش میشه order_n^2 که دوستمون بهش اشاره داشتن.
==
در کتاب هادی یوسفی(پوران) داریم :
t_n =2t(n/2)+n = (1+lgn)*n
و داریم:
(t_n=2t(n/2) +logn! =n*log^2(n
==
اگر کسی تا اینجای کار حرفامو قبول داره دکمه ی سپاس رو بزنه.