ساختمان دادهها و الگوریتمها نیم سال دوم 93-92 دانشکده مهندسی کامپیوتر تمرین سوم مدرس :دکتر جمزاد پشته ،صف و مقدمات درخت تاریخ 23 :اسفند سوال :1 صف Qکه شامل Nعنصر است با کمک دو پشتهی s1و s2ساخته شدهاست. (آ) چند بار PUSHبرای درج یک عنصر به صف الزم هست؟ (ب) فرض کنید بدین صورت مساله را در نظر میگیریم که برای درج یک عنصر در انتهای صف باید ) PUSH(S1و برای حذف یک عنصر از ابتدای صف در صورتی که پشتهی دوم خالی نباشد باید ) POP(S2را انجام دهیم وگرنه همه عناصر پشتهی اول را POPنموده و در پشتهی دوم وارد مینماییم ،حال عمل POPبر روی پشتهی دوم عنصر ابتدایی صف را باز میگرداند که جواب میباشد .در ابتدا با استفاده از تحلیل سرشکن Aggregate Methodثابت کنید که هزینهی دو کار قیدشده در باال برابر ) O(1است؟ اگر بر روی صف که در ابتدا خالی میباشد 200عمل صورت گیرد مثل درج در ابتدا و حذف از انتها حداکثر هزینه به چه صورت است؟ حل( :آ) 2N+1 (ب) PUSH = 199 , POP = 199+1 TOTAL = 399هزینه های مرتبط با هر یک از عناصر حداکثر 4خواهد بود )PUSH(S1) POP(S1) PUSH(S2)POP(S2 کران باالی هزینههای واقعی از Nعملیات T(N) = 4Nخواهدشد لذا هزینهی استهالک برابر )T(N)/N = 4 = O(1 سوال :2 برای استفاده از لیست پیوندی تک سویه ،انتظار داریم در آن دور وجود نداشته باشد .اما ممکن است یک لیست پیوندی درست ایجاد نشده باشد و در آن دور وجود داشتهباشد .می خواهیم پیش از شروع کار با یک لیست پیوندی تشخیص دهیم که در آن دور وجود دارد یا خیر .الگوریتمی با پیچیدگی زمانی ) O(nو پیچیدگی حافظه ) O(1ارائه دهید که این کار را انجام دهد. حل :از دو متغیر countو pointerاستفاده میکنیم .از ابتدای لیست پیوندی شروع به جلو رفتن در لیست میکنیم و تعداد حرکتها را نیز در متغیر countنگه می داریم .اگر پس از یک حرکت به انتهای لیست رسیدیم اعالم میکنیم که لیست دور ندارد .پس از هر حرکت ،اگر مقدار countتوانی از دو بود ،اشارهگر به خانهی فعلی لیست را در pointerنگه میداریم .اگر در هر مرحلهای وارد خانهای شدیم که pointerبه آن اشاره میکند اعالم میکنیم که لیست دور دارد. 1 سوال .3 دو پشتهی S1و S2به شما داده شدهاست .در پشتهی ،S1اعداد 1تا nبه ترتیب قرار قرار گرفتهاند و پشتهی S2در ابتدا خالی است .میخواهیم اعداد پشتهی S1به همین ترتیب در S2قرار بگیرند .برای این کار تنها مجازیم در هر مرحله یکی از این اعمال را انجام دهیم: عنصر باالی S1را خارج کنیم و در باالی S2وارد کنیم. عنصر باالی S2را خارج کنیم و در باالی S1وارد کنیم. عناصر باالی دو پشته را جابهجا کنیم. روشی برای انجام این کار ارائه کنید. حل :سه عمل گفتهشده در صورت سوال را Op2 ،Op1و Swapمینامیم .تابع بازگشتی ) k ،transfer(kعنصر باالی پشتهی 1را به همان ترتیب که هستند ،به باالی پشتهی 2منتقل میکند .بنابراین کافیاست ) transfer(nرا اجرا کنیم تا عناصر به همان ترتیب که در پشتهی 1بودند ،در پشتهی 2قرار بگیرند. سوال .4 با شبه کد ،یک پیاده سازی (از هر مرتبه زمانی) ارائه دهید که با کمک یک صف و حداکثر ) O(1حافظهی اضافی ،داده ساختار پشته را شبیهسازی کند .فرض کنید در صف تنها اعمال Enqueueو Dequeueپیادهسازی شدهاند و باید توابع Top ،Pop ،Pushو Sizeرا برای پشته پیادهسازی کنید. حل :از یک صف به نام Qاستفاده میکنیم و در یک متغیر به نام sizeتعداد عناصر موجود در صف را نگه میداریم: 2 سوال .5 ترتیب میانوندی ) (LVRدرخت دودویی با ترتیب پیشوندی ) (VLRو پسوندی ) (LRVزیر که هر گره دارای دو فرزند است را همراه با نمایش درخت مربوطه بیابید: A C M I L K H G B J F E P O D :LRV L K I H M G C F P O E J D B A :VLR حل :به راحتی با توجه به دو عبارت داده شده ریشه Aو زیر درخت چپ و راست مشخص هست درخت : ))A(B(DJ(E(OP)F))C(GM(NI(KL LVR: D B O E P J F A G C H M K I L سوال .6 تعداد درختان دودویی متوازنی که با ارتفاع برابر Hو با Mعنصر میتوان ساخت را بیابید: )H = floor (lg M حل :درخت پری که با حذف برگ های این درخت بدست میآید دارای ارتفاع ،H-1 با اضافه نمودن برگ ها به تعداد حداقل 1و حداکثر گره و برگ است پس (– Mبه آن ،درخت بدست میآید .در ارتفاع Hدرخت به علت متوازن بودن برگ دارد لذا تعداد حاالتی که بدست میآید برابر 3 است.
© Copyright 2025 Paperzz