حل تشریحی سوالات ساختمان داده ها و طراحی الگوریتم ها - کنکور دکتری مهندسی کامپیوتر 1404
سوالات ساختمان داده ها و طراحی الگوریتم ها
20 سوالفرض کنید در این صورت، کدام مورد درست است؟
پیچیدگی قطعه برنامه ریز، چقدر است؟
sum=0;
for(i=1;i<n;i++)
for(j%i==0)
sum+=1;
اگر و باشد، در آن صورت حتما کدام مورد درست است؟
هیچ کدام
فرض کنید که n عنصر با کلدهای مجزا را با استفاده از یک تابع در هم سازی ساده و یکنواخت در یک آرایه به اندازه m درج می کنیم. برخوردها را به روش زنجیره ای حل می کنیم. با این تابع، احتمال آنکه دو عنصر دلخواه و متفاوت i و j به یک درایه نگاشت شوند، برابر است. میانگین تعداد برخوردهای دو عنصر، چقدر است؟
کدام یک از گزاره های زیر در خصوص الگوریتم دایجسترا درست است؟
فرض می کند کوتاه ترین مسیر را پیدا کرده است، اما یال های منفی را نقض کرده و باعث مسیر اشتباه یا حلقه های منفی می شوند.
برای هر یال وزن منفی، یک چرخه نامحدود از به روز رسانی فاصله ها ایجاد می کند که باعث توقف ناپذیری الگوریتم می شود.
کاملا بر روی گراف های دارای یال منفی، درست کار می کند و مشکلی ندارد.
فقط بر روی طوقه های منفی و یال های مثبت، درست کار می کند.
در لیست L با طول n، عنصر a را عنصر اکثریت می گوییم. هر گاه تعداد رخداد a در L از بیشتر باشد، کدام مورد درست است؟
با سه گذر روی لیست و حافظه ، نمی توان تشخیص داد که عنصر اکثریت وجود دارد یا نه.
با دو گذر روی لیست و حافظه ، می توان تشخیص داد که عنصر اکثریت وجود دارد یا نه.
با دو گذر روی لیست و حافظه ، نمی توان تشخیص داد که عنصر اکثریت وجود دارد یا نه.
با یک گذر روی لیست و حافظه ، می توان تشخیص داد که عنصر اکثریت وجود دارد یا نه.
فرض کنید دو ساختار داده به صورت زیر دارید:
- یک هرم بیشینه (Max-Heap) ذخیره شده در یک آرایه
- یک درخت AVL که همان مقادیر موجود در هیپ را ذخیره کرده است و به عنوان یک درخت جستجوی دودویی متوازن (Balanced Binary Search Tree) عمل می کند.
از آنجا که هرم بیشینه و درخت AVL هر دو مرتب هستند، می توانید از جستجوی دودویی در هر دو ساختار استفاده کنید و کوچک ترین مقدار را در زمان پیدا کنید.
در هرم هر دو ساختار، کوچک ترین مقدار، ممکن است در هر سطح یا شاخه وجود داشته باشد. بنابراین، باید همه گره ها را در هر دو ساختار جستجو کنید که پیچیدگی زمانی خواهد بود.
در هرم بیشینه، کوچک ترین مقدار باید در پایین ترین سطح و در گره های برگ قرار داشته باشد که نیازمند پیمایش تمامی گره های برگ است . در درخت AVL، کوچک ترین مقدار در گره سمت چپ ترین قرار دارد و می توان آن را در زمان پیدا کرد.
هرم بیشینه، برای پیدا کردن کوچک ترین مقدار مناسب نیست، زیرا ساختار آن برای دسترسی سریع به بزرگ ترین مقدار طراحی شده است. اما درخت AVL، کوچک ترین مقدار در گره چپ ترین قرار دارد و این مقدار را در زمان برمی گرداند.
فرض کنید A یک آرایه مرتب از اعداد صحیح غیر تکراری به طول n است. هدف، پیدا کردن یک خانه i است که باشد. کدام یک از الگوریتم های زیر، برای حل این مسئله مناسب ترین است و پیچیدگی زمانی کمتری را حاصل می کند؟
استفاده از الگوریتم تقسیم و حل (Divide and Conquer) برای تقسیم آرایه به دو نیمه و بررسی هر نیمه جداگانه
استفاده از جستجوی دو دویی (Binary Search) برای بررسی نیمه مناسب آرایه در هر مرحله
مرتب سازی مجدد آرایه و استفاده از جستجوی خطی برای بررسی شرط
پیمایش خطی آرایه از ابتدا تا انتها و بررسی شرط
فرض کنید یک پشته S داده شده است که عملیات های استاندارد PUSH، POP و TOP را پشتیبانی می کند. حال می خواهید یک عملیات جدید به نام FIND-MAX(S) طراحی کنید که بزرگ ترین مقدار موجود در پشته را در زمان بهینه پیدا کند. کدام مورد زیر، رویکرد صحیح و کارآمدی برای پیاده سازی این عملیات ارائه می دهد؟
همراه با هر PUSH، مقدار جدید را در متغیر MAX ذخیره کنید اگر مقدار جدید بزرگ تر از مقدار موجود در MAX باشد. عملیات FIND-MAX(S) در این روش دارای پیچیدگی است، اما بازگرداندن مقدار قبلی MAX پس از یک عملیات POP ، به زمان O(n) نیاز دارد.
در هر بار فراخوانی FIND-MAX(S)، تمامی عناصر پشته را با استفاده از عملیات POP خارج کنید، بزرگ ترین مقدار را پیدا کنید و سپس عناصر را به ترتیب اصلی به پشته بازگردانید. این روش دارای پیچیدی زمانی O(n) برای هر فراخوانی است.
از یک پشته کمکی M استفاده کنید که در هر PUSH مقدار بزرگ ترین عنصر پشته S را تا آن لحظه ذخیره می کند. در هنگام POP، مقدار بالای پشته M نیز حذف می شود. عملیات FIND-MAX(S) در این روش، دارای پیچیدگی زمان O(1) است.
در هر PUSH، مقدار بزرگ ترین عنصر پشته تا آن لحظه را با استفاده از مقایسه بازگشتی تعیین کنید و آن را به پشته اصلی S اضافه کنید. این روش دارای پیچیدگی زمان O(logn) برای FIND-MAX(S) است.
در کدام روش مرتب سازی، زمان اجرای الگوریتم حداقل وابستگی را به ترتیب اولیه داده های ورودی دارد؟
انتخابی
ادغامی
درجی
سریع
فرض کنید که یک صف دوتایی (Deque) با استفاده از یک لیست پیوندی دوطرفه پیاده سازی شده است و می توانید هم از ابتدا و هم از انتهای صف عملیات enqueue و dequeue را انجام دهید. کدام مورد زیر در خصوص پیچیدگی زمانی این عملیات ها درست است؟
عملیات enqueue و dequeue در هر دو سمت صف (ابتدا و انتها)، دارای پیچیدگی زمانی O(n) است.
فقط عملیات dequeue از ابتدای صف دارای پیچیدگی زمانی O(1) است، در حالی که سایر عملیاتها پیچیدگی زمانی O(n) دارند.
تمامی عملیات های enqueue و dequeue در صف دوتایی دارای پیچیدگی زمانی O(1) هستند، چه از ابتدای صف و چه از انتهای صف.
عملیات enqueue در انتهای صف و عملیات dequeue از ابتدای صف، دارای پیچیدگی زمانی O(1) هستند، اما عملیات dequeue از انتهای صف، دارای پیچیدگی O(n) است.
کم ترین تعداد گره های یک درخت AVL با ارتفاع h، دام است؟ (، nامین عدد فیبوناچی است که در آن، است.)
یک درخت دودویی کامل با عمق 5 در یک آرایه ذخیره شده است. ریشه در اندریس 1 آرایه قرار می گیرد. اولین برگ درخت از سمت چپ، در کدام اندیس آرایه خواهد گرفت؟
63
32
31
16
فرض کنید p(x) و q(x) دو چند جمله ای درجه n-1 باشند و بخواهیم حاصل ضرب این دو چند جمله ای را با توجه به اینکه p و q را می توان به صورت زیر نوشت، به کمک یک الگوریتم تقسیم و حل به دست آورد.
که در آن، ، ، و چند جمله ای هایی از درجه حداکثر هستند. پیچیدگی زمانی بهترین الگوریتم تقسیم و حل برای حل این مسئله کدام است؟
چه تعداد از گزاره های زیر رست هستند؟
- الگوریتم BFS از پشته استفاده می کند.
- درخت فراگیر بیشینه را می توان در ساخت. ( تعداد رئوس و تعداد یال است.)
- یک درخت فراگیر کمینه ممکن است شامل یال با بیشترین وزن باشد.
- درخت عمق اول و سطح اول یک گراف، مانند هم هستند.
صفر
1
2
3
فرض کنید یک هرم دودویی کامل (Complete Binary Heap)، به صورت آرایه پیاده سازی شده است. می خواهیم یک الگوریتم بهینه طراحی کنیم که بدون تغییر ساختار هرم، دومین بزرگ ترین مقدار در هرم بیشینه (Max-Heap) را پیدا کند. کدام یک از موارد زیر درست است؟
دومین بزرگ ترین مقدار در یک هرم بیشینه همیشه در آخرین سطح هرم قرار دارد و می توان آن را در زمان O(1) پیدا کرد.
دومین بزرگ ترین مقدار در یک هرم بیشینه همیشه یکی از دو فرزند گره ریشه است و می توان آن را در زمان O(1) با مقایسه مقادیر این دو گره به دست آورد.
برای پیدا کردن دومین بزرگ ترین مقدار در یک هرم بیشینه، تنها کافی است گره های فرزند ریشه (سطح اول زیر ریشه) ر بررسی کنیم. این فرایند پیچیدگی زمانی O(logn) دارد.
برای پیدا کردن دومین بزرگ ترین مقدار در یک هرم بیشینه، باید تمام گره های هرم بررسی شوند، زیرا دومین بزرگ ترین مقدار ممکن است در هر سطح قرار داشته باشد. ین فرایند پیچیدگی زمانی o(N) دارد.
در حل مسئله MAZE (مسیریابی در یک هزارتو) با استفاده از روش عقبگرد (Backtracking)، گره های فضای جستجو و پیچیدگی زمانی به چه صورت تعریف می شوند؟
هر گره نمایانگر یک مسیر جزئی از نقطه شروع تا یک موقعیت فعلی در هزارتو است و پیچیدگی زمانی برابر است که n، تعداد خانه های هزارتو است.
هر گره نمایانگر مسیرهایی است که می توان از یک موقعیت خاص طی کرد و پیچیدگی زمانی برابر است که n، تعداد خانه های هزارتو است.
هر گره نمایانگر یک مسیر کامل از نقطه شروع تا مقصد است و پیچیدگی زمانی برابر است که n، تعداد خانه های هزارتو است.
هر گره نمایانگر یک مسیر کامل از نقطه شروع تا مقصد است و پیچیدگی زمانی برابر است که n، تعداد خانه های هزارتو است.
در مسئله ضرب زنجیره ای ماتریس ها از روش شاخه و حد برای پیدا کردن ترتیب بهینه ضرب ماتریس ها استفاده می شود. کدام مورد زیر، به درستی مفهوم شاخه ها و حدها را در این روش توضیح می دهد؟
حل مسئله زنجیره ضرب ماتریس ها با رویکرد شاخه و حد مقدور نیست.
شاخه ها نشان دهنده تمام ترتیب های ممکن برای گروه بندی ضرب ماتریس ها هستند و حد پایین (Lower Bound)، نشان دهنده تعداد حذداقل عملیات ضرب عددی ممکن در کل مسئله است.
شاخه ها تعداد عملیات ضرب برای هر ترتیب خاص از ماتریس ها را نشان می دهند و حد پایین (Lower Bound)، تنها برای شناسایی شاخه هایی استفاده می شود که منجر به بیشترین تعداد عملیات ضرب عددی می شوند.
شاخه ها نشان دهنده تمامی نقاط تقسیم ممکن بین ماتریس ها هستند که مسئله را به دو زیرمسئله تقسیم می کنند و حد پایین (Lower Bound)، مجموع تعداد عملیات ضرب مورد نیاز برای حل زیر مسئله ها و عملیات نهایی ادغام آنها است.
در مسئله دور شوالیه، یک صفحه شطرنج داریم که یک اسب باید با حرکت های قانونی شطرنج، تمام خانه ها را دقیقا یک بار بازدید کرده و به خانه ابتدایی بازگردد. کدام گزاره زیر، در خصوص روش حل این مسئله با استفاده از عقبگرد (Backtraking) درست است؟
این مسئله توسط رویکرد عقبگرد قابل حل نیست و رویکرد شاخه و حد، جواب بهتری را ارائه خواهد داد.
گره های روش عقبگرد هشت حالت خواهد داشت و بعد از هرس شاخه های غیر قابل قبول، پیچیدگی زمانی آن خواهد بود.
روش عقبگرد با استفاده از ساختار داده ای مانند صف اولویت (priority Queue)، تعداد مسیرهای ممکن را کاهش داده و پیچیدگی زمانی آن را به می رساند.
روش عقبگرد با بررسی تمام مسیرهای ممکن و هرس شاخه های غیر قابل قبول کار می کند. تعداد حالت های ممکن برابر با است و پیچیدگی زمانی آن در عمل بسیار بالا است.
چند تا از گزاره های زیر درست است؟
- روش حریصانه برای حل مسئله کوله پشتی کسری، همواره جواب بهینه را ارائه می دهد.
- اگر باشد آنگاه مجموعه تهی نیست.
- مسئله بهینه سازی فروشنده دوره گرد، NP سخت است.
3
2
1
صفر