Уже 2 года изучаю ML, прошла магистратуру МИФИ, «прикладная математика и информатика» — это моё второе высшее, первое — психологическое, МГУ. В связи с этим, чтобы глубже двигаться в ML, мне нужно изучать самостоятельно курсы, которых не было у меня ни в бакалавриате, ни в технической магистратуре, но они нужны для работы c Искусственным Интеллектом.
В итоге — я просто самостоятельно составила для себя курс, и изучаю алгоритмы ( это часы работы, в взрослом возрасте, когда не изучаешь олимпиадное программирование со школы — это нетривиальная задача). Его я составила из простых, насколько возможно, видео, где просто и понятно объясняют алгоритмы, которые лично мне — интересно смотреть, и я получаю для начала — простое, базовое понимание алгоритмов.
Я не претендую на то, что это единственный и самый правильный путь для изучения алгоритмов — скорее, это путь подходящий для меня, как человека, который получил 2 высшее образование по ML в взрослом возрасте и стремится двигаться дальше, чтобы, действительно, разбираться в ML и успешно проходить технические собеседования
Начала я с простой лекции от Codonaft — про 7 наиболее популярных алгоритмов:
Здесь рассказали о простых алгоритмах, включая — полный перебор, метод декомпозиции («разделяй и властвуй»), жадный алгоритм, поиск с возвратом (backtracking), локальный поиск, например «градиентный спуск»,
Далее — нашла лекции Тимофея Кирьянова из МФТИ: ссылка
ГитХаб курса: ссылка
Тимофей Фёдорович Хирьянов — старший преподаватель кафедры информатики и вычислительной математики МФТИ, эксперт ЕГЭ по информатике, чемпион 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 мне необходима, при этом нет возможности проходить все курсы одновременно, в связи с этим мне было необходимо выбрать необходимый и достаточный минимум, по которому я продолжаю двигаться.
Буду рада, если собранные мной материалы, Вам помогут в изучении алгоритмов
Желаю успехов на собесах по алгоритмам и в обучении и практике разработки алгоритмов.
Комментарии (7)

Edwward
03.11.2026 12:00получил 2 высшее образование по ML в взрослом возрасте
А вот как это - получить вышку по ML , в МИФИ(!) ,, и потом начать изучать базовые алгоритмы?
Телега не впереди паровоза?
Или статья «ненавязчивая» реклама условно бесплатных курсов золотых медалистов и прочих сильных докторов наук?

TechRecruiter Автор
03.11.2026 12:00У меня тоже есть вопросы к программе онлайн магистратуры, ну, вот, не включили они в программу алгоритмы. Видимо, не считают что для ML специалистов это база. У меня лично - другое мнение, я не понимаю, как можно заниматься CV и Diffusion Models без алгоритмов, и тем более - писать об этом статьи, заниматься научной деятельностью.
Поэтому занимаюсь самостоятельно. Про программы онлайн магистратур могу написать отдельную статью, но пока намеренно этого не делаю. Предпочитаю вкладывать время в изучение алгоритмов и статей с top-tier конференций
eandr_67
Python - худший язык для изучения алгоритмов, т.к. реальная вычислительная сложность базовых конструкций языка скрыта внутри интерпретатора и даже простейшие целочисленные операции в Python - совсем не O(1). Язык с динамической типизацией - это всегда скрытые от кодера накладные расходы, которые обучающийся не может оценить и которые приводят к тому, что реальное время работы кода демонстрирует погоду на Марсе, а не вычислительную сложностью реализуемого им алгоритма.
Хотите изучать алгоритмы - начните с чтения учебников Вирта (в Pascal / Modula-2 / Oberon вычислительная сложность конструкций языка предсказуема, а сами эти языки многократно проще, чем Python и, тем более, C++) и Кормена (разумеется, не "Построение и анализ", а "Вводный курс").
TechRecruiter Автор
Согласна, с С++ было бы намного лучше, но если я еще начну сейчас изучать С++ в дополнение к своим занятиям ( алгоритмы и структуры данных, ML) - это займет не сотни, а тысячи часов времени - такой возможности у меня нет. Поэтому навык программирования на С++ я пока оставляю себе на будущее. Пока главный приоритет - алгоритмы + ML/DL/Diffusion Models + собственные научные проекты, для которых вполне хватает моего знания Python даже без алгоритмов, но с ними мне просто значительно интереснее было бы писать статьи, хотелось бы поделать разумные оптимизации кода, при написании научных статей
cpud47
Да нет. Вы любым более менее адекватным по размеру тестом отсечёте квадрат на Си от линии на Питоне. Плюс есть же опыт контестов на Питоне: там в части из них даже таймлимиты одинаковые для си и питона.
В Питоне стандартная библиотека богатая слишком, это да. Но тут двояко: зачем повторно реализовывать уже существующие алгоритмы? (иногда имеет смысл, но чаще нет, чем да).
P.S. а какие операции в Питоне не O(1)? Или вы о каком-нибудь сложении множеств?
eandr_67
Я говорю об обучении алгоритмике, а это, прежде всего, сравнение разных алгоритмов решения одной и той же задачи (как, например, множество алгоритмов сортировки у Вирта). И при обучении на Python сравниваться будет не код на C с кодом на Python, а один код на Python с другим кодом на Python. И вот тут особенности языков с динамической типизацией (не только Python) вылезают на первый план, заслоняя собой свойства алгоритмов.
Реализовывать существующие алгоритмы в процессе обучения необходимо для того, чтобы обучающийся понимал границы их применимости и умел выбирать алгоритм, адекватный условиям конкретной задачи. Да, в большинстве случаев в промышленном коде будут вызываться библиотечные функции, но всегда есть задачи, в которых использование стандартной библиотеки заведомо неэффективно (попробуйте воспользоваться библиотечной сортировкой при реализации алгоритма BWT на любом языке программирования), и одна из целей качественного преподавания алгоритмики - научить видеть эти случаи.
Любые операции целочисленной арифметики. В Python неограниченная разрядность целых чисел, так что даже сложение/вычитание O(log(n)) (с умножением и делением всё печальнее). Да, основание логарифма примерно равно разрядности процессора и пока числа не превосходят эту границу, этот логарифм незаметен. Но от этого не легче.
Да, можно искусственно ограничивать при обучении и разрядность целых чисел, и использование не только стандартных библиотек, но и встроенных конструкций языка... Но зачем это делать, когда есть языки, несравнимо лучше подходящие для обучения, чем Python?
cpud47
Кажется при обучении именно алгоритмам, подобные детали реализации не сильно важны. Вы же при анализе алгоритма вольны выбирать, в каких единицах оценивать. И в целом ничего не мешает постулировать, что арифметика делается за O(1), точно также, как мы постулирует, что аллокация памяти выполняется за O(1). Более того, обычно на ограничениях размера чисел в алгоритмах вообще не акцентируют внимание.
Я затрудняюсь понять, какие именно особенности дин.тип. языков заслоняют суть и свойства самих алгоритмов. Можете привести примеры?
Касательно повторной реализации алгоритмов из стд, тут двояко. В целом, за неимением лучшего варианта практики, их можно реализовать один раз. Но гораздо более продуктивно реализовать стандартный алгоритм с вариацией. Есть же много задач, которые не решаются непосредственно стандартными алгоритмами — для этого нужно незначительно подправить его логику. Именно из-за таких задач и нужны алгоритмы, и именно на них идеально тренироваться.
Условный пример: дерево по неявному ключу(когда ключом является "количество элементов меньше этого", aka rope, строп)— в стандартной библиотеке есть классические деревья поиска (sorted map, или std::map, или ещё что-нибудь), но реализовать поверх них деревья с неявным ключом довольно сложно. При этом само по себе дерево с неявным ключом проще в реализации, чем дерево поиска. Поэтому в этом случае кастомная реализация дерева будет осмысленной, даже если не делать ограничения на фичи языка/стд.
Edit: хабр съел половину комментария