چگونه از این کتاب استفاده کنیم؟

این کتاب جهت آمادگی برای شرکت در المپیاد کامپیوتر طراحی شده است اما همه علاقه‌مندان می توانند از آن استفاده کنند.

درون کتاب مباحث گراف مربوط به المپیاد کامپیوتر اعم از تعاریف و مباحث تئوری، الگوریتم ها و داده ساختار ها گنجانده شده است. همراه با هر الگوریتم یا داده ساختار، کد آن به زبان C++ نیز قرار داده شده است. با توجه به این که در مراحل نهایی المپیاد کامپیوتر شما باید این زبان را بلد باشید و از آن استفاده کنید، اکیدا توصیه می شود که پیش از شروع به مطالعه این کتاب، آشنایی مختصری با این زبان داشته باشید که هم بتوانید از نمونه کد های موجود در کتاب استفاده کنید و هم بتوانید مسائل برنامه نویسی که به صورت لینک در کتاب قرار داده شده است را حل کنید.

سیر کتاب به صورت مقدماتی به پیشرفته چیده شده است و ممکن است که مباحث جلوتر به مباحث قبل نیاز داشته باشند. بنابراین توصیه می‌شود که کتاب را به ترتیب بخوانید و خوب است که حتی اگر مبحثی را بلد هستید، نگاهی به درس نامه داشته باشید تا زیر مبحثی از دست شما در نرود.

مسائل

مسائل از اهمیت دو چندانی نسبت به درس نامه قرار دارند. حل مساله ذهن شما را پرورش می‌دهد و باعث تسلط بیشتر شما می‌شود. مهارت حل مساله چیزی است که از شما در المپیاد خواسته می‌شود و در زندگی نیز به شما کمک می‌کند. به مسائل مثل یک پازل نگاه کنید و از حل آن ها لذت ببرید.

هر جای این کتاب که از شما خواسته می شود که چیزی را اثبات کنید، نشان دهید، تعیین کنید یا محاسبه کنید، شما باید یک اثبات ریاضی ارائه کنید. در برخی از مسائل شما شهود خوبی دارید که حکم باید برقرار باشد یا می توانید جواب را با مثال های کوچک حدس بزنید، اما این کافی نیست و باید برای هر گزاره ای که مطرح می کنید، دلیل بیاورید.

بعضی از مسائل در کنار خود علامت کوچکی دارند. این علائم معنای خاصی دارند. منفی (-) به معنای دستگرمی، علامت تعجب (!) به معنای سوال آموزنده و مثبت (+) به معنای سوال چالشی و بعضا نیازمند دانش بیشتر می باشد.

رفع اشکال

طبیعی است که نتوانید بعضی از مباحث را درک کنید. این مباحث به عنوان دوره های دانشگاهی تدریس می‌شوند و برای شما به عنوان یک دانش‌آموز ممکن است سخت باشد که از روی کتاب آن‌ها را یاد بگیرید. این مباحث معروف هستند و نوشته‌ها و فیلم‌های زیادی درون اینترنت برای یادگیری آن‌ها وجود دارد. هم چنین می توانید سوالات خود را از دوستانتان بپرسید. انجمن های آنلاین مکان های خوبی برای این کار هستند. برای مثال گروه شاز یک گروه آنلاین است که می توانید در آن سوال بپرسید و هم سن و سال های خودتان به سوالاتتان پاسخ می دهند.

تعاریف گراف بسیار زیاد هستند و ممکن است آن ها را فراموش کنید. هدف این کتاب از آموزش گراف، به هیچ وجه حفظ تعاریف نیست. هرگاه که تعریفی را فراموش کردید، می توانید از درس نامه یا از این صفحه آن ها را مرور کنید. اگر تعریفی در کتاب هست که در این صفحه نیامده است، آن را گزارش کنید.

مشارکت و گزارش مشکل

این کتاب یک کتاب عمومی است و هر کسی می تواند آزادانه از اینترنت آن را بارگیری کند یا آن را چاپ کند یا از مطالبش به هر طریقی با رعایت شروط مجوز (اشاره به مشارکت کنندگان و اشتراک گزاری محصول به دست آمده با همین شرایط یعنی آزادانه برای استفاده عموم) در آثار دیگر استفاده کند. بنابراین مشارکت در این کتاب کمک به جامعه است. از کوچکترین مشارکت مانند گزارش یک غلط املایی تا مشارکت های بزرگ مانند نوشتن درس نامه های ناقص همگی مفید هستند.

منبع کتاب در این مخزن گیت هاب قرار دارد. برای گزارش مشکلات از https://github.com/shaazzz/GTOI/issues استفاده کنید. برای بهبود متن یا افزودن پاسخ سوالات از روال عادی مشارکت در پروژه های گیت هاب یعنی فورک کردن مخزن و ارائه pull request استفاده کنید. اگر مایلید که قسمتی از درس نامه را کامل کنید، ابتدا آن را در قسمت ایشو ها مطرح کنید که از دوباره کاری جلوگیری شود و زحمات شما یا دیگران به هدر نرود.

پیشنیاز ها

زبان برنامه نویسی سی پلاس پلاس همان طور که در بالا به آن اشاره شد و هم چنین تحلیل پیچیدگی الگوریتم ها اگر این کتاب را برای المپیاد کامپیوتر می خوانید یا به مباحث عملی و پیاده سازی گراف علاقه دارید. در ضمیمه بعدی الگوریتم ها و تحلیل پیچیدگی زمانی و حافظه ای آن ها را بررسی می کنیم و با علامت هایی همچون \(O, \Omega, \theta\) که به وفور در کتاب استفاده می‌شوند آشنا می‌شوید. اگر با این علائم آشنا نیستید حتما ضمیمه بعدی را بخوانید.

اثبات ریاضی، نتیجه گیری و ابزار های نتیجه گیری مانند برهان خلف نیز برای اثبات مسائل لازم است. دانستن استقرای ریاضی و تسلط به آن نیز به شما در فهم بهتر و حل مسائل بیشتر کمک خواهد کرد.