Как к соревновательному программированию

" Programming make us to think "

-- Steve Jobs

Доказывая это утверждение, развивается конкурентное программирование. Это интеллектуальный спорт, участники которого считались спортивными программистами.

1-Й УРОВЕНЬ :

выберите язык (c / c ++, java, python)

Доступны четыре языка для выполнения заданного в соревновательном программировании. C / C ++ предпочиталось большинством программистов из-за его скорости и библиотек (стандартная библиотека шаблонов STL). По сравнению с C / C ++ два других языка выполнялись медленно.

Следующие ссылки для руководств и справочников по C ++: -

  1. CPP Tutorials (официальный веб-сайт cpp, предоставляющий учебные руководства cpp от базового уровня)
  2. Учебные пособия (Изучите cpp с помощью простого и элегантного в разделе« Учебные пособия

УРОВЕНЬ 2 :

DSA (структуры данных и алгоритмы) и математика

Несмотря на то, что вы полностью изучили C ++, DSA и математика играет важную роль в соревновательном программировании. Проблемы были основаны на вещах, связанных с логическим и нереальным миром. Чтобы пройти уровни, вы должны изучить DSA и математику.

Наиболее важные темы DSA и математики: -

  • Дейкстры - в зависимости от типа соревнования вы можете увидеть основные проблемы с поиском пути или проблемы с неочевидным сокращением проблем с поиском пути. Всякий раз, когда у вас есть проблема минимизации затрат с (достаточно небольшим) конечным числом состояний, начальным состоянием и целевым состоянием, вы можете рассматривать ее как проблему поиска пути.
  • Bellman-Ford полезен для поиска пути, когда рёбра могут иметь отрицательные затраты. Например, если вы путешествуете по лабиринту с зельями, которые повышают здоровье, и опасностями, которые его понижают, Bellman-Ford будет отличным подходом.
  • Floyd-Warshall полезен для вычисления всех путей. Иногда его используют в задачах, где не нужны все пути, потому что его очень легко реализовать. Однако он медленнее, чем другие алгоритмы поиска пути, поэтому возможность использования метода Флойда-Уоршалла зависит от размера графа.
  • Эдмондс-Карп для проблем с максимальным расходом / минимальной резкой. Одно из распространенных приложений - это задачи двустороннего сопоставления. Например, учитывая N человек, M продуктов питания и список пищевых аллергий каждого человека, сколько человек вы можете накормить?
  • Венгерский алгоритм для задач с заданиями. Подобно описанному выше, но в этих задачах у ребер есть веса, и мы максимизируем общий вес, а не просто количество совпадений.
  • Алгоритм »линии развертки (на самом деле больше общий подход) полезен для различных геометрических задач, таких как задача о ближайшей паре. Также полезно для множества проблем, связанных с пересечением, например, для поиска пересекающихся отрезков линий или конфликтующих событий календаря. Сканирование Грэма или другой алгоритм выпуклой оболочки для таких проблем, как строительство минимального забора для ограждения животных.
  • Алгоритм поиска сильно связанных компонентов, например, Тарьяна.
  • Алгоритм Прима для минимальных остовных деревьев.
  • Алгоритм Кнута-Морриса-Пратта для поиска строк.

По математике: теория чисел, дискретная математика, комбинаторика, теория графов, геоментрия. , анализ строк.

УРОВЕНЬ 3 :

добро пожаловать в дикую жизнь :)

Пройдя два уровня, вы можете начать участвовать в онлайн-олимпиадах по программированию. Сегодня доступно множество веб-сайтов, на которых можно попытаться завершить начальный уровень, а затем перейти к ежемесячным, еженедельным и годовым заданиям.

веб-сайты, предлагающие задачи конкурентного программирования: -

УРОВЕНЬ 4:

Порядок проведения конкурсов

Ранги распределялись по количеству решенных проблем, времени, затраченному на получение «Принято» для программы, и даже по другим параметрам, таким как время выполнения, длина программы и алгоритмы. Красный, синий и зеленый значки были доступны для кодировщиков трех лучших рангов.

Решения проблемы были доступны на форуме веб-сайтов, но не смотрите на них. Возьмите бумагу и напишите возможности алгоритма для решения данной проблемы. Найдите время, чтобы решить эту проблему. Даже через час вы не можете получить результаты, а затем перейти на форум за ссылками. Будьте терпеливы и последовательны.

Преимущества и критика соревновательного программирования

Участие в олимпиадах по программированию может повысить интерес студентов к изучению информатики. Навыки, приобретенные в соревнованиях по программированию, также улучшают карьерные перспективы, поскольку помогают пройти «технические собеседования», которые часто требуют от кандидатов решения сложных программных и алгоритмических задач на месте.

Также была критика конкурентного программирования, особенно со стороны профессиональных разработчиков программного обеспечения. Одним из критических моментов является то, что многие быстро развивающиеся соревнования по программированию учат конкурентов плохим навыкам программирования и стилю кода (например, ненужное использование макросов, отсутствие абстракции и комментариев ООП, использование коротких имен переменных и т. Д.). Поскольку настоящие программные проекты обычно состоят из многих тысяч строк кода и разрабатываются большими командами в течение длительных периодов времени.

Еще одно мнение состоит в том, что вместо того, чтобы «тратить» свое время на чрезмерную конкуренцию, решая проблемы с помощью известных решений, высокопоставленные программисты должны скорее вкладывать свое время в решение реальных проблем.

Использованная литература:-

  1. "Начиная"
  2. Большая нотация O
  3. Quora
  4. Введение в олимпиады по программированию
  5. Научитесь программировать с помощью Hacker Earth
  6. Учебники по соревновательному программированию
  7. Родственный алгоритм s
  8. CodeMon k
  9. Теория чисел
  10. Стэнфордские ссылки
  11. Блог CodeForces №1
  12. Блог CodeForces №2
  13. Введение в алгоритмы
  14. Обсуждение Ссылки на Cpp
  15. Quora