HW5_Solution.pdf

‫تمرین سری پنجم‬
‫ساختمان داده‬
‫زمان تحویل‪:‬‬
‫مسئله ی ‪.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‬‬