Answer-Assignment3- Data Structure and Algorithm Design
Answer-Assignment3- Data Structure and Algorithm Design
لطفا با دقت موارد زیر را مطالعه کرده و در تهیه پاسخنامه نهایی تمرین رعایت فرمائید.
پاسخنامه تمرینات به صورت دست نویس ،نهایتا در قالب یک فایل pdfباید ارسال گردد .نام فایل را به صورت
( StudentNumber_HW3.pdfبه عنوان مثال )9831055_HW3.pdfاز طریق سامانه courses.aut.ac.irدر بازه زمانی
تعیین شده ارسال نمائید.
در توصیف الگوریتم ها می توانید از هر زبان برنامه نویسی دلخواه همچون Python ،Java ،Cو یا شبه کدها استفاده نمائید .اما توجه
نمائید که در صورت استفاده از داده ساختارهای پیچیده مانند انواع درخت ها ،یا انواع داده ای غیرپایه 1باید هزینه های مربوط به آنها نیز
در تحلیل پیچیدگی الگوریتم درنظر گرفته شود.
در صورت نیاز به راهنمایی یا بروز هر گونه مشکلی می توانید از ایمیل [email protected]استفاده کنید یا از طریق
تلگرام با تدریسیاران درس در ارتباط باشید.
آخرین مهلت ارسال تمرین شماره سه تا ساعت ۸صبح جمعه ۱۸آبان می باشد.
در صورت تاخیر در ارسال پاسخنامه ،به ازای هر روز تاخیر %۲۰از نمره تمرین کسر خواهد شد.
هرگونه شباهت در کل یا بخشی از پاسخنامهها فارغ از اینکه از چه منبعی تهیه شده باشند ،به عنوان عدم رعایت حق کپی
رایت لحاظ خواهد شد و نمره بین تمامی نسخه های مشابه تقسیم خواهد شد.
پاسخنامه نهایی باید به صورت شخصی و با بیان و ادبیات شخصی تهیه شده و منحصربفرد باشد .لذا کلیه دانشجویانی که به
صورت مشترک اقدام به حل مساله ها مینمایند و یا بخشی از پاسخها را از اینترنت یا سایر منابع تهیه میکنند ،بعد از
فراگیری کامل راهحل ،به صورت انفرادی اقدام به تهیه پاسخنامه نمایند.
موفق باشید
سواالت تشریحی:
-1شبه کد تابعی را بنویسید که اولین گره یک لینک لیست یک طرفه را ورودی میگیرد و اولین گره "لینک لیست وارون
) (reverseشده آن" را خروجی میدهد .زمان اجرا تابع شما باید از ) O(nو حافظه از ) O(1باشد .وارون لینک لیست یعنی
هر گره به گره قبلی خود ،در صورت وجود ،اشاره کند و شروع ) (beginلینک لیست جدید ،پایان ) (endلینک لیست قدیمی
باشد ۲۵( .امتیاز)
1
Non-Primitive Data types
بسمه تعالی
راه حل:
-2گراف Gبا nراس و mیال در اختیار داریم ،الگوریتمی برای پیدا کردن یک دور فرد ،در صورت وجود ،در زمان اجرایی
) O(m+nپیدا کنید ۲۵( .امتیاز)
راه حل:
بر روی گراف از یک راس دلخواه الگوریتم BFSرا اجرا میکنیم .در صورتی که در یک طبقه از BFSدو راس مجاور باشند
(بین آن ها یالی وجود داشته باشد) ،دور فردی پیدا کردهایم ،به این صورت که یال بین این ۲راس و مسیر آن ها تا اولین جد
مشترکشان (در درخت )BFSیک دور فرد تشکیل میدهد.
اگر چنین یالی وجود نداشته باشد آنگاه گراف دوبخشی بوده و دور فرد ندارد.
زمان اجرایی)O(n+m
-3کشوری با nشهر و mجاده دو طرفه داریم هر جاده دو شهر را به هم متصل می کند در این کشور دزدی زیاد شده است و
هدفمان دستگیری دزد ها است برای همین می توانیم در یک شهر پلیس قرار دهیم و یک شهر امن است اگر و تنها اگر
پلیسی وجود داشته باشد که آن پلیس بتواند با عبور از جاده ها به شهر مدنظر برسد از آنجایی که قرار دادن پلیس در هر شهر
هزینه دارد می خواهیم با کمترین هزینه ممکن همه شهر های کشور را امن کنیم حداقل به چند پلیس نیاز داریم برای یک
کشور که به ما داده شده است .سوال باید در ) O(n+mحل شود ۲۵( .امتیاز)
راه حل:
کافی است کشور را به صورت یک گراف بدون جهت در نظر بگیریم و تعداد مولفه های گراف را بدست آوریم.
مولفه :مجموعه ای از راس ها در یک مولفه اند اگر وتنها اگر از هر کدام به دیگری مسیری وجود داشته باشد.
یک آرایه به اندازه nاز ۰و ۱در نظر می گیریم و از شهر ۱شروع کرده تا شهر nپیش می رویم هر کدام از راس هایی را که
رویشان حلقه انداختیم اگر از قبل مقدار آرایه برای آن شهر که گرفتیم ۱باشد کاری نمی کنیم در غیر این صورت از آن شهر
dfsمی زنیم و وارد هر راسی که شدیم مقدار آرایه مربوط به آن راس را ۱می کنیم و در انتها یک واحد به جواب می افزاییم
این الگوریتم تعداد مولفه ها را بدست می آورد که همان جواب سوال است.
بسمه تعالی
-4کشوری وجود دارد با nشهر و mجاده دو طرفه که هر کدام از جاده ها دو شهر را به هم متصل می کنند.
گروهی از دزدان پس از دزدی از موزه که در شهر ۱قرار دارند می خواهند به فرودگاه که در شهر nاست برسند و از آنجا
کشور را ترک کنند .پلیس به دنبال آنها است پس باید در عبور از جاده ها مراقب باشد در این شهر mجاده وجود دارد که از
این mجاده kتایشان تحدنظر پلیس اند دزد ها می دانند اگر از بیشتر یکی از این جاده ها استفاده کنند پلیس مشکوک می
شود و دستگیرشان می کند فرض کنیم دزد ها نقشه کشور و همه جاده هایی که تحدنظر پلیس می باشند را می دانند از
طرفی می خواهند با کمترین زمان به فرودگاه برسند پس باید از کمترین تعداد جاده عبور کنند .حال از شما می خواهند که
حداقل تعداد جاده را که باید بپیمایند تا به فرودگاه برسند و پلیس آن ها را دستگیر نکنند به آن ها بدهید تضمین می شود
همیشه راهی وجود دارد .الگوریتم شما باید در ) O(n+mاجرا شود.
توجه :ممکن است مسیری انتخابی اصال شامل هیچ جاده تحدنظر پلیس نباشد یا تنها یک جاده تحدنظر پلیس باشد.
( ۲۵امتیاز)
راه حل:
با استفاده ار الگوریتم bfsو بدون در نظر گرفتن جاده های تحدنظر از راس ۱و nالگوریتم bfsرا اجرا می کنیم و فاصله
همه راس ها را از راس ۱و nبه دست می آوریم حال اگر از جاده های تحدنظر استفاده نکنیم کمترین فاصله را بدست
آوردیم در غیر این صورت روی تمام یال های تحدنظر می رویم و فرض می کنیم از راس ۱با کمترین تعداد جاده های
معمولی به یک سمت یال رسیده باشیم و از سمت دیگر به راس nرسیده باشیم با بررسی تمام این k2حالت و حالتی که در
ابتدا مطرح شد به جواب سوال می رسیم که چون دو تا bfsو یک حلقه روی یال های تحدنظر زدیم پس الگوریتم از
) O(n + k + mاست چون kکمتر مساوی mاست پس از ) O(n + mمی باشد.
موفق باشید