ورود ثبت‌نام راهنما درباره‌ی کاهو
پرسش‌ها برچسب‌ها کاربر‌ها سوال بپرسید!

آمار پرسش:

  • پرسیده شده: 2014-05-10 11:04:47 -0500
  • مشاهده شده: 382 بار
  • بروز شده: 2014-06-04 01:30:22 -0500

پرسش‌های مشابه:

یافتن کوچکترین پیچ و مهره با مقایسه آنها

مسئله تالار ها -سوال مرحله ۲

سوال ۱ روز دوم مرحله ۲ دوره ۲۳: رشته‌ی نزدیک

بازی رنگی - سوال ۱ - مرحله ۲ - ۱۳۹۳

وزنه‌ها و ماشین جادویی - سوال ۲ - مرحله ۲ - ۱۳۹۳

گاوی خسیس - سوال ۳ - مرحله ۲ - ۱۳۹۳

انتقال مهره‌های گاوی - سوال ۴ - مرحله ۲ - ۱۳۹۳

آشپزباشی:‌ مرتب کردن پشته با برعکس کردن یک دنباله متوالی از ابتدای آن

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

الگوریتم محاسبه لگاریتم-سوال مسابقه دانش آموزی صنعتی شریف

نکاتی در مورد نوشتن پاسخ:

در این قسمت می‌تونی به یک پرسش پاسخ بدی. اگه می‌خوای در مورد پرسش بحث و اظهار نظر کنی از قسمت «ثبت نظر» استفاده کن.
پاسخت رو دقیق و کامل بنویس، از عکس استفاده کن و اگه لازمه به منابع (کتاب یا سایت) ارجاع بده.
اگه پرسش یا پاسخ‌ها مفید هستند حتما بهشون رای بده تا پرسش‌ها و پاسخ‌های خوب مشخص بشن.

استفاده از ویرایشگر:

توی قسمت پیش‌نمایش می‌تونی ببینی متنی که نوشتی چجوری روی سایت دیده میشه.
خیلی مهم: برای اینکه به خط بعد بری باید دوتا Enter بزنی.
می‌تونی از تگ‌های معمولی و ساده‌ی html هم استفاده کنی.
با دکمه‌هایی که بالای ویرایش‌گر قرار دارند کلی کار می‌شه کرد. از عکس‌گذاشتن بگیر تا لیست شماره‌دار. حتما امتحان‌شون کن.

علائم ریاضی:

برای نوشتن علائم ریاضی می‌تونی از Mathjax استفاده کنی. راهنمای Mathjax رو از سایت math.stackexchange بخون.
برای نوشتن عبارت ریاضی وسط جمله، اون عبارت رو بین دوتا $ قرار بده.
برای نوشتن عبارت ریاضی تو یه خط جدید اون رو بین دوتا $$ قرار بده.

دنباله و جادوگر - دوره ی 24 - مرحله ی 2

2

صورت سوال:

دنباله ی $\langle a_1,a_2,...,a_{1392}\rangle$ شامل 1392 عدد متمایز داده شده است. یک جادوگر قادر است در یک چشم بر هم زدن 696 عدد متوالی از این دنباله را به طور صعودی مرتب کرده و بر روی مکان های همان 696 عدد از کوچک به بزرگ (صعودی) بگذارد. می خواهیم با تعدادی درخواست از جادوگر اعداد را از کوچک به بزرگ مرتب کنیم. هر درخواست بدین شکل است که از جادوگر می خواهیم از عدد $i$ ام تا عدد $i+695$ام که در مجموع 696 عدد می شوند را مرتب کند (عدد $i$ می تواند حداقل 1 و حداکثر967 باشد). با حداقل چندبار درخواست از جادوگر می توان اعضای دنباله را مرتب کرد؟

گزینه ها(کد دفترچه: 1):

1) 3 $\qquad \qquad$ 2) 1392 $\qquad \qquad$ 3) 6 $\qquad \qquad$ 4) $\lceil log_2 1392 \rceil$ $\qquad \qquad$ 5) 4

گزینه ها(کد دفترچه: 2):

1) $\lceil log_2 1392 \rceil$ $\qquad \qquad$ 2) 6 $\qquad \qquad$ 3) 3 $\qquad \qquad$ 4) 4 $\qquad \qquad$ 5) 1392

مرحله۲ الگوریتم
2014-05-10 11:04:47 -0500
المپیادی 984 ● 11 ● 16 ● 27
پاک‌کردن   ویرایش سوال
نظرات

خب این سوال که تو سایت کمیته با جواب تشریحی هست!!! واسه چی الکی میزارین!

2014-06-04 02:05:34 -0500 پویان

@پویان: اون موقع که من این سوال رو گذاشتم پاسخ تشریحی ای در کار نبود!

2014-06-04 02:15:20 -0500 المپیادی

همچنین یکی از اهداف کاهو جمع آوری پرسش و پاسخ های سال قبل هست و پاسخ تشریحی کمیته تنها راه حل نیست دوست عزیز.

2014-06-04 02:17:27 -0500 المپیادی

من به تاریخ نگاه نکرده بودم ببخشید. آخه وقتی جواب سوال کامل وجود داره چرا باید این جا هم بزاریم.

2014-06-04 02:22:23 -0500 پویان

سلام میدونستید انجمن علمی نخبگان دانشگاه صنعتی شریف مسابقه تخصصی مهارت سنجی برنامه نویسی و داده کاوی گذاشته است آدرس سایتش www.fanavard.com

2015-08-06 09:45:38 -0500 امیر شکری

1 پاسخ

3

پاسخ درست ۶ هست.

تعداد اعداد را $n$ می نامیم و فرض میکنیم $n=4k$ (در این مساله $k=348$).

الگوریتم به این صورت است: (۱) نیمه پایین (۲) نیمه بالا (۳) نیمه وسط (۴) نیمه پایین (۵) نیمه بالا (۶) نیمه وسط

منظور از نیمه پایین جایگاه های ۱ تا $2k$ هست. به همین ترتیب نیمه بالا شامل جایگاه های $2k+1$ تا $4k$ خواهد بود و نیمه وسط جایگاه های $k+1$ تا $3k$.

حالا ثابت میکنم این الگوریتم درست کار میکند: $k$ عدد کوچکتر رو در نظر بگیرید (که بعد از مرتب سازی باید به ترتیب در جایگاه های ۱ تا $k$ قرار بگیرند). هر کدام از این اعداد که در نیمه پایین قرار داشته باشند بعد از گام (۱) در $k$ جایگاه نخست قرار میگیرند. هر کدام از آنها که در نیمه بالا باشند پس از گام (۲) حتما در بین جایگاه های $2k+1$ تا $3k$ خواهند بود، و پس از گام (۳) به نیمه پایینی جدول منتقل میشوند. پس تا اینجا کل $k$ عدد کوچکتر در نیمه پایینی هستند، و گام (۴) باعث میشود همه آنها به صورت مرتب شده در $k$ جایگاه نخست قرار بگیرند.

استدلال آن که $k$ عدد بزرگتر پس از گام (۵) به صورت مرتب در جای خود قرار میگیرند هم مشابه است. فقط کافی است ثابت کنیم اعداد نیمه وسط جدول هم با این الگوریتم مرتب میشوند.

چون پس از گام (۵) $k$ عدد کوچکتر و $k$ عدد بزرگتر سر جای خودشان هستند، پس اعداد متعلق به نیمه وسط مجبورند پس از گام (۵) در نیمه وسط قرار گرفته باشند. بدیهی است گام (۶) باعث مرتب سازی آنها میشود.

اما برای آن که استدلال کنیم ۴ عمل جادویی! کم است (۵ عمل داخل گزینه ها نیست :-)

مثال نقض: ترتیب معکوس - فرض کنید اعداد دقیقا به ترتیب عکس در جایگاه ها قرار گرفته اند (از $n$ تا $1$).

برای آن که عدد ۱ به جای خودش باز گردد حتما باید یک بار بازه بالایی جدول (از $2k+1$ تا $4k$) مرتب شود (چون فقط و فقط این بازه شامل جایگاه $4k$ میشود). در این حالت عدد ۱ به جایگاه $2k+1$ منتقل میشود. یکی از گامهای پس از آن میبایست شامل جایگاه های $2k$ و $2k+1$ باشد (در غیر این صورت عدد ۱ هیچ گاه به نیمه پایین جدول منتقل نمیشود). نکته مهم اینجاست که گام مذکور نمیتواند شامل دو جایگاه $1$ یا $n$ باشد. پس از آن میبایست یک گام بازه پایینی جدول (از $1$ تا $2k$) را مرتب کند، چون این تنها بازه ای است که شامل جایگاه $1$ میشود.

پس تنها راه رساندن عدد ۱ به جایگاه خودش آن است که سه گام مذکور به ترتیب اجرا شوند. حال تنها یک گام (که آن را گام اضافه می نامیم) باقی می ماند که میتواند قبل یا بعد یا در بین سه گام بالا اجرا شود. ثابت میکنیم حتی با آن گام نمیتوان عدد $n$ را به جایگاه خود رساند. اگر نخستین باری که عدد $n$ (که در ابتدای کار در جایگاه $1$ قرار دارد) جابه جا میشود گام سوم بالا باشد، پس از آن عدد $n$ همچنان در نیمه پایینی جدول قرار دارد و با گام اضافه نمیتوان آن را به جایگاه خودش رساند.

تنها حالت باقیمانده آن است که قبل از گام سوم، با استفاده از گام اضافه عدد $n$ را جابه جا کرده باشیم. پس گام اضافه دقیقا روی نیمه پایین قرار میگیرد (چون تنها بازه ای است که شامل جایگاه $1$ میشود). در این حالت هم شانس رساندن آن به جایگاه آخر را از دست خواهیم داد، چرا که تنها موقعیت انتقال عدد $n$ به نیمه بالای جدول در گام دوم بالا پیش می آید (تنها گامی که شامل اعداد نیمه پایین و نیمه بالا میشود). پس از آن فقط گام سوم بالا را داریم که روی نیمه پایین اجرا میشود، لذا عدد $n$ در میان راه می ماند.

مطالعه بیشتر

این سوال مربوط به مبحث شبکه های مرتب سازی یا Sorting Network میشود. یک قضیه جالب از این مبحث اینچنین است: اگر یک شبکه مرتب سازی بتواند در مورد تمامی ورودی هایی که فقط شامل ۰ و ۱ میشود درست کار کند (در انتها ۰ ها را قبل از ۱ ها قرار دهد)، در مورد هر ورودی دیگر از اعداد دلخواه (مثلا حقیقی) هم درست کار میکند!

برای مطالعه بیشتر میتوانید به کتاب مقدمه ای بر الگوریتمها نوشتن «توماس کورمن» و همکاران، که قبلا ترجمه آن چاپ شده است، مراجعه کنید.

2014-05-11 03:44:23 -0500
کلاه قرمزی 3097 ● 21 ● 34 ● 57
پاک‌کردن   ویرایش پاسخ

پاسخ شما

فقط در صورتی که پاسخی برای این پرسش دارید، آن را اینجا بنویسید و برای بحث کردن از قسمت «ثبت‌ نظر» استفاده کنید. شما می‌توانید قبل از وارد شدن به سایت پاسخ خود را بنویسید. این پاسخ ذخیره می‌شود و زمانی که شما وارد سایت شدید یا ثبت‌نام کردید منتشر می‌شود.

پیش‌نمایش:

کلیه‌ی حقوق این سایت متعلق به کمیته‌ی ملی المپیاد کامپیوتر است.