Учебник Алгоритмы для собеседований для начинающих
Полный курс подготовки к алгоритмическим собеседованиям на русском языке. Разбираем оценку сложности big-O, классические приёмы (two pointers, sliding window, бинарный поиск по ответу), структуры данных (стеки, очереди, связные списки, деревья, графы) и парадигмы (рекурсия, backtracking, динамическое программирование, жадные алгоритмы). Каждый урок — настоящая статья с разбором LeetCode-подобной задачи, исполняемым кодом на Python и мини-квизом. В конце — мета-урок о том, как вести себя на собеседовании и думать вслух.
Курс «Алгоритмы для собеседований» состоит из 6 разделов и 21 урока: Сложность и анализ алгоритмов, Массивы, хеши и окна, Бинарный поиск, стек и очередь, Связные списки и деревья, Рекурсия, backtracking и динамическое программирование и Жадность, графы, сортировки и собеседование. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Сложность и анализ алгоритмов
- Что такое big-O и зачем он на собеседовании
Нотация big-O простыми словами: как оценить рост времени работы алгоритма и почему это первый вопрос интервьюера.
- Сложность по памяти и амортизация
Оценка дополнительной памяти, стек рекурсии и амортизированная сложность на примере динамического массива.
- Лучший, средний и худший случай
Чем отличаются best, average и worst case, и почему интервьюера почти всегда интересует именно худший случай.
- Что такое big-O и зачем он на собеседовании
2 Массивы, хеши и окна
- Два указателя (two pointers)
Техника двух указателей: как за один проход и O(1) памяти решать задачи на отсортированных массивах. Разбор Two Sum II.
- Префиксные суммы
Префиксные суммы: предподсчёт за O(n) даёт ответы на запросы суммы на отрезке за O(1). Разбор подмассива с заданной суммой.
- Хеш-таблицы: Two Sum и частоты
Хеш-таблицы за O(1): решаем Two Sum за один проход, считаем частоты и группируем анаграммы.
- Скользящее окно (sliding window)
Скользящее окно: как за один проход решать задачи о подстроках и подмассивах. Разбор самой длинной подстроки без повторов.
- Два указателя (two pointers)
3 Бинарный поиск, стек и очередь
- Бинарный поиск
Бинарный поиск за O(log n): корректные границы, защита от ошибок на единицу, поиск точной позиции вставки.
- Бинарный поиск по ответу
Бинарный поиск по ответу: когда искомое — не индекс, а число с монотонным свойством. Разбор задачи о минимальной скорости.
- Стеки и валидные скобки
Стек (LIFO): принцип работы и классическая задача проверки правильной скобочной последовательности за O(n).
- Очередь и монотонный стек
Очередь (FIFO) и приём «монотонный стек» для задачи о следующем большем элементе за O(n).
- Бинарный поиск
4 Связные списки и деревья
- Связный список: разворот
Односвязный список и его разворот за O(n) и O(1) памяти — одна из самых частых задач на собеседовании.
- Цикл в списке: алгоритм Флойда
Обнаружение цикла в связном списке двумя указателями (черепаха и заяц) за O(n) и O(1) памяти.
- Обходы дерева: DFS и BFS
Бинарное дерево и его обходы: in-order, pre-order, post-order (DFS) и обход по уровням (BFS) с очередью.
- Связный список: разворот
5 Рекурсия, backtracking и динамическое программирование
- Рекурсия и backtracking: подмножества
Backtracking на примере генерации всех подмножеств: дерево решений, выбор и откат, сложность O(2^n).
- Введение в динамическое программирование
Динамическое программирование: перекрывающиеся подзадачи и мемоизация на примере чисел Фибоначчи. От O(2^n) к O(n).
- DP: монеты, рюкзак и LIS
Классические задачи DP: размен монетами, рюкзак 0/1 и наибольшая возрастающая подпоследовательность (LIS).
- Рекурсия и backtracking: подмножества
6 Жадность, графы, сортировки и собеседование
- Жадные алгоритмы
Жадные алгоритмы: когда локально оптимальный выбор даёт глобальный оптимум. Разбор задачи о непересекающихся интервалах.
- Графы: BFS, DFS и топологическая сортировка
Представление графа списком смежности, обходы BFS и DFS, топологическая сортировка для задач с зависимостями.
- Сортировки: быстрая и слиянием
Быстрая сортировка и сортировка слиянием: принцип divide and conquer, сложность O(n log n), стабильность и память.
- Мета-урок: как пройти собеседование
Как готовиться к алгоритмическому собеседованию, думать вслух, уточнять условие, оценивать сложность и не паниковать.
- Жадные алгоритмы