Конкурентно програмиране за начинаещи: Предизвикателства на Topcoder

Съдържание:

Anonim

Какво е конкурентно програмиране?

Конкурентното програмиране е решаване на проблеми с кодирането с помощта на алгоритъм и структура на данните. Участниците трябва да напишат код под различни ограничения като ограничения на паметта, време за изпълнение, лимит на кодиране, пространство и т.н.

Победителят се обявява на базата на някои решени проблеми и времето, отделено за писане на успешни програмни решения. Той обаче включва и други фактори като качество на произведената продукция, време за изпълнение, размер на програмата и т.н.

В този урок ще научите

  • Какво е конкурентно програмиране?
  • Ползи от изпит по състезателно програмиране
  • История на състезателното програмиране
  • Проверка на уменията в изпитите по състезателно програмиране
  • Как да започнем?
  • Как да се подготвим за състезателно програмиране?
  • Митове и реалност на състезателното програмиране
  • Най-добри практики за състезателни изпити по кодиране
  • Недостатъци на конкурентното програмиране

Ползи от конкурентното програмиране

Ето предимствата от участието в състезания:

  • Състезателното програмиране ви помага да подобрите своите логически и аналитични умения
  • Подобрява алгоритмичните ви познания.
  • Това е отлично допълнение към вашето CV.
  • Подобрете вашата мрежа от приятели, които също са запалени по програмирането
  • Поддържа се от световноизвестни организации като Google, Amazon, Facebook, IBM и други.

История на състезателното програмиране

В света на конкурентните програми най-старото състезание е ACM-ICPC (International Collegiate Programming Contest). Той е възникнал през 70-те години и е нараснал до 88 държави.

Интересът към предизвикателствата при програмирането нарасна значително след 2000 г. Това беше възможно благодарение на растежа на Интернет. Той позволява на сайтовете за състезания по кодиране да провеждат международни състезания онлайн.

Умения, необходими при изпитите по състезателно програмиране

Умение Подробности
Важни умения
  • Умения за алгоритъм
  • Основни математически умения
  • Умения за програмиране
  • Умения за скорост на писане
  • Умения за отстраняване на грешки
Пълно търсене
  • Грубо принудително търсене, използвайки цялото пространство за търсене
  • Побой над ограничението във времето
  • Оптимизиране на търсенето
Разделяй и владей
  • Разделяне на проблема с кодирането на по-малки части
  • Двоично търсене
Динамично програмиране
  • Определете проблемното състояние
  • По-бързо и сложно рекурсивно връщане назад

Как да започнем?

Ето няколко полезни съвета, които трябва да знаете, преди да започнете с конкурентно програмиране:

  • Жизненоважно е да изберете език за програмиране, който ви е най-удобен
  • Регистрирайте се на който и да е уебсайт за предизвикателство за кодиране и започнете да решавате техните практически проблеми
  • Трябва да научите за структурите на данни, които са жизненоважни за решаването на сложни проблеми с кодирането.
  • Трябва да разберете концепцията за сложност в програмите.
  • Научете важни модели на програмиране като рекурсия, динамично програмиране и др.

Топ сайтове за конкурентно програмиране

Най-важните сайтове за най-добри предизвикателства за кодиране са:

  • TopCoder
  • Кодербайт
  • Codewars
  • CodeChef
  • Codeforce
  • Hackerearth

Топкодер:

Topcoder е широко популярна платформа за конкурентно програмиране. Той предлага много алгоритмични предизвикателства, които можете да изпълните сами, използвайки техния инструмент за редактиране на код. Уебсайтът е по-подходящ за напреднала аудитория.

Посетете тук: https://www.topcoder.com/

Кодербайт

Coderbyte предлага над 200 различни вида предизвикателства за кодиране, които можете да разрешите в онлайн редактор, използвайки 10 различни езика за програмиране. Той предоставя официални решения и над 800 000 решения, създадени от потребителя.

Посетете тук: https://coderbyte.com/

Codewars

Codewars предлагат богата колекция от предизвикателства за кодиране. Можете да изпратите предизвикателствата си, които ще бъдат редактирани от общността. Тя ви позволява да решавате тези предизвикателства онлайн, като използвате редактора им за над 20 езика за програмиране.

Посетете тук: https://www.codewars.com/

CodeChef

CodeChef предлага стотици конкурентни предизвикателства за програмиране. Тя ви позволява да пишете код в техния онлайн редактор и да разглеждате колекция от предизвикателства. Проблемите с кодирането са разделени в различни категории в зависимост от нивото на уменията ви.

Посетете тук: https://www.codechef.com/

Codeforces

Codeforces е руски уебсайт за конкурентно програмиране. Той редовно е домакин на състезание по програмиране, където състезателни програмисти от цял ​​свят.

Посетете тук: https://codeforces.com/

Hackerearth:

HackerEarth предлага корпоративни софтуерни решения. Той помага на компаниите или отделните лица с техните нужди за управление на иновациите и техническо набиране. Към днешна дата HackerEarth е провел над 10 000 предизвикателства за програмиране.

Посетете тук: https://www.hackerearth.com/

Митове и реалност на състезателното програмиране

Митове Реалност
Твърде късно е да започнете състезателно програмиране Няма фиксирана възраст тази най-добра да започне по-рано в програмиращата ви кариера.
Това е отличен начин да получите работа за софтуерно програмиране Не, не е вярно, тъй като това е спорт, който може да бъде от полза. Не предлага обаче гаранция за работа.
Трябва да решите много компютърни програми, преди да започнете състезателно програмиране. Можете да научите теория, но решаването на компютърни предизвикателства няма да ви помогне, тъй като всяко състезание е уникално със своите уникални предизвикателства.
Трябва да имате експерт по алгоритъм Трябва да можете да разрешите проблемите
Конкурентните програмисти са всички опитни програмисти. Не, за всеки може да участва дори начинаещ код
Това е просто хоби или игра За разлика от това, състезателното програмиране обхваща някои от същите умения, преподавани в учебната програма по компютърни науки, но на много по-дълбоко ниво. Така че, не можете да го наречете игра.

Най-добри практики за състезателни изпити по кодиране

Въпреки че няма фиксирано правило, все пак някои най-добри практики, които трябва да следвате, са:

  • Опитайте се да научите нови и ефективни алгоритми и да ги прилагате, когато е необходимо.
  • Развийте добри познания за структури от данни като списъци, дървета и графики
  • Прочетете информацията за поверителност от уебсайта на конкурентното програмиране и се свържете с тях преди регистрация.
  • Трябва да изберете проблем, за който можете да намерите решение и евентуално обяснение на тези решения.
  • Напишете тестови случаи за проблема и тествайте логиката си, като използвате тези тестови случаи, преди да изпратите.
  • Трябва да поддържате предварително написани шаблони за стандартни алгоритми, необходими заглавки, функции и т.н.
  • Използвайте функции / методи и минимизирайте повторението на кода.
  • Тествайте кода си за най-лошия случай и се опитайте да разберете най-доброто решение за тази ситуация

Недостатъци на конкурентното програмиране

  • Грешки по време на работа при проблеми с лоши входове са трудни за отстраняване на грешки.
  • Толкова сте свикнали с малки награди и краткосрочни цели. В реалния живот, когато работите по който и да е проект, отнема най-вече два-три месеца, преди да получите наградата за проекта, по който работите
  • Вероятно ще станете майстор на кодирането, но няма да знаете никакви рамки (важно за реални проекти)
  • Отнема много време и е по-досадно да участвате и трябва да го правите многократно.

Обобщение

  • Конкурентното програмиране е решаване на проблеми с кодирането с помощта на алгоритъм и структура на данните.
  • Състезанията по кодиране ви помагат да подобрите своите логически и аналитични умения.
  • ICPC е създаден през 70-те години на миналия век и е нараснал до 88 държави.
  • Умения за алгоритъм, основни математически умения, умения за програмиране, умения за скорост на писане се изискват в състезателните изпити по програмиране.
  • От решаващо значение е да изберете език за програмиране, който ви е най-удобен
  • Най-важните сайтове с най-добри предизвикателства за кодиране са: 1) TopCoder 2) Coderbyte 3) Codewars 4) CodeChef 5) Codeforce 6) Hackerearth.
  • Често срещан мит е, че е твърде късно да започнете състезателно програмиране. Реалността обаче е, че за него няма фиксирана възраст.
  • Разработването на добри познания за структури от данни като списъци, дървета и графики е добра най-добра практика за състезателни изпити по кодиране.