Как заботать алгоритмы в осеннем семестре ВУЗа
Алгоритмы очень важный предмет для старта карьеры в IT. Возможно один из самых полезных предметов на младших курсах. Экзамены в большинство школ содержат в себе алгоритмическую часть: ШАД, Летние школы Яндекс, Т-академия, а также отборы на стажировки практически во все компаниии бигтеха. Алго-часть есть почти для всех, аналитиков, бэкендеров, мл-разработчиков. Поэтому важно не просто заботать алгоритмы, заучив их, а важно проработать алгоритмический аппарат, что зачастую сделать не получается за счёт одного вузовского курса.
Начнём гайд с выбора площадки:
leetcode.com - сразу отбрасываем, задачи там подготовят вас лишь к простеньким алгоритмическим собеседованиям, за счет того что задачи на собеседованиях интервьюверы берут с этого сайта. Задачи там не развивают, они либо слишком простые конструктивы, либо баяны.
codeforces.com - отличный сайт для развития в спортпроге, один из немаловажных факторов - это наличие геймификации (рейтинговой системы). А также та же система помогает относительно точно классифицировать сложность задач и помогает планомерно расти. Например ваш текущий рейтинг x, чтобы наиболее эффективным образом развиваться и повышать свой рейтинг оптимально будет решать задачи рейтинга x + 200/300 во время тренеровок, на них будет уходить больше времени, но темп решения будет потом уменьшаться. Также не забудьте скрыть "теги" задач и решать "вслепую". Рейтинг формируется исходя из написания раундов (соревнований в реальном времени), здесь вначале трудно будет привыкнуть к требуемой скорости решения, но всё придёт с практикой (в первую очередь нужно научиться решать трудные задачи, а не быстро легкие). Задачи здесь близки к формату icpc, в последнее время преобладают конструктивы, но также и алгоритмические тоже довольно популярны, довольно весомую часть от решения занимает интерпретация легенды/сведение к фактам и т.п.
atcoder.jp - альтернатива кфу, но здесь задачи более математические, с формальными легендами. В целом прорешка эткодера даже сильнее даст буст, чем на кфе, но задачи там муторнее и сложнее зачастую. Также есть отдельная секция раундов с NP-задачами на оптимизации, отличная возможность попрактиковаться ко всяким huawei challenge.
Как с этим работать? Первым делом нужно понимать, что нужно тщательно отделять практику прорешки задач вслепую и изучения тематических контестов и алгоритмов. Примерные пропорции с которых нужно начать - это 35% прорешки на сайтах задач со скрытыми тегами и раундов, 65% - прорешки тематических контестов. Эта пропорция должна меняться по мере освоения базовых алгоритмов и в конечном итоге вы должны прийти к 90% - скрытые, 10% - тем. контесты (эти 10% необязательно новые алгоритмы будут занимать, тут можно скорее нарешивать те темы, в которых чувствуете трудности).
Для освоения основных тем мы подготовили подробную роадмапу по базовым темам и продвинутым. Изучать алгоритмы, советуем исключительно на c++, для спортивного программирование порог входа по знаниям плюсов очень низкий, поэтому хватит простенького курса на степике, сверх этого курса потребуется знать лишь stl-контейнеры и хеш-таблицы, для продвинутых пользователей можно также изучить pbds. Начать советую освоение с логарифмических поисков, сортировок и линейных алгоритмов эти темы используются в огромном кластере задач и часто используются в конструктивных идеях. Затем изучите динамическое программирование и теорию чисел (более подробные разделы тем указаны в роадмапе), тч поможет вам реализовывать модульную арифметику для вычисления комбинаторных формул и дп. Далее большой раздел теории графов последует, в нём отдельно изучите задачи на деревья и DAG. После освоения базовых тем можно перейти к структурам данных (ДО, фенвик, дд и т п). Самое последнее, как мне кажется на что следует обратить внимание это строковые алгоритмы (хеш-функцию вы можете пройти вначале своего пути, а задач которые нельзя решить хешами и можно только строковым алгоритмом достаточно мало).
@postypashki_old