Как изучить с 0 алгоритмы и структуры данных — для тех, кто не проходил, через олимпиады
Уже 2 года изучаю ML, прошла магистратуру МИФИ, "прикладная математика и информатика" - это моё второе высшее, первое - психологическое, МГУ. В связи с этим, чтобы глубже двигаться в ML, мне нужно изучать самостоятельно курсы, которых не было у меня ни в бакалавриате, ни в технической магистратуре, но они нужны для работы c Искусственным Интеллектом.
В итоге - я просто самостоятельно составила для себя курс, и изучаю алгоритмы ( это часы работы, в взрослом возрасте, когда не изучаешь олимпиадное программирование со школы - это нетривиальная задача). Его я составила из простых, насколько возможно, видео, где просто и понятно объясняют алгоритмы, которые лично мне - интересно смотреть, и я получаю для начала - простое, базовое понимание алгоритмов.
Я не претендую на то, что это единственный и самый правильный путь для изучения алгоритмов - скорее, это путь подходящий для меня, как человека, который получил 2 высшее образование по ML в взрослом возрасте и стремится двигаться дальше, чтобы, действительно, разбираться в ML и успешно проходить технические собеседования
Начала я с простой лекции от Codonaft - про 7 наиболее популярных алгоритмов:
Здесь рассказали о простых алгоритмах, включая - полный перебор, метод декомпозиции ("разделяй и властвуй"), жадный алгоритм, поиск с возвратом (backtracking), локальный поиск, например "градиентный спуск",
Далее - нашла лекции Тимофея Кирьянова из МФТИ: https://cs.mipt.ru/cpp_algo/ ГитХаб курса: https://github.com/tkhirianov/lections_2020
Тимофей Фёдорович Хирьянов — старший преподаватель кафедры информатики и вычислительной математики МФТИ, эксперт ЕГЭ по информатике, чемпион ACM ICPC. Его курс считается одним из лучших в рунете.
Темы: рекурсия, сортировки (быстрая, слиянием), динамическое программирование, графы, деревья, хеш-таблицы.
Параллельно я слушаю курс Алексея Пырко. Алексей опытный программист, который с 1 курса начал практику в Яндекс, он отлично знает, какие алгоритмы необходимы для успешного собеса в Яндекс, с его курсом - очень удобно сразу практиковать написание алгоритмов на Python.
Для меня важно, что 2 эти курса помогают сразу за короткое время охватить максимум тем по алгоритмам. Для реальной практики - не хочется умножать сущности, нас интересует оптимальный алгоритм для обучения алгоритмов, если Вы не олимпиадник, а готовитесь к собеседованию.
При этом, часть хороших бесплатных курсов, я так же укажу, так как, думаю, что буду повторять материалы - по этим курсам, и, возможно, кому-то будет полезно послушать курсы от разных авторов:
Бесплатный Курс "Алгоритмы и структуры данных" от VK Education, + можно получить сертификат от VK
Курс хороший и понятный курс - для начинающих, меня немного огорчает, что примеры решения на псевдокоде, а не на Python или С++ - мне это важно, так как объяснение с помощью этих языков - помогает мне развивать практику программирования, хотелось бы экономить время.
Бесплатный Курс "Алгоритмы и структуры данных: практика", курс на Stepik
Среди преподавателей: Александр Куликов, Доктор физ-мат наук, исследователь в JetBrains, руководитель бакалаврской программы Computer Science and Artificial Intelligence, Павел Маврин, Университет ИТМО, Computer Science Center, чемпион мира ICPC 2004, Александр Левин, Разработчик Telegram. Ревьюирование C++-кода студентов курса алгоритмов в Computer Science Center. Золотая медаль (2011) и Серебряная медаль (2010) на финале чемпионата мира по программированию ACM ICPC и другие.
Преподаватели курса - очень сильные разработчики, с опытом ACM ICPC = огромный опыт в олимпиадном программировании, соответственно, большой опыт применения алгоритмов для решения задач.
Курс большой, а изучение алгоритмов для меня - срочный вопрос, так как они необходимы для собесов. Поэтому этот курс для меня не основной сейчас, но я точно планирую по этому курсу повторять алгоритмы
Немного о практике
Здесь я кроме известного всем Leetcode, который в представлении не нуждается, так как является много лет для всех лучшим ресурсом для тренировки перед соревнованиями и собесами, расскажу и о менее традиционных ресурсах, известным не всем.
База для совсем новичков ( если нет базы по программированию - не нужно начинать с алгоритмов - лучше сделать шаг назад и начать с комфортной БАЗЫ, которую проходят абсолютно все:
Snakify - проект Виталия Павленко, из МФТИ, хороший интерактивный учебник по Python, для тренировки перед решением задач на алгоритмы - это важная и необходимая база. Главный плюс - это отличный интерактивный учебник, с проверкой кода
Поколение Python - супер популярный бесплатный курс на Stepik с сотнями задач по программированию на Python, с продолжением - отличная база перед алгоритмами.
Важно приготовиться к тому, что решение задач на курсе "Поколение Python" займёт десятки часов Вашего времени, даже с использованием нейросетей, использовать из при освоении практики - я не рекомендую, так как 1000% не освоите и половины, не научитесь программировать, и придётся перепроходить курс заново, когда освоитесь с Python.
Лучше изначально решать задачи самостоятельно, и быть готовым к тому, что освоение базы - занимает десятки и, возможно, если обучаетесь, как я, почти, совсем с 0, даже, сотни часов времени, но это необходимо, чтобы, действительно, научиться программировать, а в будущем, почувствовать разницу при решении задач - при применении алгоритмов и их сочетаний.
Школа программиста - На этом сайте есть классный архив задач на алгоритмы со встроенной системой проверки. В Архиве - 1000 задач. Сложность определяется числом от 1 до 100, из этих значений формируется рейтинг. Уровень представленных здесь задач - базовый, они легче задач, размещенных на аналогичных сервисах. Главная ценность для меня - они подходят для тех, кто начинает программировать.
Практика по алгоритмам:
LeetCode - платформа в представлении не нуждается, поэтому расскажу просто - что с LeetCode - точно не нужно начинать - так как даже задачи Easy - могут быть очень сложными для новичков, столкновение с ними хотя и полезно для развития, всё же, я рекомендую сначала освоить базу, а на LeetCode сначала решать максимум базу Pandas, Python и не огорчаться, если даже простые задачи сначала даются очень неняпросто.
При этом, для тех, кто уже уверенно программирует на Python, это очень хорошая платформа для совершенствования навыков решения задач, в том числе - алгоритмических.
Как известно, при тренировке на LeetCode, вы можете подготовиться к типичным задачам на собеседованиях в Российском и международном BigTech, по статистике, для качественной подготовки, важно уметь уверенно решать, хотя бы 200+ задач на Leetcode - то есть большинство easy и medium уровня, при этом важно учитывать, что и в категории easy иногда встречаются задачи уровня hard, и в категории hard
Начать имеет смысл с данных задач Blind75.
Тренировки по Алгоритмам Яндекс если не успели на недавний отбор по алгоритмам, можно посмотреть тренировки по алгоритмам здесь. Здесь есть очень подробные и понятные тренировки по всем необходимым темам
Yandex CodeRun Это официальный тренажер Яндекса для подготовки к алгоритмическим секциям. Его главное преимущество перед LeetCode — идеальная системность и родной язык.
Как устроен Каталог: Задачи разбиты не по случайным спискам, а по четким темам: «Массивы и строки», «Хеш-таблицы», «Деревья», «Графы», «Динамическое программирование». Внутри каждой темы есть градация от простых к сложным.
Кратко пока так, данный алгоритм для изучения алгоритмов не является единственным верным. Он подходящий для меня, так как я изучаю алгоритмы в взрослом возрасте, после получения 2 высшего в онлайн-магистратуре МИФИ, у меня есть стандартный взрослый график жизни, в котором есть семья и работы, учеба в ML мне необходима, при этом нет возможности проходить все курсы одновременно, в связи с этим мне было необходимо выбрать необходимый и достаточный минимум, по которому я продолжаю двигаться.
Буду рада, если собранные мной материалы, Вам помогут в изучении алгоритмов
Желаю успехов на собесах по алгоритмам и в обучении и практике разработки алгоритмов.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.