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

سوال طراحی الگوریتم - علوم کامپیوتر ۸۴ - MSZ - 29 تیر ۱۳۹۱ ۰۱:۱۵ ب.ظ

سلام
سوال ۹۵ فصل اول کتاب طراحی الگوریتم پوران رو میشه یکی برا من توضیح بده که چطور گزینه ۲ شده؟
من فکر میکنم باید گزینه ۳ باشه، جواب تشریحی هم نداره برا همین نمیدونم که قضیه چیه!!!

ممنون میشم اگر کمکم کنین

پ.ن: این سوال، یکی از سوالات علوم کامپیوتر سال ۸۴ بوده

سوال طراحی الگوریتم - علوم کامپیوتر ۸۴ - mfXpert - 29 تیر ۱۳۹۱ ۰۹:۱۴ ب.ظ

صورت سوال رو اگر می تونید بذارید

سوال طراحی الگوریتم - علوم کامپیوتر ۸۴ - MSZ - 30 تیر ۱۳۹۱ ۱۲:۳۶ ق.ظ

صورت سوال پر از الگوریتم و کد و مرتبه و اینجور چیزاست!
اگر امکانش باشه، برای اینکه اشتباه تایپی هم ایجاد نشه از روی کتاب بخونین و جواب بدین خیلی ممنون میشم

سوال طراحی الگوریتم - علوم کامپیوتر ۸۴ - mfXpert - 30 تیر ۱۳۹۱ ۱۱:۵۵ ق.ظ

(۳۰ تیر ۱۳۹۱ ۱۲:۳۶ ق.ظ)MSZ نوشته شده توسط:  صورت سوال پر از الگوریتم و کد و مرتبه و اینجور چیزاست!
اگر امکانش باشه، برای اینکه اشتباه تایپی هم ایجاد نشه از روی کتاب بخونین و جواب بدین خیلی ممنون میشم
خوب اگه کتاب رو داشتم دیگه نمیگفتم صورت سوال رو بذاری که.

پ.ن : عکس بگیر برادر، تایپ نکن

RE: سوال طراحی الگوریتم - علوم کامپیوتر ۸۴ - MSZ - 10 مرداد ۱۳۹۱ ۱۱:۲۴ ب.ظ

عکس روی سوال رو آپلود کردم.

RE: سوال طراحی الگوریتم - علوم کامپیوتر ۸۴ - GCC - 13 مرداد ۱۳۹۱ ۰۱:۴۸ ق.ظ

به نظرم گزینه ۳ درست باشه. یکم کدش پیچیدست.
من اینطوری حلش کردم. نمیدونم درسته یا نه؟
برای اینکه بدترین حالت اتفاق بیفته باید حلقه while بیشترین تکرارو داشته باشه و موقعی این اتفاق میفته که نه break دوم اجرا بشه و نه دستور c++
اگه فرض کنیم همه عناصر آرایه مشابه باشن، در اینصورت حتما این دو حالت رخ میده. در اینصورت میشه به جز دو دستور
c=2p+1 و p=c بقیه دستورهای تخصیص رو حذف کرد. چون دیگه تاثیری در تعداد اجرا ندارن.
بنابراین تعداد دفعات اجرای while وابسته به مقدار c میشه که داره از ۱ شروع میشه و هربار دوبرابر. یعنی تا logn حداکثر بیشتر نمیره.
بطور دقیقتر میشه با یه آرایه ۱۶ تایی که همه خونه هاش مساوین امتحان کرد:
به ازای i=15,14,...,8 حلقه while چهار بار اجرا میشه. یعنی ۱۶/۲ بار به تعداد log16 (سقف)
به ازای i=7,6,5,4 حلقه while سه بار اجرا میشه. یعنی ۱۶/۴ بار به تعداد log16-1
به ازای i=3,2 حلقه while دو بار اجرا میشه یا ۱۶/۸ بار به تعداد log16-2
و به ازای i=1 حلقه یکبار اجرا میشه یا ۱۶/۱۶ بار به تعداد log16-3

به طور کلی میشه:
[tex]\frac{n}{2}[log n] \frac{n}{2^{2}}[logn-1] \frac{n}{2^{3}}[logn-2] ... \frac{n}{2^{k}}[logn-(k-1)]\\ =n[\frac{1}{2}logn (\frac{1}{2^{2}}logn-\frac{1}{2^{2}}) (\frac{1}{2^{3}}logn-\frac{2}{2^{3}}) ... (\frac{1}{2^{k}}logn-\frac{k-1}{2^{k}})]\\ =n.logn(\frac{1}{2} \frac{1}{2^{2}} ... \frac{1}{2^{k}})-n[\sum_{i=1}^{k}\frac{i-1}{2^{i}}][/tex]

که k=logn و قسمت اول خط آخر میشه [tex]O(nlogn)[/tex] و قسمت دوم هم از [tex]O(n)[/tex]
(جواب اون سیگما میشه [tex]1-\frac{logn 1}{n-1}[/tex])
که جمعش میشه گزینه ۳