Глава 1
Список вопросов к экзамену по курсу основы программирования СПбГУ, весенний семестр, 2024/25 учебный год
- $O, \Omega, \Theta, o, \omega$ : определения и базовые свойства.
- Сравнение скорости роста полилогарифмических, полиномиальных и экспоненциальных функций.
- Алгоритм сложения за $O(n)$. Алгоритмы умножения за $O\left(n^{2}\right)$.
- Алгоритмы деления за $O\left(n^{2}\right)$.
- Алгоритм Карацубы.
- Основная теорема о рекуррентных соотношениях. Доказательство оценки $O$ в общем случае, оценки $\Theta$ в случае $n=b^{k}$.
- Массив, динамический массив, cвязный список, стек, очередь, дек.
- Двоичный поиск, поиск левого (правого) вхождения.
- Двоичный поиск по функции, двоичный поиск по функции с вещественным аргументом.
- Метод двух указателей на примере задачи о поиске в массиве неотрицательных чисел максимального по длине подотрезка, сумма на котором не превосходит $M$.
- Сортировка выбором, сортировка вставками. Оценка времени работы сортировки вставками через число инверсий в массиве. Стабильность.
- Сортировка слиянием.
- Быстрая сортировка. Корректность работы функции partition.
- Быстрая сортировка. Оценка времени работы.
- Поиск $k$-й порядковой статистики. Оценка времени работы.
- Оценка снизу на время работы сортировки сравнениями.
- Сортировка подсчётом. Стабильная версия.
- Поразрядная сортировка.
- Двоичная куча. Операции getMin, siftUp, siftDown, insert и extractMin.
- Двоичная куча. Построение за линейное время.
- Двоичная куча. Heapsort, очередь с приоритетами, удаление или изменение произвольного элемента.
- Хеш-таблица. Метод цепочек.
- Хеш-таблица. Открытая адресация, способы выбора последовательности проб, удаление элементов.
- Сортировка Киркпатрика-Рейша.
- Универсальное хеширование. Оценка времени работы операций на хеш-таблице при использовании техники универального хеширования.
- Универсальное хеширование. Построение универсального семейства хеш-функций.
- Совершенное хеширование. Оценка вероятности отсутствия коллизий при хранении $n$ ключей в хеш-таблице размера $n^{2}$ с использованием техники универсального хеширования.
- Совершенное хеширование. Оценка суммарного размера внутренних хеш-таблиц.
- Сложение, умножение и возведение в степень по модулю $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: \mathbb{Z}_{p} \rightarrow \mathbb{Z}_{p}, x_{0} \in \mathbb{Z}_{p}$ элементы последовательности $x_{i}=f\left(x_{i-1}\right)$ с номерами не более $\sqrt{2 \lambda p}$ попарно различны.
- Схема RSA.
- Цифровая подпись. Цифровой сертификат.
- Протокол Диффи-Хеллмана.
- Схема Эль-Гамаля.
- DFS. Обход вершин, достижимых из данной. Поиск компонент связности.
- DFS. Дерево поиска в глубину в неориентированном/ориентированном графе. Времена входа и выхода. Типы рёбер.
- DFS. Поиск цикла в неориентированном/ориентированном графе.
- DFS. Топологическая сортировка.
- DFS. Поиск компонент сильной связности.
- DFS. Поиск мостов и компонент рёберной двусвязности.
- DFS. Поиск точек сочленения и компонент вершинной двусвязности.
- DFS. Решение задачи 2-SAT.
- BFS. Дерево кратчайших путей.
- $0-1 \mathrm{BFS}$.
- $1-k$ BFS (две реализации).
- Алгоритм Дейкстры.
- Алгоритм А*. Доказательство корректности работы для функции, удовлетворяющей неравенству треугольника. Сравнение с алгоритмом Дейкстры с break.
- Алгоритм Форда-Беллмана.
- Алгоритм Форда-Беллмана. Поиск отрицательного цикла.
- Алгоритм Форда-Беллмана с очередью.
- Алгоритм Флойда.
- Поиск отрицательного цикла и проверка существования кратчайшего пути между вершинами с помощью алгоритма Флойда.
- Префиксные коды, связь с двоичными деревьями. Алгоритм Хаффмана.
- Алгоритм Белади.
- Лемма о разрезе. Алгоритм Прима.
- Лемма о разрезе. Алгоритм Краскала.
- DSU. Реализация связными списками.
- DSU. Реализация деревьями. Ранговая эвристика.
- DSU. Реализация деревьями. Эвристика сжатия путей.
- DSU. Совместное использование эвристик.
- ДП. Наибольшая общая подпоследовательность.
- ДП. Расстояние Левенштейна.
- ДП. Алгоритм Хиршберга.
- ДП. Наибольшая возрастающая подпоследовательность. Решение за $O(n \log n)$.
- ДП. Задача о рюкзаке. Версии “с повторениями” и “без повторений”.
- ДП. Произведение матриц.
- ДП. Независимое множество максимального веса в дереве.
- ДП. Задача коммивояжёра.
- ДП. Размер подмножеств, сумма элементов в подмножестве, сумма по подмножествам.
- ДП. Генерация перестановки по номеру и номера по перестановке.
- ДП. Генерация ПСП по номеру и номера по ПСП.