خب، من سعی کردم تمام منابعی که برای المپیاد کامپیوتر توصیه میشن رو اینجا لیست کنم، به همراه یه سری توصیه و نکتهی مفید در مورد کتابها.
چند تا توصیهی کلی هم میکنم:
۱. در مورد بعضی کتابها، نسخهی انگلیسی خیلی بیشتر توصیه میشه. بیشتر ۲ تا دلیل داره، یکی اینکه بعضی کتابها ترجمهی خوبی ندارن (مثلا وست) و اونیکی دلیل هم اینه که بهتره کمکم عادت کنید به انگلیسی خوندن، چون بعد از رد کردن مرحلهی ۳ اکثر منابع سوال (که سایتهای برنامهنویسی هستن) به زبان اصلی هستش.
کتاب درسی انگلیسی خوندن هم نیازی به تافل و اینجور چیزها نداره، اوایل شاید اصطلاحها (مثلا اینکه رأس، یال، ... به انگلیسی چی میشه) رو نفهمید، اما کمکم میبینید که با یاد گرفتن همین اصطلاحها بخش زیادی از کارتون راه میافته.
۲. من سعی کردم فقط بخشهایی از کتابها رو تحلیل کنم که به المپیاد کامپیوتر بیشتر ربط داره. خیلی از کتابها بین ریاضی و کامپیوتر مشترکه، و من در مورد بخش ریاضیش هیچ ایدهای ندارم.
۳. کتابها رو فعلا توی ۴ دستهی ترکیبیات، گراف، الگوریتم و مسأله دستهبندی کردم. احتمالا یه دستهی «برنامهنویسی» هم اضافه میشه به اینها
مباحث مطرح شده در آزمون مرحله ۲:
سرفصلهای آزمون به طور کلی عبارتاند از: گرافها (تعاریف و مسائل اولیهی گرافها و درختها)، ترکیبیات و استراتژیهای حل مسئله (استقرا، دوگونهشماری، لانهکبوتری، ناوردایی، آنالیز ترکیبی، اصل شمول و عدم شمول، بازیهای ترکیبیاتی، اکسترمال و رنگآمیزی)، احتمالات (تعاریف اولیه)، خلاقیت ریاضی، الگوریتمها (حریصانه، بازگشتی و جستجوی دودویی) و ساختماندادهها (لیست، صف، پشته و آرایه).
منابع معرفی شده توسط کمیته المپیاد کامپیوتر:
- ریاضیات سال اول و دوم متوسط، انتشارات چاپ و نشر کتابهای درسی ایران.
- جبر و احتمال سال سوم متوسطه-نظری، انتشارات چاپ و نشر کتابهای درسی ایران.
- ریاضیات گسسته دورهی پیشدانشگاهی-رشته علوم ریاضی، انتشارات چاپ و نشر کتابهای درسی ایران.
- الفبای المپیاد ریاضی، مرتضی محمدآبادی، انتشارات دانشپژوهان جوان.
- استراتژیهای حل مسئله، آرتو انگل (مترجم: یاسر احمدی فولادی)، انتشارات دانش پژوهان جوان.
- دادهساختارها و مبانی الگوریتمها، محمد قدسی، انتشارات فاطمی.
- مقدمهای بر الگوریتمها، توماس کورمن (مترجم: علی دهقان)، انتشارات نص.
- ساختارهای گسسته، بهروز قلیزاده، انتشارات دانشگاه شریف.
کتاب ها مفید دیگر:
ترکیبیات:
عنوان فارسی: اصول و فنون ترکیبیات
عنوان انگلیسی: Principles and Techniques in Combinatorics
شهرت: PTC
نویسنده: چن چوان-چنگ، که کی-منگ
ترجمه: یاسر احمدی فولادی
انتشارات: دانش پژوهان جوان
توضیح: بخش شمارش، آموزش و تمرینات خوبی داره و بیشتر برای همین بخش استفاده میشه. ممکنه یه کم سختتر از بقیهی کتابها پیدا بشه.
عنوان: ترکیبیات
شهرت: ترکیبیات زرد
نویسنده: علیرضا علیپور
انتشارات: فاطمی
عنوان: روش های ترکیبیات جلد ۱ تا ۴
نویسنده: علیرضا علیپور
انتشارات: رهاورد (وابسته به فاطمی)
عنوان: آنالیز ترکیبی
نویسنده: علی رضا علیپور
انتشارات: الگو
عنوان: جلوههای ترکیبیات
نویسنده: عباس ثروتی
انتشارات: دانش پژوهان جوان
عنوان: «ریاضیات انتخاب» یا «چگونه بدون شمردن بشماریم؟»
نویسنده: ایوان نیون
ترجمه: بتول جذبی و علی عمیدی
انتشارات: مرکز نشر دانشگاهی
عنوان فارسی: استراتژیهای حل مسأله
عنوان انگلیسی: Problem Sovling Strategies
شهرت: استراتژی
نویسنده: آرتور انگل (Arthur Engel)
ترجمه ۱: آرش امینی، داود وکیلی، مصطفی هاشمی، محسن جمالی
ترجمه ۲: یاسر احمدی فولادی (دانش پژوهان جوان)
توضیح: این کتاب یه منبع مشترک برای المپیاد کامپیوتر و ریاضی هست. برای همین بعضی سوالها بیشتر به ریاضی مربوط هست (مثلا تا جایی که یادمه سوالهای اکسترمال خیلی ریاضی بود) بخشهای ناوردایی، رنگآمیزی، لانهکبوتری و بازیها خیلی درس/مسائل خوبی دارند. بعضی جاهای بخش «روشهای دیگر حل مسئله» هم خوبه.
نسخهی الکترونیکی: انگلیسی (pdf)
گراف:
یه زمانی، گراف بخشی از ترکیبیات حساب میشد، اما بعدا خیلی گسترش پیدا کرد، و همونطور که مثلا ترکیبیات از ریاضی جدا شده بود، گراف از ترکیبیات جدا شد. به هر حال، الآن یه بخشی مهمی از المپیاد کامپیوتر به دانش گرافی بر میگرده. خلاصه اینکه مهمه.
عنوان فارسی: آشنایی با نظریه گراف
عنوان انگلیسی: Introduction to Graph Theory
شهرت: وست (West)
نویسنده: داگلاس ب. وست (Douglas B. West)
مترجم: بیژن شمس
انتشارات: گسترش علوم پایه
توضیح: به نظرم بهترین منبع برای گراف همین کتابه. هم درسهاش هم تمرینهاش خیلی خوبه. خیلی از ترجمهاش بدی شنیدم، اگه میتونید انگلیسیش رو بخونید.
نسخهی الکترونیکی: انگلیسی (pdf) (حلالمسائلش (pdf) هم به صورت جدا هست، که توی خود کتاب نیست)
که این کتاب مهمه و مرجع حساب میشه یه جورایی ولی خب به هر حال کتاب های دیگه ای هم هستند:
*آشنایی با نظریه گراف (فاطمی _ دکتر محمودیان )
*نظریه گراف (باندی و مورتی)
این کتاب پی دی اف اش انگلیسی و ترجمه فارسیش در اینترنت موجوده که میتونید دانلود کنید.
الگوریتم:
تحلیل الگوریتم، ساختمان داده، راهبردهای متفاوت (حریصانه، داینامیک، ...)، الگوریتمهای گراف (DFS، BFS، تور اویلری، کوتاهترین مسیر، MST، MaxFlow، ...)، و یه سری الگوریتمهای پیشرفتهتر (هندسی، نظریه اعداد، ...) کتاب های الگوریتم به تنهایی باعث نمیشوند که برنامهنویسی شما قوی شه و باید اموخته شما در جاهای مختلف تمرین شه.
عنوان فارسی: مقدمه ای بر الگوریتم ها
عنوان انگلیسی: Introduction to Algorithms
شهرت: CLRS (مخفف اسم چهار نویسنده)
نویسنده: Cormen, Leiserson, Rivest, Stein
مترجم: علی دهقان
انتشارات: نص
توضیح: این کتاب تقریبا کتاب مرجع الگوریتم (برای المپیادیها) حساب میشه.
نسخهی الکترونیکی: انگلیسی (pdf)
عنوان فارسی: طراحی الگوریتم با رویکرد خلاقانه
عنوان انگلیسی: "Intorduction to Algorithms - A Creative Approach"
شهرت: کریتیو (Creative)
نویسنده: یودی منبر (Udi Manber)
ترجمه: احمد صادقی صفت، سید علی حسینی
انتشارات:ناشر مولف
توضیح: ترجمه فوق شامل 7 فصل اول کتاب میباشد و ترجمه کامل آن تا پایان سال 95 توسط انتشارات دانش پژوهان جوان چاپ میشود)
نثر کتاب (بر خلاف CLRS) خیلی خوبه.
نسخهی الکترونیکی: انگلیسی (djvu - می تونید با استفاده از برنامه DjView بازش کنید)
مقایسهی CLRS و Creative:
همونطوری که گفتم، CLRS خیلی کامله و تقریبا مرجعه. اما این دلیل بر بهتر بودنش نیست. Creative خیلی نثر سادهتر و بهتری داره، طراحی الگوریتم رو پله-به-پله و اکثرا با استقرا پیش میبره (برعکس CLRS که گاهی اوقات یکدفعه یه الگوریتم از جیبش در میاره) برای همین دید خیلی خوبی میده.
مسأله:
توی المپیاد کامپیوتر، علاوه بر «قدرت حل مسأله»، «قدرت فکر به مسأله» خیلی مهمه. این یعنی چی؟ یعنی اینکه وقتی یه مسألهای میبینید، یا حل میشه (که در عین حفظ آرامش خوشحال میشید) یا نه. اگر حل نشد، شما باید طبیعتا روی مسأله فکر کنید. حالا خیلی مهمه که شما چقدر (بعد زمانی/جسمی/روحی/....) میتونید به مسأله فکر کنید. فکر کردن هم یعنی امتحان کردن روشهای مختلف برای حمله(!) به مسأله. شاید احساس کرده باشید که بعد از یه مدت فکر کردن به یه مسأله که حل نمیشه، دیگه هیچ ایدهای در مورد مسأله ندارید و فقط دارید راههای تکراری قبلی رو امتحان میکنید، که این خوب نیست و باید همیشه بتونید ایدههای جدیدی داشته باشید. نتیجه اینکه حل کردن مسألههای متنوع خیلی مهمه. شما باید هر چقدر میتونید مسأله حل کنید و با ایدههای جدید و مهمتر از اون، با «خسته نشدن در برابر سوال» آشنا بشید. کتابهایی که تو این لیست هستن، کتابهایی هستن که فقط (و فقط) شامل مسأله هستن. (بعضیهاشون جواب هم دارن)
عنوان: مسئلههای الگوریتمی
نویسنده: محمد قدسی، محمد مهدیان
توضیح: مسئلههای این کتاب توی دو بخش تئوری و برنامهنویسی هستن. کلا مسألههای خوبی داره.
عنوان: معماهای الگوریتمی
نویسنده: محمد قدسی، یاشار گنجعلی
توضیح: شبیه کتاب قبلی، اما مسألههای این کتاب بیشتر جنبهی معما دارن و به صورت محض با علوم کامپیوتر درگیر نمیشن. (من خیلی خوشم نمیاومد ازش)
عنوان: محافل ریاضی (تجربه روس ها)
نویسنده: د.فومین / س.گنکین / ای.ایتنبرگ
ترجمه: ارشک حمیدی/مهرداد مسافر
انتشارات:فاطمی
عنوان : ۲۵۰ مسئله ترکیبیات و ۱۰۲ مسئله ترکیبیات
انتشارات:هر دو از انتشارات فاطمی
عنوان: مسألههای المپیاد ریاضی در شوروی
شهرت: شوروی
نویسنده نیکلای یوری سوویچ واسیلیف، آندره آلکساندروویچ یه گوروف
ترجمه: پرویز شهریاری
نشر: توسعه
توضیح: واضحه که سوالهای المپیاد ریاضی هستش، اما سوالهای خیلی خوب برای کامپیوتریها توش وجود داره. مشکل این که بفهمید سوالها به کامپیوتر مربوط هست یا نه رو میتونید به سه روش حل کنید: ۱. خودتون بفهمید ۲. انتهای کتاب لیست موضوعی داره، شمارهی سوالهای موضوعهای دلخواه رو علامت بزنید و بعد همونا رو حل کنید ۳. از یه کسی که قبلا این کارها رو کرده بگیرید
نسخهی الکترونیکی: فارسی
عنوان: مسئله های المپیاد روسیه
مترجم: ابولفضل اسدی
مسئله های خوبی داره و زحمت ترجمش رو ابولفضل اسدی کشیده. نسخه الکترونیکی: فارسی pdf
نکته : به گفتهی مترجم، فایل بالا در زمان کم و بدون ویرایش تهیه شده است و ممکن است اشتباهاتی داشته باشد. نسخهی ویرایش شده به زودی در اختیار شما قرار خواهد گرفت.
عنوان: pdf آموزش و مسائل داینامیک
نویسنده: محمد مهینی
توضیح: این pdf مسائل خیلی خوبی داره و اگه مسائلش رو حل کنید در حل مسائل داینامیک بشرفت زیادی می کنید.
نسخه الکترونیکی: فارسی pdf