سلام
من محمد حیدری راد هستم دانشجوی مهندسی کامپیوتر دانشگاه امیرکبیر
ورودی ۹۹
سال ۱۴۰۲ مدال نقره المپیاد کامپیوتر دانشجویی رو کسب کردم و دوست دارم منابعی که استفاده کردم و کار هایی که انجام دادم رو بهتون بگم
البته همین اول بگم که از راهنمایی های اقای امیر پورمند هم استفاده کردم و دیگه راجع به مزایای المپیاد و نحوه شرکت کردن صحبت نمیکنم چون ایشون به نظرم خیلی کامل توضیح دادن، لینک پستشون:
https://virgool.io/bitokss/%D9%85%D9%86%D8%A7%D8%A8%D8%B9-%D8%A7%D9%84%D9%85%D9%BE%DB%8C%D8%A7%D8%AF-%D8%AF%D8%A7%D9%86%D8%B4%D8%AC%D9%88%DB%8C%DB%8C-%D9%85%D9%87%D9%86%D8%AF%D8%B3%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-sixl3hlg4vpq
خب همونطور که میدونین المپیاد کامپیوتر دانشجویی شامل ۵ تا درسه که باید ۴ تاش رو امتحان بدید و یکیش رو باید حذف کنید
حذف کردن هم اینطوریه که یه برگه میارن همون اول جلسه و اسم درسی که نمیخواید امتحان بدید رو مینویسید و امضا میکنید که امتحان نمیدید، و اصلا سر اون درس نباید برگه امتحان رو تحویل بگیرید و برید سر صندلیتون ( میتونید استراحت کنید زمانشو بیرون از جایی که برگزار میشه )
درس ها و منابعی که خوندم :
---نظریه زبان ها و ماشین ها:
از درس هاییه که میتونن خیلی سوال های سخت و خلاقیتی بدن ازش (و میدن)، ذات درس اینطوریه که شمارو توی یه دنیای بینهایتی از زبان ها و ماشین ها و هرچیزی که هست داخل درسش گم میکنه و باید یاد بگیرید چطوری توی این دنیایی که ساخته فکر کنید و مسیر راه حل رو پیدا کنید.
برای شروع پیشنهاد میکنم دوره همین درس رو از دکتر سعید ابریشمی (هیات علمی دانشگاه فردوسی مشهد) ببینید:
http://kfe.um.ac.ir/streams/course/view/98.html
ایشون کتاب پیتر لینز رو درس میدن که خیلی ساختار خوبی داره و مرجع اصلی درسه
Introduction to formal languages and automata
و همزمان هر درسی که میخونید سوال هاش رو شروع کنید حل کردن (هرچی جلو تر میرید ایده هایی که باید روی سوال ها بزنید نیاز بیشتری به فکر دارن)
در مرحله بعد یه کتاب هست که مایکل سیپسر نوشته و طراح ها خیلی به ایده هاش علاقه دارن چون خیلی جذاب تر و به ذهن نرس تره ایده هایی که استفاده میکنه
Introduction to the theory of computation
که خود مایکل سیپسر یه دوره داره (توی mit ocw ) و همین کتاب رو خیلی خلاصه درس میده، پیشنهاد میکنم ویدیو هاش رو ببینید و همزمان سوال ها و تمریناش رو حل کنید( تا قسمت 8 که undecidability رو میگه به سیلابس مربوط میشه):
https://ocw.mit.edu/courses/18-404j-theory-of-computation-fall-2020/
تاکید میکنم خیلی کتاب خفنیه و اگر مثل من درسش رو دوست داشته باشید خیلی لذت خواهید برد
فکر طراح: از همه بخش هاش سوال میدن ولی به مستقل از متن و ماشین پشته ای علاقه خاصی دارن (مرحله دو یادمه همه سوالاش مربوط به همین بخش بود)
---ساختمان داده و طراحی الگوریتم:
درس خیلی قشنگیه و به شدت گستردس و معمولا تو دانشگاه ها تحت عنوان دو تا درس "ساختمان داده" و "طراحی الگوریتم" جداگانه تدریس میشه
کتاب مرجع خب سلطان introduction to algorithms عه که به CLRS معروفه
پیشنهاد میکنم دوره همین کتاب رو از mit ocw ببینید و همزمان کتاب رو بخونید و سوالای تمرین هاش و مسئله های ته فصل هاش رو کامل حل کنید:
https://ocw.mit.edu/courses/6-046j-introduction-to-algorithms-sma-5503-fall-2005/
من کتاب 600 مسئله دکتر قدسی هم داشتم، برای شروع خوبه و اینکه با ایده های ساده مختلف آشنا شید، برای وقتی تازه یه فصل رو خوندید میتونه مفید باشه ولی ایده هاش عمیق نیست.
یه کتاب دیگه هست introduction to algorithms a creative approach نوشته یودی منبر که خیلی کتاب عالی ایه، به اندازه CLRS جامع نیست ولی نحوه بیانش خیلی بهتره
مثلا CLRS میگه این سوالمونه و این راه حلشه تموم
ولی این creative میاد میگه این سواله خب بیاید این کارو کنیم اون کارو کنیم عه خب غلط شد پس توی این دام نیفتید، خب بیاید این راهو بریم اینکارو کنیم بازم غلط شد پس تو این دام هم نیفتید، عه یه ایده جدید میشه زد، خب به راه حل رسیدیم
قشنگ طرز فکر بهتون میده جای اینکه سوال جواب بهتون بده
فکر طراح: فصل هایی که خیلی بهش علاقه دارن dp و greedy و maximum flow هستش، و همینطور از یه سری فصل ها که جزو سیلابس اصلی درس نیست هم سوال میدن، مثلا هندسه محاسباتی و پوش محدب و الگوریتم های تقریبی، کتاب CLRS رو هرچی کامل تر بخونین برد کردین چون طراح محدودیتی انگار نداره
تحلیل مجانبی (پیچیدگی محاسباتی) هم مسلط باشین چون هر الگوریتمی که توصیف میکنین باید مرتبه زمانیش هم بدین.
---سیستم های عامل
دوره سعید ابریشمی برای این درس رو پیشنهاد میکنم، با اینکه کتاب استالینگز رو درس میده و منبع اصلی os کتاب سیلبرشاتسه ولی تنها دوره ای بود که تونستم پیدا کنم (انصافا خیلی خوب توضیح میدن)
در کنارش کتاب سیلبرشاتس رو بخونید و سوال هاش رو حل کنید (کتاب روونیه پیشنهاد میکنم)
کتاب دکتر حقیقت رو من خریدم ولی نرسیدم بخونم، انگار اقای امیر پورمند خیلی ازش راضی بوده ولی قسمت نبود بخونمش
فکر طراح: سخت ترین سوال های المپیاد یادمه از synchronization بود که میگفت این مسئله رو داریم، با فلان ابزار (مثلا mutex یا مانیتور یا...) پیاده سازیش کنید(متاسفانه از این نوع سوال ها تو منابع زیاد نیست و خیلی به خلاقیت خودتون و تسلطتون به این درس بستگی داره بتونین حل کنین یا نه)
بقیه سوالاش خیلی سخت نبودن
---مدار های منطقی و معماری کامپیوتر
پیشنهاد میکنم دوره مدار های منطقی دکتر زین العابدین نوابی رو ببینین، خیلی عالی تدریس میکنن
و بعدش دوره معماری کامپیوتر مازیار گودرزی
و کتابی که پیشنهاد میکنم بخونین معماری کامپیوتر مانو عه، چون تو ۳ فصل اینا مدار منطقی رو مرور میکنه و این ۳ فصل حدود ۶۰ تا سوال مدار منطقی دارن که میتونه ببنده مدار منطقیو براتون تقریبا
بعد از اون سعی کنین کل فصل های کتاب رو بخونین (به جز پردازش موازی که خوشه ها و اینا رو میگه چون من نه تو المپیاد دیدم نه تو سیلابس جایی)
و سوالات آخر هر فصل رو حتما حل کنین
کتاب رهیافت حل مسئله در معماری کامپیوتر که اقای پورمند گفته بود هم خیلی خوبه من جز فصل آخرش رسیدم کلشو حل کنم و خیلی راضی بودم.
فکر طراح: خیلی روی فصل طراحی کامپیوتر پایه تمرکز کنین چون خیلی روش مانوور میدن و معمولا چند تا سوال از تحلیل و طراحی ازش میدن
همینطور فصل microprogramming که معمولا تو دانشگاه ها تدریس نمیشه (ولی مازیار گودرزی درس داد) ولی توی المپیاد اومد
همینطور فصل برنامه نویسی کامپیوتر پایه چون یه سوال کوچیک ازش یادمه اومد که میخواست یه محاسباتی رو انجام بده، گفته بود کدش رو به صورت اسمبلی ای که دادیم بنویسید و باینری هر دستور هم جلوش بنویسید
از مدار منطقی هم روی طراحی مدار ترتیبی و هازارد هم سوال اومد یادمه
خیلی روی این درس وقت بذارید چون ایده جدید تقریبا نداره و اگر بلدش باشید حتی میشه فول مارکش کرد.
---شبکه های کامپیوتری
هنوز پاس نکردم امتحانش هم ندادم نظری ندارم :)
در پایان امیدوارم مفید باشه واستون و براتون آرزوی موفقیت دارم