تمرین سری پنجم ساختمان داده زمان تحویل: مسئله ی .1 الگوریتمی با مرتبه زمانی خطی ارائه نمایید که بتواند محل قرارگیری مربی را در زمینی بزرگ بیابد به طوریکه مجموع فاصلهی آن تا Nوالییالیست کمینه باشد .مختصات تصادفی همه والیبالیست ها ( )x,yجزو مقادیر داده شده در نظر بگیرید پاسخ .در نظر داریم ( 𝑐 𝑦 )𝑥 𝑐 ,را پیدا نماییم لذا باید نشان دهیم که تعداد نقاطی که 𝑐 𝑥 < 𝑖 𝑥 است با تعداد نقاطی که 𝑐 𝑥 > 𝑖 𝑥است ،برابر باشد .برای 𝑐 𝑦 نیز به همین صورت. فرض کرده چنین نباشد و تعداد نقاطی که 𝑐 𝑥 < 𝑖 𝑥 است ،بیشتر از 𝑐 𝑥 > 𝑖 𝑥 باشد و تعریف کرده : |)𝑎(𝐿| ∆(𝑎) = |𝐺(𝑎)| − که )𝑎( 𝐺 مجموعه نقاطی است که xآنها بیشتر از aاست و که )𝑎(𝐿 مجموعه نقاطی است که xآنها کمتر از aاست با توجه به فرض 𝜀 > 0 . ∆(𝑥 𝑐 ) > 0و ∆(𝑥 𝑐 + 𝜀) = ∆(𝑥 𝑐 ) − 1میتوان با اندکی محاسبات ریاضی دریافت که مجموع فواصل تمامی نقاط تا نقطهی ( 𝑐 𝑦 )𝑥 𝑐 + 𝜀,کمتر از مجموع فواصل آنها تا ( 𝑐 𝑦 )𝑥 𝑐 ,است پس 𝑐 𝑥 در میانهی 𝑖 𝑥 و 𝑐 𝑦 در میانه 𝑖 𝑦 ها قرار دارد پس کافی است الگوریتم مربوط به پیدا نمودن میانه که از مرتبه ) O(nاست اشاره شود. مسئله ی .2 سومین کوچکترین عنصر بین Nعنصر را با چند مقایسه میتوان بدست آورد؟ پاسخ .ابتدا کوچکترین عنصر را با N-1مقایسه بدست میآوریم بدین صورت که اعداد را دو به دو مقایسه کرده .فقط اعداد کوچکتر در هر مقایسه را نگه میداریم سپس روی اعداد باقی مانده این کار را تکرار کرده تا در انتها کوچکترین بدست بیاید .سومین کوچکترین عنصر یا در مقایسه با کوچکترین عنصر یا دومین کوچکترین عنصر حذف شده است .کوچکترین عنصر با ⌉𝑁 𝑔𝑙⌈ و دومین کوچکترین عنصر با ⌈𝑙𝑔 𝑁⌉ − 1عنصر مقایسه شده است(جمعا 2⌈𝑙𝑔 𝑁⌉ − 1که دومین کوچکترین نیز شامل آنهاست )از بین 2⌈𝑙𝑔 𝑁⌉ − 2عنصر باید کمتزین مقدار که سومین کوچکترین را پیدا نماییم N-1 + ⌈𝑙𝑔 𝑁⌉ − 1 + 2⌈𝑙𝑔 𝑁 ⌉ − 3 1 مسئله ی.3 فرض کنید الگوریتمی برای مرتب سازی سریع طراحی نماییم که 𝑁√ 1+2عنصر اول آرایه ای Nعنصری را انتخاب نموده و سپس با یک الگوریتم ساده مثل مرتب سازی درجی این عناصر را همراه با پیدا نمودن میانه ،مرتب مینماید سپس میانه را محور قرار داده و بقیه الگوریتم مرتب سازی را اجرا نموده . الف -رابطه ای بازگشتی برای زمان اجرای الگوریتم در بدترین حالت بنویسید. ب – کران باالی مناسبی برای زمان اجرای رابطهی قسمت الف را بیابید با توجه به اینکه میتوان با کشیدن درخت بازگشت و بررسی آن به این نتیجه رسید که طوالنی ترین شاخه ی آن از )𝑁√( Oاست. پاسخ .نوع partitionتضمین می کند که در هر کدام قسمت ها حداقل √Nعنصر قرار می گیرند ( .با فرض متمایز بودن عناصر) پس در بدترین حالت داریم که )T(N) = T(√N) + T(N − √N) + θ(N در هر سطح از درخت بازگشت از ) θ(Nکار انجام می دهیم و از طرفی هم طوالنی ترین شاخه از ) O(√Nپس زمان اجرا برابر ) O(N√Nاست. مسئله ی.4 در هر قسمت آرایه بدست آمده از مراحل کدام یک از الگوریتمهای ساده مرتب سازی و مرتب سازی سریع میتواند تولید شود. (همراه با دلیل) الف 2 4 1 7 9 8 12 19 13 27 25 33 44 35 51 85 98 77 64 56 - ب 12 25 51 64 77 8 35 9 1 7 4 33 44 19 2 85 98 13 27 56 - ج 1 2 4 64 12 8 35 9 51 7 77 33 44 19 25 85 98 13 27 56 - د 12 25 51 64 77 1 7 8 9 35 4 19 33 44 2 85 98 13 27 56 - پاسخ . الف – سریع ب -درجی ج -انتخابی د -ترکیبی مسئله ی.5 اگر فرض کنیم عملیات تقسیم بندی در هر سطح از الگوریتم مرتب سازی سریع با نسب 1 − αبه )0< α ≤ 1/2( αانجام شود .حداقل و حداکثر عمق بر گ های درخت بازگشت در این الگوریتم را بر حسب αو nبدست بیاورید. پاسخ .کم ترین ارتفاع درخت 𝛼 𝑚 𝑛 = 1یا )𝑛log(1/ )𝛼(log =𝑚 𝑛𝑔𝑜𝑙− و بیشترین ارتفاع درخت )𝛼m=log (1− که در اینجا mهمان سطح پایانی رابطه بازگشتی می باشد 2 مسئله ی.6 توضیح دهید که چرا بدترین زمان اجرا در الگوریتم مرتب سازی سطلی( )bucketاز ) 𝑂(𝑛2می باشد؟ با تغییری در الگوریتم این زمان را بهبود داده و جواب خود را تحلیل کنید. پاسخ .بدترین زمان اجرا در مرتب سازی سطلی زمانی رخ می دهد که تمام عناصر ورودی در یک سطل قرار گرفته باشند از آنجایی که به صورت پیش فرض مرتب سازی سطلی از insertion-sortاستفاده می کندکه این الگوریتم داراری بدترین زمان اجرا ) 𝑂(𝑛2می باشد برای بهتر شدن زمان اجرا می توان از یک مرتب سازی با بدترین زمان اجرای )𝑛( 𝑂(logاستفاده کرد. مسئله ی .7 میانه ی آرایه ای با nعنصر را با xنشان می دهیم ،حال اگر بخواهیم تعداد 𝑘 ≤ 𝑛/2عنصر از این آرایه را انتخاب کنیم به طوری که x میانه این kعنصر شود بهترین الگوریتم ممکن برای این مسئله از چه مرتبه زمانی است؟(زمان اجرا برحسب پارامترهای n,kمی باشد) پاسخ .ابتدا با هزینه )𝑛(𝑂 میانه را پیدا میکنیم و عملیات بخش بندی را بر روی آن انجام می دهیم سپس با هزینه )𝑘(𝑂 K ،امین کوچکترین عنصر را بین عناصر سمت راست میانه یافته و با )𝑛(𝑂 عمل بخش بندی را انجام میدهیم و در نهایت با هزینه n/2-k ، kامین بزرگترین عنصر را بین عناصر سمت چپ میانه یافته و با )𝑛(𝑂 بخش بندی انجام میدهیم. در نهایت داریم )𝑛(𝑂 → )𝑘 𝑂(𝑛 + 2که زمان اجرای آن از مرتبه nمی باشد. مسئله ی .8 برای مرتب سازی آرایه nعضوی Aتنها مجاز به استفاده از رویه ی ) SQRTSORT(kبرای 𝑛√ 0 ≤ k ≤ 𝑛 −هستیم .این رویه زیر آرایه ]𝑛√ A[𝑘 + 1, 𝑘 +را به صورت درجا مرتب می کند .در بدترین حالت با چند بار فراخوانی SQRTSORTمی توان Aرا مرتب کرد(.با توضیحات کامل) پاسخ .اگر آرایه ورودی را به بازه های 𝑛√ 2 تایی تقسیم کنیم ( پس 𝑛√ 2تا بازه می شود)و هر بار با استفاده از تابع sqrtsort معرفی شده در باال 𝑛√ عنصر را مرتب می کنیم بعد از 𝑛√ 2فراخوانی در تکرار اول قرار می گیرند سپس این مراحل را مجدد تکرار می کنیم هر بار 𝑛√ 2 𝑛√ 2 بزرگترین عناصر آرایه در انتهای آرایه آرایه مرتب به انتهای آرایه اصلی اضافه می شوند در نهایت بعد از 𝑛√ 1+2+….+2√𝑛 =2n+2کل آرایه مرتب می شود که همانطور که مشخص است مرتبه زمانی این رابطه )𝑛(𝑂 میباشد. 3
© Copyright 2025 Paperzz