Список вопросов к экзамену по курсу основы программирования СПбГУ, весенний семестр, 2025/26 учебный год
1. Асимптотический анализ
- $O, \Omega, \Theta, o, \omega$: определения и базовые свойства.
- Сравнение скорости роста полилогарифмических, полиномиальных и экспоненциальных функций.
- Основная теорема о рекуррентных соотношениях. Доказательство оценки $O$ в общем случае, оценки $\Theta$ в случае $n = b^{k}$.
2. Элементарная арифметика
- Алгоритм сложения за $O(n)$. Алгоритмы умножения за $O\!\left(n^{2}\right)$.
- Алгоритмы деления за $O\!\left(n^{2}\right)$.
- Алгоритм Карацубы.
3. Базовые структуры данных и поиск
- Массив, динамический массив, связный список, стек, очередь, дек.
- Двоичный поиск, поиск левого (правого) вхождения.
- Двоичный поиск по функции, двоичный поиск по функции с вещественным аргументом.
- Метод двух указателей на примере задачи о поиске в массиве неотрицательных чисел максимального по длине подотрезка, сумма на котором не превосходит $M$.
4. Сортировки
- Сортировка выбором, сортировка вставками. Оценка времени работы сортировки вставками через число инверсий в массиве. Стабильность.
- Сортировка слиянием.
- Быстрая сортировка. Корректность работы функции partition.
- Быстрая сортировка. Оценка времени работы.
- Поиск $k$-й порядковой статистики. Оценка времени работы.
- Оценка снизу на время работы сортировки сравнениями.
- Сортировка подсчётом. Стабильная версия.
- Поразрядная сортировка.
5. Двоичная куча
- Двоичная куча. Операции getMin, siftUp, siftDown, insert и extractMin.
- Двоичная куча. Построение за линейное время.
- Двоичная куча. Heapsort, очередь с приоритетами, удаление или изменение произвольного элемента.
6. Хеш-таблицы
- Хеш-таблица. Метод цепочек.
- Хеш-таблица. Открытая адресация, способы выбора последовательности проб, удаление элементов.
- Сортировка Киркпатрика–Рейша.
- Универсальное хеширование. Оценка времени работы операций на хеш-таблице при использовании техники универсального хеширования.
- Универсальное хеширование. Построение универсального семейства хеш-функций.
- Совершенное хеширование. Оценка вероятности отсутствия коллизий при хранении $n$ ключей в хеш-таблице размера $n^{2}$ с использованием техники универсального хеширования.
- Совершенное хеширование. Оценка суммарного размера внутренних хеш-таблиц.
7. Теоретико-числовые алгоритмы и криптография
- Сложение, умножение и возведение в степень по модулю $N$.
- Алгоритм Евклида. Оценки времени работы $O(n \cdot M(n))$ и $O\!\left(n^{2}\right)$.
- Расширенный алгоритм Евклида. Доказательство корректности. Нахождение обратного по модулю $N$.
- Расширенный алгоритм Евклида. Оценки времени работы $O(n \cdot M(n))$ и $O\!\left(n^{2}\right)$.
- Решето Эратосфена.
- Решето с линейным временем работы.
- Тест Ферма. Оценка вероятности ошибки для $n$, не являющихся числами Кармайкла.
- Тест Миллера–Рабина. Оценка вероятности ошибки.
- $\rho$-алгоритм Полларда. Описание, эвристическая оценка времени работы.
- $\rho$-алгоритм Полларда. Оценка вероятности того, что для случайных $f\colon \mathbb{Z}_{p} \to \mathbb{Z}_{p}$, $x_{0} \in \mathbb{Z}_{p}$ элементы последовательности $x_{i} = f\!\left(x_{i-1}\right)$ с номерами не более $\sqrt{2\lambda p}$ попарно различны.
- Схема RSA.
- Цифровая подпись. Цифровой сертификат.
- Протокол Диффи–Хеллмана.
- Схема Эль-Гамаля.
8. Бинарные деревья и деревья поиска
- Бинарные деревья: определение, высота, связь между числом листьев и числом внутренних вершин в полном бинарном дереве.
- Обходы бинарного дерева: прямой, симметричный, обратный порядки. Итеративная реализация через стек.
- Обход в ширину бинарного дерева.
- Двоичное дерево поиска (BST): поиск, вставка, удаление. Оценка времени работы в худшем и среднем случаях.
- Декартово дерево (treap): определение, операции split и merge, вставка и удаление.
- АВЛ-деревья: определение, повороты (малый и большой), лемма о высоте. Поддержание инварианта при вставке.
- Красно-чёрные деревья: свойства, оценка высоты через чёрную высоту. Операции вставки (разбор случаев).
- Б-деревья: определение, поиск, вставка (разбиение вершин). Оценка числа операций с диском.
- Дерево отрезков: построение, запрос на отрезке и обновление за $O(\log n)$. Ленивые вычисления.
9. Графы
- DFS. Обход вершин, достижимых из данной. Поиск компонент связности.
- DFS. Дерево поиска в глубину в неориентированном/ориентированном графе. Времена входа и выхода. Типы рёбер.
- DFS. Поиск цикла в неориентированном/ориентированном графе.
- DFS. Топологическая сортировка.
- DFS. Поиск компонент сильной связности.
- DFS. Поиск мостов и компонент рёберной двусвязности.
- DFS. Поиск точек сочленения и компонент вершинной двусвязности.
- DFS. Решение задачи 2-SAT.
- BFS. Дерево кратчайших путей.
- $0$-$1$ BFS.
- $1$-$k$ BFS (две реализации).
- Алгоритм Дейкстры.
- Алгоритм A*. Доказательство корректности работы для функции, удовлетворяющей неравенству треугольника. Сравнение с алгоритмом Дейкстры с break.
- Алгоритм Форда–Беллмана.
- Алгоритм Форда–Беллмана. Поиск отрицательного цикла.
- Алгоритм Форда–Беллмана с очередью.
- Алгоритм Флойда.
- Поиск отрицательного цикла и проверка существования кратчайшего пути между вершинами с помощью алгоритма Флойда.
10. Жадные алгоритмы
- Префиксные коды, связь с двоичными деревьями. Алгоритм Хаффмана.
- Алгоритм Белади.
- Лемма о разрезе. Алгоритм Прима.
- Лемма о разрезе. Алгоритм Краскала.
- DSU. Реализация связными списками.
- DSU. Реализация деревьями. Ранговая эвристика.
- DSU. Реализация деревьями. Эвристика сжатия путей.
- DSU. Совместное использование эвристик.
11. Динамическое программирование
- ДП. Наибольшая общая подпоследовательность.
- ДП. Расстояние Левенштейна.
- ДП. Алгоритм Хиршберга.
- ДП. Наибольшая возрастающая подпоследовательность. Решение за $O(n \log n)$.
- ДП. Задача о рюкзаке. Версии «с повторениями» и «без повторений».
- ДП. Произведение матриц.
- ДП. Независимое множество максимального веса в дереве.
- ДП. Задача коммивояжёра.
- ДП. Размер подмножества, сумма элементов подмножества, сумма по подмножествам (SOS DP).
- ДП. Генерация перестановки по номеру и номера по перестановке.
- ДП. Генерация ПСП по номеру и номера по ПСП.
- ДП. Решение линейных рекуррентных соотношений методом возведения матрицы в степень.