Однажды меня спросили, что вдохновило меня на изучение соревновательного программирования? Итак, я только что сказал, почему я это начал? как это помогает вам в карьере? Я видел, как многие сочли мой пост очень полезным. Так что я просто подумал поделиться этим здесь.

Многие из нас занимаются программированием. Я могу сказать, что многие люди считают это обыденным, поскольку они не хотят этого делать. Они говорят, что хотят попробовать что-то другое. Некоторые из них говорят, что хотят расти как программист, но считают, что это будет очень сложно. А то мало кто из них адепт. Вы когда-нибудь задумывались, как они туда попали? Как они это сделали легко? Ответ прост: они делают то, что им нравится. Им не хочется работать.

Написание решения данной проблемы - не очень большая задача, но насколько хорош ваш код с точки зрения пространственной сложности, временной сложности. Как он себя ведет с большим размером ввода, маленьким размером ввода, лучшим случаем, худшим случаем, средним и различными другими аспектами. Если я не знаю об этом, я не могу написать оптимизированное решение для данной проблемы или какой-либо функции, которую я собираюсь добавить в свое приложение. Доступны различные алгоритмы сортировки, но вы не можете использовать одинаковую сортировку везде. Сортировка вставками хороша для сортировки небольших массивов, она имеет временную сложность o (n * n), но я не могу использовать ее для больших входных данных. Быстрая сортировка - самый популярный алгоритм сортировки. Его внутренний цикл очень короткий и может быть очень хорошо оптимизирован. Также стоит подумать о дополнительном пространстве. Нужна ли мне сортировка по месту? Вы должны помнить о многих аспектах. Возьмем еще один пример: обратимся к заданному массиву.

А теперь подумайте, как лучше всего этого добиться, не прокручивая страницу вниз. Вы должны найти решение, которое будет выполнять меньшее количество операций. Я знаю, что многие из нас могут сказать, что просто создайте еще один массив и начните копировать символы с последнего или просто начните печатать символы с последнего. Но как вы думаете, сможете ли вы его оптимизировать? Здесь вам не нужно перебирать всю строку, вы можете добиться этого, перебирая только половину элементов данной строки и выполняя операцию обмена. (I с ni-1) Мы только что рассмотрели несколько примеров, которые в основном говорят нам, что если вы зная об этих аспектах, вы можете написать лучший код для данной проблемы.

Теперь расскажу, как я это начал. Несколько лет назад меня отвергла одна из компаний моей мечты, так как я не мог ответить на несколько вопросов об алгоритмах. В тот раз мне стало плохо, и я начал изучать структуру данных и алгоритмы. Раньше я каждый день решал 3–4 задачи на звание хакера. И вскоре я дошел до алгоритмов 3 уровня с процентилем 70+. Поэтому я думаю, что вы не увидите своего лучшего, если не увидите своего худшего сегодня. Это сработало для меня как источник вдохновения.

В то время у меня были базовые знания о структуре данных и алгоритмах. Но вы знаете, что если вы не примените свои знания для решения различных задач, вы ничего не добьетесь. Я начал с взлома книги собеседований по кодированию, которая использовалась для решения разминки, реализации, строковых вопросов о ранге хакера. Во время обучения нам нужно помнить об одном. Хотя мы не чувствуем никаких трудностей при решении простых задач, мы можем многому научиться, глядя на решения других, анализируя различные различные решения. И поверьте мне, эти несколько подходов, которым вы можете научиться на простых задачах, очень помогут вам в решении сложных проблем в будущем. Это была моя стратегия обучения соревновательному программированию. По мере продвижения вы сможете писать решения быстрее и с хорошей пространственно-временной сложностью.

Несколько ресурсов, которые могут вам помочь:

  1. Есть много хороших книг по алгоритмам, я бы предложил книгу Cracking the Coding Interview book.
  2. Начните с проблем с рангом хакера HackerRank (начните с простого)
  3. Лучший программист - Руководства по науке о данных (https://www.topcoder.com/community/data-science/data-science-tutorials/)
  4. Бит интервью (https://www.interviewbit.com)
  5. Продолжайте проверять структуру данных / алгоритмы переполнения стека - новейшие вопросы «структуры данных» (здесь вы найдете много новых вопросов, попытайтесь ответить на них, попытайтесь понять ответы других).
  6. Структуры данных и алгоритмы (https://discuss.codechef.com/questions/48877/data-structures-and-algorithms)
  7. Решение проблем с помощью алгоритмов и структур данных с использованием Python (http://interactivepython.org/runestone/static/pythonds/index.html)

Я думаю, что вы не можете быть профессионалом ни в чем, если вам это не нравится. Как программист, любите свою работу, любите свою работу и будьте совершенны в своей работе.

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