آموزشبرنامه نویسی

راهنمای کامل کد زدن در مسابقات برنامه نویسی

برنامه نویسی رقابتی

برنامه نویسی رقابتی چیست؟

در این مقاله از وب سایت کالی بویز تصمیم داریم در مورد برنامه نویسی خلاقانه یا رقابتی در مسابقات برنامه نویسی بحث کنیم. این مدل برنامه نویسی یک ورزش ذهنی است که باید در آن یک مسئله نسبتا مشکل را با توجه به محدودیت های گفته شده (زمان و حافظه) حل کنید.

در این مقاله هر شخصی را که تمایل به شرکت در این مسابقات(گوگل جم، ICPC و…) دارد را تا حدی راهنمایی کرده و سر فصل هایی را برای مطالعه معرفی کرده ایم. با ما همراه باشید 🙂

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

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

برنامه نویسی در مسابقات یک ورزش ذهنی و یک سرگرمی است که سالانه به صورت آنلاین یا حتی حضوری می توانید در مسابقات مختلفی شرکت کنید.

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

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

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

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

برای شرکت در مسابقات برنامه نویسی باید در موارد زیر تبحر داشته باشید:

  • یک زبان برنامه نویسی (بهترین زبان ها جاوا، سی پلاس پلاس و سی هستند)
  • تحلیل پیچیدگی فضا و زمان الگوریتم ها.
  • آشنایی با روش Brute Force
  • آشنایی خوب با تمام ساختمان داده ها مانند: آرایه، لیست، درخت، گراف و …
راهنمای کامل کد زدن در مسابقات برنامه نویسی
google code jam

اکنون به توضیحات زیر دقت کنید:

1. یک زبان برنامه نویسی انتخاب کنید

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

البته ناگفته نماند که اگر با زبانی به غیر از این سه مورد راحت هستید بهتر است به سراغ یادگیری آن زبان بروید و همچنین اگر مبتدی هستید زبان برنامه نویسی پایتون می تواند انتخاب مناسبی برای شما باشد، زیرا یادگیری آن آسان است و زبانی کاربرپسند می باشد.

2. مفاهیم پیچیدگی زمان و فضای الگوریتم ها را درک کنید

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

3. یادگیری اصول ساختمان داده و طراحی الگوریتم

راهنمای کامل کد زدن در مسابقات برنامه نویسی
data structure

ساختمان های داده روشی برای ذخیره اطلاعات و دستیابی و تغییر در آن ها هستند. شما باید تمامی ساختمان های داده و موارد استفاده از آن ها را بدانید، یعنی باید بدانید هر مسئله را با استفاده از کدام ساختمان داده به صورت ساده تر و سریع تر حل خواهد شد. درخت ها، آرایه ها، گراف ها، لیست ها و… را برخی از ساختمان داده های معروف و پرکاربرد هستند. باید طوری بر اصول ساختمان داده ها تسلط داشته باشید که با رسیدن به یک مسئله بتوانید تشخیص دهید که با کدام ساختمان داده می توان راه حلی بهینه برای مسئله بدست آورد.

4. اکنون وقت چالش است

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

وب سایت های دیگری نیز وجود دارند که می توانید در آن ها قدرت حل مسئله خود را تقویت کنید، مانند وب سایت Codeforces، Online Judge هستند.

در وب سایت های نام برده شده در بالا یک سیستم تصحیح خودکار وجود دارد، وقتی شما راه حل(کد) خود را در وب سایت بارگذاری می کنید سیستم عامل یک مجموعه نسبتا بزرگ از ورودی های متفاوت را به الگوریتم شما می دهد و در صورتی که در زمان مشخص شده خروجی درستی داشته باشد نمره کامل را خواهید گرفت.

ممکن است در ابتدای کار نتوانید مسائل را به راحتی حل کنید و دلسرد شوید، این کاملا طبیعی است چون شما به عنوان یک مبتدی فقط با تئوری و سینتکس یک زبان برنامه نویسی آشنا هستید و باید با تلاش و پشتکار و از همه مهم تر حل سوالات زیاد و کسب تجربه توانایی خود را بالا ببرید. با تلاش هر چیزی امکان پذیر است، شک نکنید!

شما باید با صبر و پشتکار فراوان هر روز از وب سایت های نام برده شده سوالات زیادی را حل کنید تا به مرور از سطح صفر به صد برسید. در ابتدای کار اصلا مهم نیست برای حل یک مسئله چقدر وقت صرف می کنید یا مسائل زیادی را نمی توانید حل کنید.

باید با تمرین روزانه و شرکت در مسابقات خود را به یک برنامه نویس حرفه ای تبدیل کنید و مهارت خود را بالا ببرید.

برای مطالعه بیشتر:

امیدوارم این مقاله برای شما خواننده گرامی مفید بوده باشد:)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا