
Алгоритмы и структуры данных на Python
Умеете писать на Python, но теряетесь перед алгоритмической задачей? Курс научит начинать с ограничений, выбирать подходящий алгоритм и структуру данных, объяснять корректность и доводить решение до прохождения больших тестов. Внутри — визуальные разборы, короткие тренажёры и сюжетные задачи, в которых готовый паттерн ещё нужно распознать.
О курсе
Знать Python и уметь решать алгоритмические задачи — разные навыки. Можно уверенно писать функции и классы, но всё равно зависнуть перед новым условием: перебор кажется единственным вариантом, решение работает на примере, а затем падает по времени или ломается на пустом входе. На собеседовании происходит то же самое — синтаксис знаком, но нет понятного порядка действий.
Этот курс нужен, чтобы такой порядок появился. Вы привыкнете начинать с ограничений, заранее оценивать допустимую сложность, находить структуру задачи и формулировать инвариант. После этого выбор между массивом, хеш-таблицей, кучей, обходом графа или динамическим программированием перестаёт быть угадыванием.
Практика идёт в двух темпах. Короткие тренажёры помогают довести отдельный приём до автоматизма. В больших сюжетных задачах название алгоритма уже не написано в условии: сначала придётся понять, что происходит, и только затем писать код. Скрытые граничные и performance-тесты не дадут случайно принять решение, которое работает лишь на маленьком примере.
К концу курса вы сможете открыть незнакомую задачу и последовательно пройти весь путь: распарсить условие, отбросить слишком медленные подходы, выбрать алгоритм, объяснить его корректность и проверить реализацию на случаях, о которых легко забыть при первой попытке. Это пригодится и на технических собеседованиях, и в обычной разработке, когда объём данных внезапно становится больше тестового.
Чему научитесь
- Оценивать время и дополнительную память алгоритма по коду и ограничениям задачи
- Распознавать два указателя, скользящее окно, бинарный поиск, жадный подход и динамическое программирование
- Реализовывать сортировки, хеш-таблицы, кучи, деревья, графы и структуры диапазонов на Python
- Формулировать инвариант и объяснять, почему алгоритм работает
- Восстанавливать путь, подпоследовательность или набор элементов, а не только значение оптимума
- Разбирать объёмные условия, находить граничные случаи и проверять решения стресс-тестами
Для кого
- Для тех, кто знает базовый Python и хочет научиться решать алгоритмические задачи системно
- Для студентов и начинающих разработчиков, которым не хватает практики со структурами данных
- Для кандидатов, готовящихся к алгоритмической части технических собеседований
- Для разработчиков, которые хотят закрыть пробелы в Computer Science без перехода на другой язык
Формат
- 52 урока и около 58 часов материала
- 85 задач с кодом: короткие тренажёры и большие сюжетные задачи
- 95 проверочных вопросов после ключевых тем
- 48 схем и анимаций для алгоритмов, где важна динамика состояния
- Скрытые граничные и performance-тесты в задачах с требованиями по сложности
- Все решения пишутся на Python и запускаются прямо на Latorn
Что нужно на старте
- Знать условия, циклы, функции и базовый синтаксис Python
- Уметь работать со списками, строками, словарями и множествами
- Уметь прочитать данные из stdin и вывести результат в stdout
- Быть готовым писать и отлаживать код: часть задач потребует нескольких попыток
Автор курса
Алексей Малышкин
Разрабатываю образовательные материалы по программированию, машинному обучению и анализу данных. Темы: Python-разработка, аналитика, ML-инструменты (LangChain, vector databases, AI agents), компьютерное зрение. Стараюсь объяснять технические концепции понятно и структурировано. Ранее преподавал на Stepik и обучил более 2000 студентов. Мой профиль на Stepik - https://stepik.org/users/273781420/profile Мой телеграм для связи @alexey_latorn
Программа
01Сложность алгоритмов и анализ кода2 урока
02Массивы, строки и базовые паттерны4 урока
03Двух указателей, скользящее окно и бинарный поиск4 урока
04Сортировки: элементарные и разделяй-и-властвуй4 урока
05Рекурсия и перебор с возвратом3 урока
06Связные списки, стек, очередь и deque6 уроков
07Хеширование и куча3 урока
08Деревья: обходы, BST и префиксное дерево5 уроков
09Графы: модель, обходы, топология и кратчайшие пути5 уроков
10DSU, MST и жадные алгоритмы4 урока
11Динамическое программирование7 уроков
12Продвинутые алгоритмы, структуры диапазонов и интеграция5 уроков
Дополнительные материалы и практика
Уроки
- O-нотация и оценка временной сложности
- Бинарный поиск элемента и границы без off-by-one
- Сортировки выбором, вставками и пузырьком с визуализацией состояния
- Рекурсия: базовый случай, стек вызовов и трассировка
- Сортировка слиянием: разбиение, слияние и рекуррентность
- Быстрая сортировка: схема разбиения Ломуто, худший случай и рандомизация
- Односвязный список: узел, вставка, удаление и обход
- Хеш-таблица: коллизии, dict и set в Python
- Модель графа: список смежности и DFS для связных компонент
- BFS на графе: кратчайший путь в невзвешенном графе с восстановлением
- Алгоритм Дейкстры: кратчайшие пути с неотрицательными весами
- Введение в DP: перекрывающиеся подзадачи и memoization
