حل تشریحی سوالات طراحی الگوریتم - کنکور ارشد مهندسی کامپیوتر 1404
منوی آزمون (درس ها)
سوالات طراحی الگوریتم
6 سوالفرض کنید برای حل مسئله پوشش حداکثر (maximum Coverage)، از الگوریتم حریصانه استفاده می کنید که مجموعه ای از عناصر را با کمترین هزینه ممکن پوشش دهد. چرا این الگوریتم نمی تواند جواب بهینه را تضمین کند؟
الگوریتم حریصانه همیشه انتخاب محلی بهینه دارد، اما ممکن است در سطح کلان بهترین نباشد.
مسئله پوشش حداکثر یک مسئله کامل است و نیاز به حل دقیق دارد.
تمام راه حل های ممکن را بررسی نمی کند.
پیچیدگی زمانی آن بالا است.
چند گزاره از گزاره های زیر درست است؟
- هر الگوریتم قطعی که n کلید متمایز را فقط با مقایسه کلیدها مرتب سازی می کند، باید در بدترین حالت حداقل مقایسه کلیدها را انجام دهد.
- اگر m تعداد برگ ها در یک درخت دودویی و d عمق آن باشد آنگاه .
- الگوریتم مرتب سازی شمارشی یک الگوریتم مبتنی بر مقایسه است که در بدترین وضعیت از مرتبه O(n) است.
صفر
1
2
3
هر الگوریتم قطعی که بتواند بزرگ ترین کلید دوم (دومین بزرگترین کلید) را در هر ورودی ممکن، تنها با مقایسه کلیدها بیابد. باید در بدترین حالت، حداقل چند مقایسه انجام دهد؟ (تعداد عناصر برابر n است.)
فرض کنید یک ساختار داده جدید به نام لیست اولویت دار پویا (Dynamic Priority List) دارید. این ساختار داده از لیستی از گره ها تشکیل شده است که هر گره دارای یک مقدار کلید و یک اولویت است. عمل های زیر، بر روی این ساختار داده تعریف شده اند:
- : افزودن یک عنصر با کلید x و الویت p به لیست
- : حذف گره ای که دارای بیشترین اولویت است. اگر چند گره دارای اولویت یکسان باشند. اولین گره از سمت چپ حذف می شود.
- : یافتن مقدار میانه از بین تمامی کلیدهای موجود در لیست
- : افزایش اولویت عنصر با کلید x به اندازه k
هر کدام از این عملیات باید در کمترین پیچیدگی زمانی ممکن انجام شوند. حال، کدام یک از روش های زیر مناسب ترین ساختار داده ترکیبی برای پیاده سازی لیست اولویت دار پویا است، به گونه ای که همه عملیات با پیچیدگی بهینه انجام شوند؟
استفاده از یک پشته و یک صف به صورت هم زمانی برای مدیریت ترتیب ورود و خروج عناصر و اولویت آنها
ترکیب یک درخت فیبوناچی (Fibonacci Heap) و یک لیست پیوندی ساده برای مدیریت عناصر و اولویت ها
ترکیب یک هرم دوتایی (Double-ended Heap) برای مدیریت اولویت ها و یک ساختار داده مرتب برای دسترسی سریع به میانه
ترکیب یک درخت جستجوی دودویی متوازن (Balanced Binary Search Tree) برای ذخیره اولویتها و یک جدول در همسازی (Hash Table) برای دسترسی سریع به عناصر
در دو الگوریتم مرتب سازی سریع (Quick Sort) و مرتب سازی ادغامی (Merge Sort)، تعداد مقایسه ها و جابه جایی ها متفاوت است. کدام گزاره زیر، درباره این تفاوت ها درست است؟
همواره، تعداد مقایسه ها در هر دو الگوریتم برابر است، اما مرتب سازی سریع، تعداد جابه جایی های بیشتری دارد.
همواره، مرتب سازی ادغامی، تعداد مقایسه های کمتری نسبت به مرتب سازی سریع دارد و تعداد جابه جایی آن نیز کمتر است.
در حالت میانگین، مرتب سازی سریع، تعداد مقایسه های بیشتری نسبت به مرتب سازی ادغامی دارد و تعداد جابه جایی های آن کمتر است.
در حالت میانگین، مرتب سازی سریع، تعداد مقایسه های برابری با مرتب سازی ادغامی دارد، اما مقدار جابه جایی های آن بیشتر است.
فرض کنید یک لیست پیوندی یک طرفه از n گره داریم و شما می خواهید گره ای را که در موقعیت قرار گرفته پیدا کنید اما مقدار n را نمی دانیم. فرض کنید n مضربی از 4 است. کدام یک از گزینه ها ما را به نتیجه نمی رساند؟
ابتدا طول لیست را به طور کامل محاسبه کنید، سپس به اندازه از ابتدا به جلو حرکت کنید تا گره مورد نظر را پیدا کنید.
با دو اشاره گر که یکی از ابتدا با سرعت سه گره و یکی از انتها (پس از پیدا کردن گره انتهایی) با سرعت یک گره حرکت کنند و در لحظه رسیدن به هم، نتیجه حاصل خواهد شد.
ابتدا طول لیست را به طور کامل محاسبه کنید، از دو اشاره گر استفاده کنید. یکی را در ابتدای لیست و دیگری را در گره تنظیم کنید. با سرعت یک گره حرکت کنید تا گره جلوتر به انتها برسد تا به هدف برسیم
با دو اشاره گر که یکی با سرعت یک گره و دیگری به سرعت دو گره حرکت می کند، به نیمه می رسیم. یک گره جلو برویم و اشاره گر دوم که به انتها رسیده را مجدد برابر اشاره گر اول قرار خواهیم داد تا مجدد عمل انجام شود و نتیجه حاصل شود.