Уже 2 года изучаю ML, прошла магистратуру МИФИ, «прикладная математика и информатика» — это моё второе высшее, первое — психологическое, МГУ. В связи с этим, чтобы глубже двигаться в ML, мне нужно изучать самостоятельно курсы, которых не было у меня ни в бакалавриате, ни в технической магистратуре, но они нужны для работы c Искусственным Интеллектом.

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

Я не претендую на то, что это единственный и самый правильный путь для изучения алгоритмов — скорее, это путь подходящий для меня, как человека, который получил 2 высшее образование по ML в взрослом возрасте и стремится двигаться дальше, чтобы, действительно, разбираться в ML и успешно проходить технические собеседования

Начала я с простой лекции от Codonaft — про 7 наиболее популярных алгоритмов:

Здесь рассказали о простых алгоритмах, включая — полный перебор, метод декомпозиции («разделяй и властвуй»), жадный алгоритм, поиск с возвратом (backtracking), локальный поиск, например «градиентный спуск»,

Далее — нашла лекции Тимофея Кирьянова из МФТИ: ссылка
ГитХаб курса: ссылка

Тимофей Фёдорович Хирьянов — старший преподаватель кафедры информатики и вычислительной математики МФТИ, эксперт ЕГЭ по информатике, чемпион 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 мне необходима, при этом нет возможности проходить все курсы одновременно, в связи с этим мне было необходимо выбрать необходимый и достаточный минимум, по которому я продолжаю двигаться.

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

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

Комментарии (7)


  1. eandr_67
    03.11.2026 12:00

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

    Хотите изучать алгоритмы - начните с чтения учебников Вирта (в Pascal / Modula-2 / Oberon вычислительная сложность конструкций языка предсказуема, а сами эти языки многократно проще, чем Python и, тем более, C++) и Кормена (разумеется, не "Построение и анализ", а "Вводный курс").


    1. TechRecruiter Автор
      03.11.2026 12:00

      Согласна, с С++ было бы намного лучше, но если я еще начну сейчас изучать С++ в дополнение к своим занятиям ( алгоритмы и структуры данных, ML) - это займет не сотни, а тысячи часов времени - такой возможности у меня нет. Поэтому навык программирования на С++ я пока оставляю себе на будущее. Пока главный приоритет - алгоритмы + ML/DL/Diffusion Models + собственные научные проекты, для которых вполне хватает моего знания Python даже без алгоритмов, но с ними мне просто значительно интереснее было бы писать статьи, хотелось бы поделать разумные оптимизации кода, при написании научных статей


    1. cpud47
      03.11.2026 12:00

      Да нет. Вы любым более менее адекватным по размеру тестом отсечёте квадрат на Си от линии на Питоне. Плюс есть же опыт контестов на Питоне: там в части из них даже таймлимиты одинаковые для си и питона.

      В Питоне стандартная библиотека богатая слишком, это да. Но тут двояко: зачем повторно реализовывать уже существующие алгоритмы? (иногда имеет смысл, но чаще нет, чем да).

      P.S. а какие операции в Питоне не O(1)? Или вы о каком-нибудь сложении множеств?


      1. eandr_67
        03.11.2026 12:00

        Я говорю об обучении алгоритмике, а это, прежде всего, сравнение разных алгоритмов решения одной и той же задачи (как, например, множество алгоритмов сортировки у Вирта). И при обучении на Python сравниваться будет не код на C с кодом на Python, а один код на Python с другим кодом на Python. И вот тут особенности языков с динамической типизацией (не только Python) вылезают на первый план, заслоняя собой свойства алгоритмов.

        Реализовывать существующие алгоритмы в процессе обучения необходимо для того, чтобы обучающийся понимал границы их применимости и умел выбирать алгоритм, адекватный условиям конкретной задачи. Да, в большинстве случаев в промышленном коде будут вызываться библиотечные функции, но всегда есть задачи, в которых использование стандартной библиотеки заведомо неэффективно (попробуйте воспользоваться библиотечной сортировкой при реализации алгоритма BWT на любом языке программирования), и одна из целей качественного преподавания алгоритмики - научить видеть эти случаи.

        а какие операции в Питоне не O(1)?

        Любые операции целочисленной арифметики. В Python неограниченная разрядность целых чисел, так что даже сложение/вычитание O(log(n)) (с умножением и делением всё печальнее). Да, основание логарифма примерно равно разрядности процессора и пока числа не превосходят эту границу, этот логарифм незаметен. Но от этого не легче.

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


        1. cpud47
          03.11.2026 12:00

          Кажется при обучении именно алгоритмам, подобные детали реализации не сильно важны. Вы же при анализе алгоритма вольны выбирать, в каких единицах оценивать. И в целом ничего не мешает постулировать, что арифметика делается за O(1), точно также, как мы постулирует, что аллокация памяти выполняется за O(1). Более того, обычно на ограничениях размера чисел в алгоритмах вообще не акцентируют внимание.

          Я затрудняюсь понять, какие именно особенности дин.тип. языков заслоняют суть и свойства самих алгоритмов. Можете привести примеры?

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

          Условный пример: дерево по неявному ключу(когда ключом является "количество элементов меньше этого", aka rope, строп)— в стандартной библиотеке есть классические деревья поиска (sorted map, или std::map, или ещё что-нибудь), но реализовать поверх них деревья с неявным ключом довольно сложно. При этом само по себе дерево с неявным ключом проще в реализации, чем дерево поиска. Поэтому в этом случае кастомная реализация дерева будет осмысленной, даже если не делать ограничения на фичи языка/стд.

          Edit: хабр съел половину комментария


  1. Edwward
    03.11.2026 12:00

    получил 2 высшее образование по ML в взрослом возрасте 

    А вот как это - получить вышку по ML , в МИФИ(!) ,, и потом начать изучать базовые алгоритмы?

    Телега не впереди паровоза?

    Или статья «ненавязчивая» реклама условно бесплатных курсов золотых медалистов и прочих сильных докторов наук?


    1. TechRecruiter Автор
      03.11.2026 12:00

      У меня тоже есть вопросы к программе онлайн магистратуры, ну, вот, не включили они в программу алгоритмы. Видимо, не считают что для ML специалистов это база. У меня лично - другое мнение, я не понимаю, как можно заниматься CV и Diffusion Models без алгоритмов, и тем более - писать об этом статьи, заниматься научной деятельностью.

      Поэтому занимаюсь самостоятельно. Про программы онлайн магистратур могу написать отдельную статью, но пока намеренно этого не делаю. Предпочитаю вкладывать время в изучение алгоритмов и статей с top-tier конференций