Каталог/назад к курсам
Алгоритмы и структуры данных на Python
АлгоритмыСредний

Алгоритмы и структуры данных на Python

Умеете писать на Python, но теряетесь перед алгоритмической задачей? Курс научит начинать с ограничений, выбирать подходящий алгоритм и структуру данных, объяснять корректность и доводить решение до прохождения больших тестов. Внутри — визуальные разборы, короткие тренажёры и сюжетные задачи, в которых готовый паттерн ещё нужно распознать.

12 модулей • 52 урока180 заданий с проверкойоколо 58 ч
Код в браузере: PythonСвободный темпСертификат с проверкой

О курсе

Знать Python и уметь решать алгоритмические задачи — разные навыки. Можно уверенно писать функции и классы, но всё равно зависнуть перед новым условием: перебор кажется единственным вариантом, решение работает на примере, а затем падает по времени или ломается на пустом входе. На собеседовании происходит то же самое — синтаксис знаком, но нет понятного порядка действий.

Этот курс нужен, чтобы такой порядок появился. Вы привыкнете начинать с ограничений, заранее оценивать допустимую сложность, находить структуру задачи и формулировать инвариант. После этого выбор между массивом, хеш-таблицей, кучей, обходом графа или динамическим программированием перестаёт быть угадыванием.

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

К концу курса вы сможете открыть незнакомую задачу и последовательно пройти весь путь: распарсить условие, отбросить слишком медленные подходы, выбрать алгоритм, объяснить его корректность и проверить реализацию на случаях, о которых легко забыть при первой попытке. Это пригодится и на технических собеседованиях, и в обычной разработке, когда объём данных внезапно становится больше тестового.

Чему научитесь

  • Оценивать время и дополнительную память алгоритма по коду и ограничениям задачи
  • Распознавать два указателя, скользящее окно, бинарный поиск, жадный подход и динамическое программирование
  • Реализовывать сортировки, хеш-таблицы, кучи, деревья, графы и структуры диапазонов на Python
  • Формулировать инвариант и объяснять, почему алгоритм работает
  • Восстанавливать путь, подпоследовательность или набор элементов, а не только значение оптимума
  • Разбирать объёмные условия, находить граничные случаи и проверять решения стресс-тестами

Для кого

  • Для тех, кто знает базовый Python и хочет научиться решать алгоритмические задачи системно
  • Для студентов и начинающих разработчиков, которым не хватает практики со структурами данных
  • Для кандидатов, готовящихся к алгоритмической части технических собеседований
  • Для разработчиков, которые хотят закрыть пробелы в Computer Science без перехода на другой язык

Формат

  • 52 урока и около 58 часов материала
  • 85 задач с кодом: короткие тренажёры и большие сюжетные задачи
  • 95 проверочных вопросов после ключевых тем
  • 48 схем и анимаций для алгоритмов, где важна динамика состояния
  • Скрытые граничные и performance-тесты в задачах с требованиями по сложности
  • Все решения пишутся на Python и запускаются прямо на Latorn

Что нужно на старте

  • Знать условия, циклы, функции и базовый синтаксис Python
  • Уметь работать со списками, строками, словарями и множествами
  • Уметь прочитать данные из stdin и вывести результат в stdout
  • Быть готовым писать и отлаживать код: часть задач потребует нескольких попыток
#python#алгоритмы#структуры данных#графы#динамическое программирование#собеседования

Автор курса

Алексей Малышкин

Разрабатываю образовательные материалы по программированию, машинному обучению и анализу данных. Темы: Python-разработка, аналитика, ML-инструменты (LangChain, vector databases, AI agents), компьютерное зрение. Стараюсь объяснять технические концепции понятно и структурировано. Ранее преподавал на Stepik и обучил более 2000 студентов. Мой профиль на Stepik - https://stepik.org/users/273781420/profile Мой телеграм для связи @alexey_latorn

Программа

01Сложность алгоритмов и анализ кода2 урока
1O-нотация и оценка временной сложностипробный
2Пространственная сложность, худший/средний/амортизированный случаи
02Массивы, строки и базовые паттерны4 урока
1Индексы, срезы, границы и мутации списков
2Работа со строками: неизменяемость, методы, построение результата
3Префиксные суммы и запросы на отрезках
4Разностный массив и пакетные изменения диапазонов
03Двух указателей, скользящее окно и бинарный поиск4 урока
1Паттерн двух указателей: встречные и попутные
2Скользящее окно фиксированного и переменного размера
3Бинарный поиск элемента и границы без off-by-oneпробный
4Бинарный поиск по ответу на монотонном предикате
04Сортировки: элементарные и разделяй-и-властвуй4 урока
05Рекурсия и перебор с возвратом3 урока
1Разделяй-и-властвуй: проектирование рекурсивных подзадач
2Перебор с возвратом: состояние, выбор и отсечение
3Backtracking с ограничениями: задача N ферзей
06Связные списки, стек, очередь и deque6 уроков
1Односвязный список: узел, вставка, удаление и обходпробный
2Двусвязный список и сравнение с массивом
3Стек: LIFO, реализация и разбор скобочных последовательностей
4Очередь и deque: FIFO и моделирование потока событий
5Монотонный стек и следующий больший элемент
6Монотонная очередь и максимум скользящего окна
07Хеширование и куча3 урока
1Хеш-таблица: коллизии, dict и set в Pythonпробный
2Бинарная куча: структура, sift_up/sift_down и heapify с визуализацией
3heapq в Python, top-k и очередь с приоритетами
08Деревья: обходы, BST и префиксное дерево5 уроков
1Бинарное дерево: модель и рекурсивные обходы DFS с визуализацией
2Итеративные обходы DFS и BFS бинарного дерева
3Бинарное дерево поиска: вставка, поиск и удаление
4AVL-дерево: повороты и балансировка с анимированным WebP
5Префиксное дерево (Trie): вставка, поиск и автодополнение
09Графы: модель, обходы, топология и кратчайшие пути5 уроков
10DSU, MST и жадные алгоритмы4 урока
1Система непересекающихся множеств: union-find с оптимизациями
2Алгоритм Краскала и минимальное остовное дерево
3Жадные алгоритмы: выбор активностей и обменный аргумент
4Жадные алгоритмы на расписаниях и покрытии отрезков
11Динамическое программирование7 уроков
1Введение в DP: перекрывающиеся подзадачи и memoizationпробный
2Tabulation: восходящее DP и восстановление решения через массив выбора
3DP на подпоследовательностях: наибольшая общая подпоследовательность (LCS)
4DP на подпоследовательностях: наибольшая возрастающая подпоследовательность (LIS)
5Задача о рюкзаке 0/1 и контроль памяти
6DP на сетке: пути и минимальная стоимость
7Интервальное DP: оптимальная расстановка скобок
12Продвинутые алгоритмы, структуры диапазонов и интеграция5 уроков
1Алгоритм КМП: префикс-функция и линейный поиск подстроки
2Дерево Фенвика: точечное обновление и префиксный запрос
3Сегментное дерево: построение, запрос и обновление с визуализацией
4Стресс-тестирование: сравнение с наивным решением на малых входах
5Интеграция: разбор условия, выбор алгоритма и комплексные задачи
Дополнительные материалы и практика