Как изучить с 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 эти курса помогают сразу за короткое время охватить максимум тем по алгоритмам. Для реальной практики – не хочется умножать сущности, нас интересует оптимальный алгоритм для обучения алгоритмов, если Вы не олимпиадник, а готовитесь к собеседованию.

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

  1. Бесплатный Курс “Алгоритмы и структуры данных” от VK Education, + можно получить сертификат от VK

    Курс хороший и понятный курс – для начинающих, меня немного огорчает, что примеры решения на псевдокоде, а не на Python или С++ – мне это важно, так как объяснение с помощью этих языков – помогает мне развивать практику программирования, хотелось бы экономить время.

  2. Бесплатный Курс “Алгоритмы и структуры данных: практика”, курс на Stepik

    Среди преподавателей: Александр Куликов, Доктор физ-мат наук, исследователь в JetBrains, руководитель бакалаврской программы Computer Science and Artificial Intelligence, Павел Маврин, Университет ИТМО, Computer Science Center, чемпион мира ICPC 2004, Александр Левин, Разработчик Telegram. Ревьюирование C++-кода студентов курса алгоритмов в Computer Science Center. Золотая медаль (2011) и Серебряная медаль (2010) на финале чемпионата мира по программированию ACM ICPC и другие.

    Преподаватели курса – очень сильные разработчики, с опытом ACM ICPC = огромный опыт в олимпиадном программировании, соответственно, большой опыт применения алгоритмов для решения задач.

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

Немного о практике

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

База для совсем новичков ( если нет базы по программированию – не нужно начинать с алгоритмов – лучше сделать шаг назад и начать с комфортной БАЗЫ, которую проходят абсолютно все:

  1. Snakify – проект Виталия Павленко, из МФТИ, хороший интерактивный учебник по Python, для тренировки перед решением задач на алгоритмы – это важная и необходимая база. Главный плюс – это отличный интерактивный учебник, с проверкой кода

  2. Поколение Python – супер популярный бесплатный курс на Stepik с сотнями задач по программированию на Python, с продолжением – отличная база перед алгоритмами.

    Важно приготовиться к тому, что решение задач на курсе “Поколение Python” займёт десятки часов Вашего времени, даже с использованием нейросетей, использовать из при освоении практики – я не рекомендую, так как 1000% не освоите и половины, не научитесь программировать, и придётся перепроходить курс заново, когда освоитесь с Python.

    Лучше изначально решать задачи самостоятельно, и быть готовым к тому, что освоение базы – занимает десятки и, возможно, если обучаетесь, как я, почти, совсем с 0, даже, сотни часов времени, но это необходимо, чтобы, действительно, научиться программировать, а в будущем, почувствовать разницу при решении задач – при применении алгоритмов и их сочетаний.

  3. Школа программиста – На этом сайте есть классный архив задач на алгоритмы со встроенной системой проверки. В Архиве – 1000 задач. Сложность определяется числом от 1 до 100, из этих значений формируется рейтинг. Уровень представленных здесь задач – базовый, они легче задач, размещенных на аналогичных сервисах. Главная ценность для меня – они подходят для тех, кто начинает программировать.

Практика по алгоритмам:

  1. LeetCode – платформа в представлении не нуждается, поэтому расскажу просто – что с LeetCode – точно не нужно начинать – так как даже задачи Easy – могут быть очень сложными для новичков, столкновение с ними хотя и полезно для развития, всё же, я рекомендую сначала освоить базу, а на LeetCode сначала решать максимум базу Pandas, Python и не огорчаться, если даже простые задачи сначала даются очень неняпросто.

    При этом, для тех, кто уже уверенно программирует на Python, это очень хорошая платформа для совершенствования навыков решения задач, в том числе – алгоритмических.

    Как известно, при тренировке на LeetCode, вы можете подготовиться к типичным задачам на собеседованиях в Российском и международном BigTech, по статистике, для качественной подготовки, важно уметь уверенно решать, хотя бы 200+ задач на Leetcode – то есть большинство easy и medium уровня, при этом важно учитывать, что и в категории easy иногда встречаются задачи уровня hard, и в категории hard

    Начать имеет смысл с данных задач Blind75.

  2. Тренировки по Алгоритмам Яндекс если не успели на недавний отбор по алгоритмам, можно посмотреть тренировки по алгоритмам здесь. Здесь есть очень подробные и понятные тренировки по всем необходимым темам

  3. Yandex CodeRun Это официальный тренажер Яндекса для подготовки к алгоритмическим секциям. Его главное преимущество перед LeetCode — идеальная системность и родной язык.

    Как устроен Каталог: Задачи разбиты не по случайным спискам, а по четким темам: «Массивы и строки», «Хеш-таблицы», «Деревья», «Графы», «Динамическое программирование». Внутри каждой темы есть градация от простых к сложным.

    Кратко пока так, данный алгоритм для изучения алгоритмов не является единственным верным. Он подходящий для меня, так как я изучаю алгоритмы в взрослом возрасте, после получения 2 высшего в онлайн-магистратуре МИФИ, у меня есть стандартный взрослый график жизни, в котором есть семья и работы, учеба в ML мне необходима, при этом нет возможности проходить все курсы одновременно, в связи с этим мне было необходимо выбрать необходимый и достаточный минимум, по которому я продолжаю двигаться.

    Буду рада, если собранные мной материалы, Вам помогут в изучении алгоритмов

    Желаю успехов на собесах по алгоритмам и в обучении и практике разработки алгоритмов.

Автор: TechRecruiter

Источник