Рубрики

Советы и хитрости для конкурентоспособных программистов | Набор 2 (язык, который будет использоваться для соревновательного программирования)

Это вопрос, который задают довольно часто, так как язык должен быть предпочтительным, чтобы быть эффективным в конкурентном программировании. Это то, о чем не следует беспокоиться, поскольку важна логика, а не язык. Большинство языков более или менее одинаковы, но до сих пор наиболее распространенным языком является C ++, и вот причины.

питон

  • Просто и легко: Python прост, его легко написать (нам нужно меньше печатать), и он содержит огромную коллекцию модулей с почти всеми функциями, которые вы можете себе представить.

  • Типы данных: Python, как правило, предпочтительнее, так как он не имеет верхнего предела памяти целых чисел . Кроме того, не нужно указывать, какой это тип данных, и подобные вещи упрощают кодирование, но в то же время затрудняют его компиляцию (со ссылкой на время, затраченное на компиляцию).

  • Медленное выполнение: программы на Python обычно медленнее по сравнению с Java (см. Это ). Python в значительной степени исключен в самом запуске из-за его высокого времени выполнения.

  • Python не разрешен везде: Python не допускается в конкурсах на различных популярных онлайн-порталах конкурентного программирования.

Теперь мы в основном остались с Java, C, C ++, теперь здесь становится трудно сравнивать и в основном зависит от пользователя, но давайте обсудим положительные и отрицательные стороны каждого из них.

Джава

  • STL против контейнеров: STL в C ++ действительно хорошо спроектирован, тогда как некоторые люди любят Java Containers больше всего на свете. Есть несколько ситуаций, когда STL не имеет прямого решения. Например, priority_queue в STL не поддерживает операцию уменьшения ключа, которая требуется для реализации алгоритма кратчайшего пути Дейкстры и алгоритма Прима.
  • Обработка исключений в Java несопоставима: код Java обеспечивает более сильную обработку исключений по сравнению с C ++. Например, легче отследить исключения ArrayIndexOutOfBound или ошибку сегментации в Java. C ++ / C может дать вам неправильные ответы, но Java, безусловно, надежна в этом контексте.

  • Превышен лимит времени : вы можете получить TLE из-за того, что Java немного медленнее в части ограничения времени (особенно в SPOJ), Codeforces.

  • Большие целочисленные и регулярные выражения: у Java есть несколько преимуществ в отношении соревнований по программированию. Biginteger, регулярные выражения и геометрическая библиотека — некоторые из них.

    Теперь давайте перейдем к C ++.

C ++ и C

  • Скорость C ++ сравнима с C: многие программы на C также являются действительными программами на C ++ — и такие программы на C работают с одинаковой скоростью при компиляции
  • C ++ не форсирует объектно-ориентированное программирование: язык C ++ содержит некоторые языковые расширения, которые облегчают объектно-ориентированное программирование, а C ++ нигде не форсирует объектно-ориентированное проектирование — он просто позволяет это.
  • Параметризованные типы Ключевое слово template позволяет программисту писать общие (независимые от типа) реализации алгоритмов. Где в C, можно написать реализацию общего списка с элементом вроде:
        struct element_t 
        {
           struct element_t *next, *prev;
           void *element;
        };

    C ++ позволяет написать что-то вроде:

    template <typename T>
    struct element_t 
    {
        element_t<T> *next, *prev;
        T element;
    };
  • Большая стандартная библиотека: C ++ позволяет в полной мере использовать стандартную библиотеку C, а C ++ включает в себя свои собственные библиотеки, включая Standard Template Library . STL содержит ряд полезных шаблонов, таких как процедура сортировки выше. Он включает в себя полезные общие структуры данных, такие как списки, карты, наборы и т. Д. Как и подпрограмма сортировки, другие подпрограммы и структуры данных STL «приспособлены» к конкретным потребностям программиста — все, что должен сделать программист, это заполнить типы.
    Например, если нам нужно реализовать бинарный поиск для проблемы, нам нужно написать собственную функцию, тогда как в C ++ процедура бинарного поиска STL определяется как
     двоичный_поиск (startaddress, endaddress, valuetofind)
    

C ++ против Java

  • Коды Java длиннее Программист должен писать больше при программировании на Java

  • Java многословен : в C ++ ввод-вывод проще, просто написав scanf / printf. В Java вам нужен класс BufferedReader, который опять же утомителен.
  • C ++ STL против Java-контейнеров. Большинству программистов проще использовать STL.

  • C ++ более популярен: будь то год выпуска или удобство использования, но C ++ превосходит Java по количеству пользователей, использующих язык.

  • C ++ экономит время: общеизвестный факт, что Java медленнее, чем C ++. Обычно нам нужно много раз компилировать и запускать программы для их тестирования. Это занимает относительно намного меньше времени в C ++. Поэтому в ограниченных по времени конкурсах наше время можно сэкономить.

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

Что касается тем, начните с простых вопросов, а затем перейдите к специальным вопросам, а затем рассмотрите стандартные алгоритмы и структуру данных . Наконец научитесь оптимизировать свой код. Все это время упор на изучение математики, поскольку математические алгоритмы являются важной частью превосходного конкурентного программирования.

Рекомендуемые посты:

Советы и хитрости для конкурентоспособных программистов | Набор 2 (язык, который будет использоваться для соревновательного программирования)

0.00 (0%) 0 votes