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

صفحه‌ها: ۱ ۲
زمان اجرای الگوریتم - shayesteb - 23 مرداد ۱۳۹۳ ۰۸:۱۹ ق.ظ

سلام دوستان

میشه توضیح بدید تریس مربوط به الگوریتم زیر چطوری میشه و زمان اجراش چقدر هست؟



[tex]sum\: \longleftarrow\: 1\: \: [/tex]
[tex]for\: \: \: i\longleftarrow1\: to\: n[/tex]
[tex]do\: for\: \: \: j\longleftarrow1\: to\: i^2[/tex]
[tex]do\: if\: \: j\: \mod\: i=0[/tex]
[tex]then\: for\: k\longleftarrow1\: to\: j[/tex]
[tex]do\: sum\: \longleftarrow\: sum\: 1[/tex]

RE: زمان اجرای الگوریتم - shayesteb - 23 مرداد ۱۳۹۳ ۰۵:۵۱ ب.ظ

(۲۳ مرداد ۱۳۹۳ ۰۸:۱۹ ق.ظ)shayesteb نوشته شده توسط:  سلام دوستان

میشه توضیح بدید تریس مربوط به الگوریتم زیر چطوری میشه و زمان اجراش چقدر هست؟



to n [tex]sum\: \longleftarrow\: 1\: \: [/tex]
[tex]for\: \: \: i\longleftarrow1\: to\: n[/tex]
[tex]do\: for\: \: \: j\longleftarrow1\: to\: i^2[/tex]
[tex]do\: if\: \: j\: \mod\: i=0[/tex]
[tex]then\: for\: k\longleftarrow1\: to\: j[/tex]
[tex]do\: sum\: \longleftarrow\: sum\: 1[/tex]

دوستان ممنون میشم اگه راهنمایی کنید Blush

RE: زمان اجرای الگوریتم - MiladCr7 - 23 مرداد ۱۳۹۳ ۰۶:۰۲ ب.ظ

میشه بگی خط اول چیکار میکنه؟

RE: زمان اجرای الگوریتم - shayesteb - 23 مرداد ۱۳۹۳ ۰۶:۲۱ ب.ظ

(۲۳ مرداد ۱۳۹۳ ۰۶:۰۲ ب.ظ)miladcr7 نوشته شده توسط:  میشه بگی خط اول چیکار میکنه؟

اشتباه شده بود . الان درست شد Smile. sum=1 قرار داده میشه.

RE: زمان اجرای الگوریتم - MiladCr7 - 23 مرداد ۱۳۹۳ ۰۷:۰۵ ب.ظ

زمان اجراشو نمیدونی که حداقل جوابامون رو باهاش چک کنیم ببینیم درسته یا نه؟

RE: زمان اجرای الگوریتم - shayesteb - 23 مرداد ۱۳۹۳ ۰۷:۲۲ ب.ظ

(۲۳ مرداد ۱۳۹۳ ۰۷:۰۵ ب.ظ)miladcr7 نوشته شده توسط:  زمان اجراشو نمیدونی که حداقل جوابامون رو باهاش چک کنیم ببینیم درسته یا نه؟

نه چیزی ازش نمیدونم . این سوال یکی از تمرینهای کتاب ساختمان قدسی. شما میدونید حل المسایل داره یا نه؟

RE: زمان اجرای الگوریتم - MiladCr7 - 23 مرداد ۱۳۹۳ ۰۸:۱۱ ب.ظ

داره فکر کنم.خودت حلش نکردی؟

RE: زمان اجرای الگوریتم - a.kam - 23 مرداد ۱۳۹۳ ۰۸:۲۹ ب.ظ

جواب دقیقش که میشه
[tex](3n 1)*C(n 2,3)/4[/tex]
اما اینکه از نظر مرتبه اجرا تقریبا برابر چی میشه را راحت میشه از روی تست ها انتخاب کرد Smile

RE: زمان اجرای الگوریتم - MiladCr7 - 23 مرداد ۱۳۹۳ ۰۸:۵۷ ب.ظ

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

RE: زمان اجرای الگوریتم - MiladCr7 - 23 مرداد ۱۳۹۳ ۰۹:۰۷ ب.ظ

پس حلقه K چی میشه؟

RE: زمان اجرای الگوریتم - shayesteb - 23 مرداد ۱۳۹۳ ۱۱:۱۹ ب.ظ

دوستان ممنون از اینکه راهنمایی کردین

پاسخش تتا n به توان ۴ هستش ( سوال ۴۴ فصل اول کتاب ۶۰۰ تست البته من هم نمیدونستم بعدا یکی از دوستان راهنمایی کردن Smile ) اگه هم کسی خواست بگه تا جواب را توضیح بدم.

(۲۳ مرداد ۱۳۹۳ ۰۸:۲۹ ب.ظ)a.kam نوشته شده توسط:  جواب دقیقش که میشه
[tex](3n 1)*C(n 2,3)/4[/tex]
اما اینکه از نظر مرتبه اجرا تقریبا برابر چی میشه را راحت میشه از روی تست ها انتخاب کرد Smile

دوست عزیز ممنونم

RE: زمان اجرای الگوریتم - MiladCr7 - 24 مرداد ۱۳۹۳ ۱۲:۳۹ ق.ظ

ای ول منم [tex]\theta(n^4)[/tex] رو به دست اوردم.ببخشید البته صبح حسابش کردم ولی خب شک داشتم دیگه نگفتم.ولی سوال خیلی جالبی بود.البته من از تریس کردن و تصاعد عددی به دستش اوردم.راه حل دیگه ای داره رو نمیدونمSmile

RE: زمان اجرای الگوریتم - shayesteb - 24 مرداد ۱۳۹۳ ۰۹:۱۸ ق.ظ

(۲۴ مرداد ۱۳۹۳ ۱۲:۳۹ ق.ظ)miladcr7 نوشته شده توسط:  ای ول منم [tex]\theta(n^4)[/tex] رو به دست اوردم.ببخشید البته صبح حسابش کردم ولی خب شک داشتم دیگه نگفتم.ولی سوال خیلی جالبی بود.البته من از تریس کردن و تصاعد عددی به دستش اوردم.راه حل دیگه ای داره رو نمیدونمSmile

بله از طریق تریس کردن به دست میاد. آفرین که جوابتون درست بوده Smile

RE: زمان اجرای الگوریتم - MiladCr7 - 24 مرداد ۱۳۹۳ ۰۹:۲۱ ق.ظ

(۲۴ مرداد ۱۳۹۳ ۰۹:۱۸ ق.ظ)shayesteb نوشته شده توسط:  
(24 مرداد ۱۳۹۳ ۱۲:۳۹ ق.ظ)miladcr7 نوشته شده توسط:  ای ول منم [tex]\theta(n^4)[/tex] رو به دست اوردم.ببخشید البته صبح حسابش کردم ولی خب شک داشتم دیگه نگفتم.ولی سوال خیلی جالبی بود.البته من از تریس کردن و تصاعد عددی به دستش اوردم.راه حل دیگه ای داره رو نمیدونمSmile

بله از طریق تریس کردن به دست میاد. آفرین که جوابتون درست بوده Smile

مرسی ممنون

RE: زمان اجرای الگوریتم - MiladCr7 - 24 مرداد ۱۳۹۳ ۱۲:۳۲ ب.ظ

ببین زمان اجرای حلقه دوم و سوم [tex]\lg(n)[/tex] نمیشه چون به ازای هر [tex]j[/tex] توی حلقه دوم مقدار [tex]k[/tex] توی حلقه سوم فرق داره درسته؟
یعنی وقتی [tex]j[/tex] مقدارش ۱ باشه حلقه سوم ۱ بار اجرا میشه و وقتی [tex]j=2[/tex] باشه حلقه سوم ۲ بار اجرا میشه و وقتی [tex]j=4[/tex] باشه حلقه سوم ۴ بار اجرا میشه پس لگاریتمی تغییر نمیکنه.
حالا این تریس رو داشته باش:

[tex]j=1\longrightarrow1[/tex]

[tex]j=2\longrightarrow2[/tex]

[tex]j=4\longrightarrow4[/tex]

[tex]j=8\longrightarrow8[/tex]

و همینطوری ادامه بده.حال قبول داری [tex]j[/tex] داره به صورت [tex]2^p[/tex] تغییر میکنه.p از صفر شروع میشه.حالا این اجرا تا چه وقتی
ادامه پیدا میکنه؟
تا وقتی که [tex]2^p<n[/tex] درسته؟یعنی وقتی که [tex]2^{p 1}>n[/tex] دیگه حلقه اجرا نمیشه.درسته؟
پس ما میتونیم یه تقریب بزنیم به این صورت که:[tex]2^{p}\cong n[/tex] درست؟
حالا مجموع زمان اجراها رو محاسبه میکنیم:
[tex]2^0 2^1 2^2 2^3 ... 2^p=\frac{2^{p 1}-1}{2-1}=2^{p 1}-1\cong n=\theta(n)[/tex]

حلقه اول هم که [tex]\lg(n)[/tex] پس زمان اجرای کل:[tex]n.\lg(n)[/tex]

اینجوری حلش کردم با تریس.یه عدد مثل ۴ رو در نظر گرفتم اینم از تریس:

[tex]i=1\rightarrow j=1\rightarrow1[/tex]:::::::یعنی به ازای [tex]i=1[/tex] و [tex]j=1[/tex] یه بار اجرا میشه

[tex]i=2\rightarrow j=2\rightarrow2[/tex]

[tex]i=2\rightarrow j=4\rightarrow4[/tex]

[tex]i=3\rightarrow j=3\rightarrow3[/tex]

[tex]i=3\rightarrow j=6\rightarrow6[/tex]

[tex]i=3\rightarrow j=9\rightarrow9[/tex]

[tex]i=4\rightarrow j=4\rightarrow4[/tex]

[tex]i=4\rightarrow j=8\rightarrow8[/tex]

[tex]i=4\rightarrow j=12\rightarrow12[/tex]

[tex]i=4\rightarrow j=16\rightarrow16[/tex]

برای بقیه عددها هم این ریتم هستش.حالا اگه به نحوه ی اجرا دقت کنی میبینی به ازای هر [tex]i[/tex] یه سری عددی داریم با جمله اول [tex]i[/tex] و جمله اخر [tex]i^2[/tex] و تعداد جملات و قدر نسبت هم [tex]i[/tex] هستش.خب مجموع سری حسابی رو که میدونیم چجوری به دست میاد خب حالا ما باید برای هر [tex]i[/tex] این مجموع رو به دست بیاریم که میشه:

[tex]\sum^n_{i=0}\frac{(i i^2)\ast i}{2}=\sum\frac{i^2}{2} \sum\frac{i^3}{2}=\theta(n^4)[/tex]

بفرمایید