Учебник Структуры данных и алгоритмы для начинающих
Фундамент эффективного кода: как хранить данные и как быстро их обрабатывать. Изучим массивы, списки, деревья, хеш-таблицы, сортировки и оценку сложности.
Курс «Структуры данных и алгоритмы» состоит из 5 разделов и 28 уроков: Сортировки, Поиск, Рекурсия и динамическое программирование, Структуры данных и Введение в алгоритмы. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Сортировки
- Сортировка пузырьком
Сортировка пузырьком (Bubble Sort): идея алгоритма, пошаговый разбор прохода по массиву, код на Python, сложность O(n²) и оптимизация.
- Сортировка выбором
Сортировка выбором (Selection Sort): поиск минимума, пошаговый разбор, код на Python, сложность O(n²), O(n) перестановок и когда применять.
- Сортировка вставками
Сортировка вставками (Insertion Sort): идея, пошаговый разбор, код на Python, сложность O(n²)/O(n), применение в Timsort.
- Сортировка слиянием
Сортировка слиянием (Merge Sort): разделяй и властвуй, рекурсия, слияние половин, код на Python, гарантированная сложность O(n log n).
- Быстрая сортировка
Быстрая сортировка (Quick Sort): pivot, разбиение Lomuto, рекурсия, код на Python, O(n log n) в среднем и O(n²) в худшем случае.
- Сортировка пузырьком
2 Поиск
- Линейный поиск
Линейный поиск (Linear Search): последовательный просмотр, код на Python, O(n), применение на неотсортированных данных.
- Бинарный поиск
Бинарный поиск (Binary Search): итеративно и рекурсивно, пошаговый разбор, код на Python, O(log n) и требование сортировки.
- Линейный поиск
3 Рекурсия и динамическое программирование
- Рекурсия: база, шаг, стек вызовов
Рекурсия в Python: базовый случай и рекурсивный шаг, стек вызовов, факториал, числа Фибоначчи, задача о Ханойских башнях с пошаговым разбором.
- Динамическое программирование: мемоизация и табуляция
DP: мемоизация (сверху вниз) и табуляция (снизу вверх) на примере чисел Фибоначчи — кэш подзадач, сравнение по скорости и памяти.
- DP на практике: лестница и задача о рюкзаке
Динамическое программирование на практике: задача о лестнице (подъём на 1-2 ступени) и задача о рюкзаке (0/1 Knapsack) — формулировка подзадачи, таблица dp, сложность.
- Рекурсия: база, шаг, стек вызовов
4 Структуры данных
5 Введение в алгоритмы