====== Вопросы теоретического анализа ====== В разделе приведены вопросы, используемые на полном экзамене. При распределении вопросов студент получает номера вопросов из данных списков. ===== Блок "Удовлетворительно" ===== - Дайте формальное математическое определение O- и Ω-нотаций. - Дайте формальное математическое определение O- и Θ-нотаций. - Дайте формальное математическое определение Θ- и Ω-нотаций. - Объясните разницу между худшим случаем и лучшим случаем (O- и Ω-нотация) на примере алгоритма быстрой сортировки. - Объясните разницу между средним случаем и лучшим случаем (Θ- и Ω-нотация) на примере алгоритма сортировки вставками. - В чем разница между абстрактным типом данных и структурой данных? Приведите пример для очереди и деки. - Перечислите преимущества и недостатки односвязного списка по сравнению со статическим массивом. - Перечислите преимущества и недостатки двунаправленного списка по сравнению с динамическим массивом. - Обоснуйте, почему вставка в середину связного списка формально занимает O(1), а на практике работает гораздо медленнее? - Опишите алгоритм сортировки подсчетом. В каких случаях она эффективна? - Почему сортировка пузырьком считается неэффективной? Назовите ее сложность. - Опишите алгоритм BFS (поиск в ширину). Какую структуру данных он использует и почему? - Опишите алгоритм DFS (поиск в глубину). Какую структуру данных он использует и почему? - Опишите алгоритм Дейкстры с точки зрения жадных алгоритмов. - Опишите алгоритм Дейкстры с использованием матрицы смежности. - Что такое хэш-фукнция и коллизия? - Что такое коллизия в хеш-таблице и какие есть способа борьбы с ней? - Что такое коэффициент заполнения, где и как он применяется? Для чего нужно перехеширование? - Перечислите преимущества и недостатки сбалансированного дерево поиска по сравнению с несбалансированным? - Что такое высота дерева? Докажите оценку высоты АВЛ и красно-черного дерева из n элементов. ===== Блок "Хорошо / Отлично" ===== - Приведите пример алгоритма, где O, Θ и Ω-оценки различаются. Объясните, почему на практике важнее знать О-оценку, хотя она «пессимистична». - Объясните идею метода потенциалов для амортизационного анализа на примере динамического массива (при переполнении массив удваивается). - Сравните методы бухгалтерского учета и агрегирования. Какой из них понятнее для программиста и почему? - Проанализируйте, как выбор реализации очереди на массиве (кольцевой буфер) против реализации на связном списке влияет на кэш-эффективность и сложность операций. - Почему в развернутом связном списке размер блока (k) выбирают фиксированным (16-64), а не вычисляют как √n? - Для сценария «частые вставки/удаления в начале и последовательный обход» выберите оптимальную структуру из: массив, односвязный список, двусвязный список, развернутый список. Обоснуйте. - Для сценария «частые случайные доступы по индексу, редкие модификации» выберите оптимальную структуру из: массив, односвязный список, двусвязный список, развернутый список. Обоснуйте. - Для сценария «непредсказуемый паттерн доступа с преобладанием операций в середине структуры» выберите оптимальную структуру из: массив, односвязный список, двусвязный список, развернутый список. Обоснуйте. - Опишите идею XOR-связного списка, почему он не получил широкого распространения, несмотря на экономию памяти? - Объясните влияние выбора последовательности шагов (последовательность Шелла, последовательность Седжвика) на сложность сортировки Шелла. - Докажите, что TimSort работает за O(n log n) в худшем случае. Для чего нужен режим «галопа»? - Докажите корректность LSD-сортировки методом математической индукции. - Почему Radix sort может работать быстрее, чем O(n log n), и не противоречит ли это теореме о нижней оценке для сортировок сравнениями? - Проведите амортизационный анализ методом бухгалтерского учета операции вставки и удаление в хеш-таблицу с цепочками при динамическом перехешировании. - Докажите, что BFS гарантированно находит кратчайший путь в невзвешенном графе. - Сравните временную сложность BFS для графа, представленного матрицей смежности и списками смежности. Почему списки предпочтительнее? - Обоснуйте выбор между реализацией алгоритма Дейкстры на массиве O(n²) и на двоичной куче O((n+m)log n). - Докажите теорему о том, что высота АВЛ-дерева не превышает 1.44 * log2(n). - Сравните АВЛ и красно-черные деревья: какое из них обеспечивает более жесткую балансировку, а какое — более быстрые вставки/удаления и почему? - Обоснуйте преимущества B+-деревьев (классические B-деревья) для баз данных, особенно в контексте блочного ввода-вывода. - Как выбор параметра t (порядка/минимальной степени) B-дерева влияет на производительность в системах с жесткими дисками (HDD/SSD)? - Для структуры данных Rope докажите, что высота дерева остается O(log n) при использовании АВЛ-балансировки. ==== Старые вопросы (не актуально)==== === Вопрос №1 === Сделайте сравнительный анализ O, Ω и Θ-нотаций, включая их формальные математические определения. Объясните, почему в практике программирования и при проектировании систем наибольшее распространение получила O-нотация, несмотря на её «пессимистичность». Проиллюстрируйте свой ответ примером алгоритма, для которого O, Ω и Θ-оценки различны, и объясните, какие практические выводы для разработчика из этого следуют. === Вопрос №2 === Сравните три основных метода амортизационного анализа (агрегирования, бухгалтерский, потенциалов) на примере одной и той же структуры данных (на усмотрение студента). Какой из методов, по вашему мнению, является наиболее универсальным и мощным инструментом доказательства, а какой — наиболее интуитивно понятным для программиста? Обоснуйте свою точку зрения. === Вопрос №3 === На примере стека, очереди и дека раскройте практическое различие между абстрактным типом данных (АТД) и конкретной структурой данных. Почему связный список считается конкретной структурой данных, а не АТД? Проанализируйте, как выбор между реализацией на массиве (кольцевом буфере) и на связном списке влияет на: Амортизированную сложность операций, эффективность использования памяти и локальность данных и кэш-эффективность. === Вопрос №4 === Развернутый связный список представляет собой гибридную структуру, сочетающую преимущества массивов и связных списков. Объясните, почему на практике выбирают фиксированные значения k = 16-64, а не вычисляют √n динамически. Какие архитектурные особенности современных процессоров влияют на этот выбор? Предложите модификацию развернутого списка, которая сохраняла бы асимптотику O(√n) для операций, но улучшала производительность для паттерна доступа "частое добавление в начало". Обоснуйте эффективность вашего решения. === Вопрос №5 === Проведите детальный сравнительный анализ временной и пространственной сложности для массивов, односвязных, двусвязных списков и развернутых списков. Для каждой структуры данных: Постройте таблицу сложности операций (доступ по индексу, поиск, вставка/удаление в начало/середину/конец) с указанием лучшего, худшего и среднего случаев. На основе анализа предложите оптимальную структуру данных для каждого из сценариев: а) Частые случайные доступы по индексу, редкие модификации б) Частые вставки/удаления в начале, последовательный обход в) Непредсказуемый паттерн доступа с преобладанием операций в середине структуры. Для сценария (в) обоснуйте, может ли XOR-связный список быть практичной альтернативой, учитывая его особенности и ограничения. === Вопрос №6 === На примере сортировки Шелла и TimSort представьте анализ сложности сортировки Шелла. Анализ оптимальных последовательностей смещений и их асимптотической сложности. Объяснение, почему последовательность Шелла дает O(n²) в худшем случае. Для TimSort дайте строгое обоснование выбора параметра minrun и его оптимизации в диапазоне [32, 64]. Алгоритма балансировки слияния подмассивов с поддержанием инвариантов стека. Доказательства сложности O(n log n) с учетом режима галопа. Сравните практическую эффективность этих алгоритмов для различных типов данных === Вопрос №7 === Для несравнительных методов сортировки детально опишите алгоритм устойчивой сортировки подсчетом для сложных объектов, включая преобразование в префиксные суммы. Докажите корректность LSD-сортировки методом индукции по разрядам. Проанализируйте, при каких условиях цифровая сортировка превосходит сравнениями-based алгоритмы(comparison-based sorting), и почему это не противоречит теореме о нижней оценке === Вопрос №8 === Проведите амортизационный анализ операции добавления в хеш-таблицу с цепочками при динамическом перехешировании: Объясните, почему порог перехеширования выбран как 4n/3 Докажите, что амортизированная стоимость операции составляет O(1), используя метод бухгалтерского учета. === Вопрос №9 === Проведите сравнительный анализ алгоритмов DFS и BFS, включая математическую модель работы каждого алгоритма. Анализ временной и пространственной сложности для различных представлений графа (матрица смежности vs списки смежности). Объясните, почему DFS естественным образом использует стек, а BFS — очередь. Объясните, почему BFS гарантированно находит кратчайший путь в невзвешенных графах. === Вопрос №10 === Дайте обоснование корректности алгоритма Дейкстры, доказательство того, что алгоритм не работает с отрицательными весами (приведите контрпример). Докажите, что наивная реализация с массивом имеет сложность O(n² + m) Обоснуйте, почему использование двоичной кучи дает O((n + m) log n) === Вопрос №11 === Проведите детальный сравнительный анализ АВЛ-деревьев, красно-черных деревьев, B-деревьев, включая формальное доказательство высоты для каждого типа деревьев (теорема о высоте АВЛ-дерева, лемма о чёрной высоте для красно-черных, оценка высоты B-дерева). Математический анализ сложности операций вставки, удаления и поиска с учётом различных сценариев балансировки. Доказательство корректности операций балансировки (вращения в АВЛ, перекрашивания в красно-черных, разбиения/слияния в B-деревьях) === Вопрос №12 === Для структуры данных Rope докажите, что высота дерева остается O(log n) при использовании АВЛ-балансировки. Проведите амортизационный анализ операций конкатенации и разделения с учётом перебалансировки. Предложите и обоснуйте модификацию Rope, которая сохраняет персистентность при сохранении асимптотики O(log n) === Вопрос №13 === Для B-деревьев дайте строгое обоснование операций докажите, что инварианты B-дерева сохраняются при разбиении узлов и слиянии. Проанализируйте, как выбор параметра t влияет на производительность в системах с иерархической памятью. Обоснуйте преимущества B+-деревьев перед классическими B-деревьями для систем управления базами данных.