بحث در مورد سوالات ساختمان داده ۹۰
من اولیش که ساختمان داده بود را شروع کردم بقیه اش را بسم الله
لطفاً سوالاتتون و گزینه هاتون را با سوالاهای که در سایت دوستان برای دانلود گذاشتن یکی کنید تا بقیه را گیج نکنید فکر کنم مجموعه سوال A هست
(۳۰ بهمن ۱۳۸۹ ۰۷:۴۱ ب.ظ)www نوشته شده توسط: سلام
سوال ۵۳-۳ مثال درختی بکش به n,k هر عددی بدی گزینه ۳ میاد مثلا ۱۶ و۴ بده میبینی.
۵۴-۲ اینم با مثال عددی حل میشد.
۵۵-۳ ساختمان داده avl جواب میشد در ضمن بچهها هش نمیشه میدونین چرا چون در هش ممکن تصادم داشته باشیم و همه اعمالها در o(n) بشه.
بقیه شم نزدم
اما سوال ۵۲-من حساب کردم ۲۰۴۷ شد چون فقط توان های دو را با هم جمع میزنه از دو به توان یک تا دو به توان ۱۰ اما شک کردم نزدم.
(۳۰ بهمن ۱۳۸۹ ۰۸:۴۷ ب.ظ)afagh1389 نوشته شده توسط: 52 منم ۴ زدم.
در مورد سوال ۵۵ هم که یکی از دوستان گفتند که counting الگوریتمه نه ساختار داده بگم که منم نگفتم ساختار داده است ساختار داده ما آرایه است که با counting مرتب میکنیم اعداد رو و در O(1 هم جستجو،درج و حذف میکنیم.
(۳۰ بهمن ۱۳۸۹ ۰۸:۵۰ ب.ظ)hatami84 نوشته شده توسط: در مورد سوال ۵۳ به نظر من گزینه ۴ درسته بستگی داره که k , n چند در نظر گرفته بشه ماکزیمم اینها فکر کنم جواب درست تری بدهد.
(۳۰ بهمن ۱۳۸۹ ۰۹:۰۱ ب.ظ)Masoud05 نوشته شده توسط:(30 بهمن ۱۳۸۹ ۰۸:۴۷ ب.ظ)afagh1389 نوشته شده توسط: 52 منم ۴ زدم.
در مورد سوال ۵۵ هم که یکی از دوستان گفتند که counting الگوریتمه نه ساختار داده بگم که منم نگفتم ساختار داده است ساختار داده ما آرایه است که با counting مرتب میکنیم اعداد رو و در O(1 هم جستجو،درج و حذف میکنیم.
مرتب سازی شمارشی فقط برا حالاتی هست که بازه مشخص باشه و نه یه مقدار مثل n که به بینهایت میل میکنه. پس این تحلیل غلطه.
(۳۰ بهمن ۱۳۸۹ ۱۰:۴۴ ب.ظ)psps1368 نوشته شده توسط: سوال ۵۳: گزینه ۳، اگر منظور سوال از ارتفاع، طولانی ترین مسیر از ریشه تا برگ باشه، این جوری میشه: توی از ریشه به سمت پایین سعی کنید فقط n رو به دو تقسیم کنید. وقتی که به k و ۱ رسیدیم تا این جا log2 n رو داریم. حالا از این جا به پایین k رو تقسیم کنید تا به ۱ و ۱ برسید. تا این جا هم log4 k اومدیم پایین و در مجموع log2 n + log4 k
(۰۱ اسفند ۱۳۸۹ ۰۱:۰۷ ق.ظ)Masoud05 نوشته شده توسط: اینایی که میگید درست، اما من قصد دارم عدد تغریباً وسط آرایه رو حذف کنم، خوب چطوری بفهمم که کجا هست که در زمان خطی پیداش کنم و بعدش هم حذفش کنم .تو سوال نوشته فرقی بین آنها نیست. پس وسط و اول و آخر نداریم
در ضمن شما برای مرتب سازی شمارشی نیاز به n حافظه دارید چراکه باید خانه های خالی رو هم داشته باشید پس این روش از نظر حافظه بهینه نیست هر چند که جستجو در آن لگاریتمی هست و طبق راهکار شما باید هر جا داده داریم توی آرایه دیگه که تعداد هست ۱ واحد اضافه کنیم که اینم وابسته به جستجو هست و میشه لگاریتمی.
(۰۱ اسفند ۱۳۸۹ ۱۲:۵۸ ق.ظ)afagh1389 نوشته شده توسط: یه مدل الگوریتم شمارشی بر مبنای فراوانی نسبی است یعنی مثلا اگه شما ۵ تا یک دارید خونه با اندیس یک آرایه ۵ است پس وقتی میخواهید یک رو حذف کنید فقط کافیه محتوای آرایه رو یک واحد کاهش بدین برای جستجو هم کافیه چک کنید محتوا صفر نباشه.اینایی که میگید درست، اما من قصد دارم عدد تغریباً وسط آرایه رو حذف کنم، خوب چطوری بفهمم که کجا هست که در زمان خطی پیداش کنم و بعدش هم حذفش کنم .
الگوریتم counting به این خاطر کاربرد نداره که فضای حافظه زیادی اشغال میکنه ولی بقیه گزینهها فضای حافظه n است پس اینجا counting که رادیکال n است خیلی بهتره مخصوصا که بازه اعداد مشخصه!
(۰۱ اسفند ۱۳۸۹ ۰۳:۳۲ ب.ظ)www نوشته شده توسط: بله من درخت کشیدم
(۰۲ اسفند ۱۳۸۹ ۰۲:۱۱ ب.ظ)www نوشته شده توسط: در مورد سوال ۵۴ بازم مثله ۵۳ یه درخت بکش به گزینه دو میرسی فکر کنم این سوال فرق میکرد من دفترچم c بود گزینه یک میشد.اون درختی که شما می گی دیگه فضای اضافی نمی خاد.
ئر مورد سوال ۵۵ هم بگم تو کتاب کورمن فصل ۱۴ درحت اماره پویا جواب این سوال میشه که مطمینا گزینه ۳ جوابه البته اگه ملاک کورمن باشه که هست.
(۰۳ اسفند ۱۳۸۹ ۰۹:۵۱ ق.ظ)admin نوشته شده توسط: در مورد سوال ۵۱ ساختمان داده: گزینه ۴
با پیچیدگی nlogn میتوان لیست A و با همین پیچیدگی لیست B را مرتبسازی کرد.
برای گرفتن اشتراک دو لیست A و B هر کدام از اعضای A را به صورت باینری در لیست B جستجو مینماییم. در حالت متوسط و بدترین حالت تعداد هر جستجو برابر با logn خواهد بود و در نتیجه پیچیدگی جستجو برابر با nlogn در هر دو حالت متوسط و بدترین است.
بنابراین پیچیدگی الگوریتم طراحی شده برابر با ۳nlogn خواهد بود (در حالت متوسط و بدترین) و گزینه ۴ بهترین پاسخ به این سوال.
نکته: میتوان در زمان ۲n هم الگوریتم جستجو و یافتن اشتراک دو لیست مرتب را طراحی کرد. طراحی این الگوریتم به عنوان تمرین به شما واگذار میشود!!
(۰۲ اسفند ۱۳۸۹ ۰۷:۳۴ ب.ظ)admin نوشته شده توسط: سلام
من این چند روزه خیلی سرم شلوغ بوده. خوب گویا امسال پیشبینی من مبنی بر متفاوت بودن درست از آب در اومده.
سوال ۵۵ به نظر من گزینه ۱ کاملاً درسته. این دادهساختار رو میشه به راحتی به روش hash و با شماردن تعداد تکرارها به وجود آورد. توی متن سوال اشاره کرده که عناصر تکرار فرقی با هم ندارند، بنابراین تنها کافیه که تعداد تکرارها رو توی خانه مربوطه قرار بدیم.
الگوریتم اضافه عدد n برابر است با اضافه کردن مقدار خانه nام آرایه
الگوریتم حذف عدد n برابر است با کاهش مقدار خانه n ام، در صورتی که خانه n صفر نباشد( یعنی عنصر وجود داشته باشد)
الگوریتم یافتن عدد n برابر است با مقدار خانه n (که نشان دهنده تعداد موجود از n است) اگر این خانه صفر باشد یعنی عنصر وجود ندارد.
پیچیدگی ساختار بالا از لحاظ الگوریتمی برابر O1 و از لحاظ حافظه برابر طول آرایه یعنی رادیکال n است.
(۰۳ اسفند ۱۳۸۹ ۰۹:۵۱ ق.ظ)admin نوشته شده توسط: در مورد سوال ۵۱ ساختمان داده: گزینه ۴من این سوال رو گزینه ۱ زدم (میانگین و بدترین O(n)
با پیچیدگی nlogn میتوان لیست A و با همین پیچیدگی لیست B را مرتبسازی کرد.
برای گرفتن اشتراک دو لیست A و B هر کدام از اعضای A را به صورت باینری در لیست B جستجو مینماییم. در حالت متوسط و بدترین حالت تعداد هر جستجو برابر با logn خواهد بود و در نتیجه پیچیدگی جستجو برابر با nlogn در هر دو حالت متوسط و بدترین است.
بنابراین پیچیدگی الگوریتم طراحی شده برابر با ۳nlogn خواهد بود (در حالت متوسط و بدترین) و گزینه ۴ بهترین پاسخ به این سوال.
نکته: میتوان در زمان ۲n هم الگوریتم جستجو و یافتن اشتراک دو لیست مرتب را طراحی کرد. طراحی این الگوریتم به عنوان تمرین به شما واگذار میشود!!
(۰۳ اسفند ۱۳۸۹ ۱۱:۳۴ ب.ظ)admin نوشته شده توسط: در مورد hash که دوستمون مطرح کردند درباره سوال ۵۱ به هیچ وجه امکان چنین کاری وجود نداره. از لحاظ تئوری باید بدترین حالت رو در نظر بگیریم و بدترین حالت hash هر چند که متعادل هم باشه اینه که همه مقادیر به یک خانه map شوند و در این حالت الگوریتم مطرح شده شما از مرتبه n به توان ۲ خواهد بود. الگوریتم hash رو در مورد سوال ۵۵ میشد به کار برد اما توی این سوال نه.وقت به خیر.
(۰۴ اسفند ۱۳۸۹ ۰۱:۴۳ ق.ظ)admin نوشته شده توسط: hashMap رو نمیشه توی این موقعیت و برای این سوال به کار برد. شما تابع hash رو چه طور میخوای معرفی کنی که دو عضو غیر همتا هیچ برخوردی با هم نداشته باشند؟ دقت کنید که ما هیچ اطلاعی از نوع دادههای دو لیست نداریم. اگر به فرض مثال میدونستیم که همه دادهها عدد صحیح هستند و ... میشد با برخی کارها الگوریتم از مرتبه n ارایه داد اما الان چنین فرضی رو نمیشه کرد. فرض کنید که اعداد داخل آرایه از نوع اعشاری با تعداد بی نهایت اعشار باشند. شما چه hashMap ای رو میتونی طراحی کنی که بتونه این مسئله رو حل کنه؟ اصلاً این خودش یه مسئله NP هست که بشه یه ترتیب dictionary برای این اعداد پیدا کرد. چرا که بین هر دو عدد میتونه یه عدد دیگه قرار بگیره.
(۰۴ اسفند ۱۳۸۹ ۰۱:۳۶ ب.ظ)www نوشته شده توسط: سوال ۵۵ ساختمان داده:موقعی که الگوریتم بهتری داریمO(1) گزینه ۳ که قابل قبول نیست!
فرض میکنیم n=16 پس ما چهار تا عنصر داریم فرض کنیم هر چهر عنصر ما عدد ۲ باشد.
اگر از روش هش استفاده کنیم(با توجه به فصل ۱۱ کتاب کورمن میدانیم ۳ روش هش با ادرس دهی باز عبارتند از ۱-خطی ۲- مجذوری ۳- مضاعف) اگر از روش زنجیر استفاده کنیم چون گفته عناصر تکراری هیچ فرقی باهم ندارند برای درج ما چهار بار باید در خانه ۲ درج کنیم یعنی اگر تمام عناصر تکراری باشد بهn به توان یک دوم برای درج نیاز خواهیم داشت. پس روش هش جواب نمیدهد. در ضمن اگر از هر کدام از ۳ روش استفاده کنیم باز همون زمان بالا برقرار خواهد بود.
با توجه به فصل ۱۴ کتاب کورمن و با استفاده از درخت آماره پویا هر سه عمل جواب lgn میباشد.
با این اوصاف گزینه ۳ درست است.
نقل قول: سوال ۵۵ ساختمان داده:
فرض میکنیم n=16 پس ما چهار تا عنصر داریم فرض کنیم هر چهر عنصر ما عدد ۲ باشد.
اگر از روش هش استفاده کنیم(با توجه به فصل ۱۱ کتاب کورمن میدانیم ۳ روش هش با ادرس دهی باز عبارتند از ۱-خطی ۲- مجذوری ۳- مضاعف) اگر از روش زنجیر استفاده کنیم چون گفته عناصر تکراری هیچ فرقی باهم ندارند برای درج ما چهار بار باید در خانه ۲ درج کنیم یعنی اگر تمام عناصر تکراری باشد بهn به توان یک دوم برای درج نیاز خواهیم داشت. پس روش هش جواب نمیدهد. در ضمن اگر از هر کدام از ۳ روش استفاده کنیم باز همون زمان بالا برقرار خواهد بود.
با توجه به فصل ۱۴ کتاب کورمن و با استفاده از درخت آماره پویا هر سه عمل جواب lgn میباشد.
با این اوصاف گزینه ۳ درست است.
موقعی که الگوریتم بهتری داریمO(1) گزینه ۳ که قابل قبول نیست!
الگوریتم بهتر را میشه توضیح بدهید؟
(۰۴ اسفند ۱۳۸۹ ۰۲:۲۵ ب.ظ)www نوشته شده توسط:دکتر تنهایی که گفتن.نقل قول: سوال ۵۵ ساختمان داده:
فرض میکنیم n=16 پس ما چهار تا عنصر داریم فرض کنیم هر چهر عنصر ما عدد ۲ باشد.
اگر از روش هش استفاده کنیم(با توجه به فصل ۱۱ کتاب کورمن میدانیم ۳ روش هش با ادرس دهی باز عبارتند از ۱-خطی ۲- مجذوری ۳- مضاعف) اگر از روش زنجیر استفاده کنیم چون گفته عناصر تکراری هیچ فرقی باهم ندارند برای درج ما چهار بار باید در خانه ۲ درج کنیم یعنی اگر تمام عناصر تکراری باشد بهn به توان یک دوم برای درج نیاز خواهیم داشت. پس روش هش جواب نمیدهد. در ضمن اگر از هر کدام از ۳ روش استفاده کنیم باز همون زمان بالا برقرار خواهد بود.
با توجه به فصل ۱۴ کتاب کورمن و با استفاده از درخت آماره پویا هر سه عمل جواب lgn میباشد.
با این اوصاف گزینه ۳ درست است.
موقعی که الگوریتم بهتری داریمO(1) گزینه ۳ که قابل قبول نیست!
الگوریتم بهتر را میشه توضیح بدهید؟
(۰۴ اسفند ۱۳۸۹ ۰۱:۴۳ ق.ظ)admin نوشته شده توسط: hashMap رو نمیشه توی این موقعیت و برای این سوال به کار برد. شما تابع hash رو چه طور میخوای معرفی کنی که دو عضو غیر همتا هیچ برخوردی با هم نداشته باشند؟ دقت کنید که ما هیچ اطلاعی از نوع دادههای دو لیست نداریم. اگر به فرض مثال میدونستیم که همه دادهها عدد صحیح هستند و ... میشد با برخی کارها الگوریتم از مرتبه n ارایه داد اما الان چنین فرضی رو نمیشه کرد. فرض کنید که اعداد داخل آرایه از نوع اعشاری با تعداد بی نهایت اعشار باشند. شما چه hashMap ای رو میتونی طراحی کنی که بتونه این مسئله رو حل کنه؟ اصلاً این خودش یه مسئله NP هست که بشه یه ترتیب dictionary برای این اعداد پیدا کرد. چرا که بین هر دو عدد میتونه یه عدد دیگه قرار بگیره. در مورد مصاحبه شرکتها و غیره:
متد ۱ اش: که پیچیدگی مرتبسازی رو غلط نوشته! nlogn هست نه logn.
متد ۲ اش: با فرض مقدار صحیح بودن از hashMap استفاده کرده که کاری بس آسان و شدنی است. اما با فرضهای دیگه محال و غیر ممکن است.