Алгоритмы и структуры данных

15 вопросов

1 Что такое Big O? Примеры сложности.

Асимптотическая верхняя граница роста времени/памяти от размера ввода. O(1) - константа; O(n) - линейная; O(n^2) - квадратичная; O(log n) - логарифм; O(n log n) - сортировка. Игнорируем константы и младшие члены.

Открыть отдельно →
2 Как устроена хеш-таблица?

Массив бакетов; ключ хешируется в индекс. Коллизии: chaining (список в бакете) или open addressing. В среднем O(1) для вставки и поиска. Load factor влияет на производительность.

Открыть отдельно →
3 B-tree vs HashMap?

B-tree - сбалансированное дерево, порядок обхода, диапазонные запросы, используется в БД для индексов. HashMap - константный доступ по ключу, нет порядка, не для диапазонов. Выбор по сценарию.

Открыть отдельно →
4 Связный список: плюсы и минусы?

Вставка/удаление в середине O(1) при известном узле; не нужна непрерывная память. Минусы: нет индекса по позиции (доступ O(n)), больше накладных расходов на указатели. Single/double linked.

Открыть отдельно →
5 Стек и очередь?

Стек - LIFO, push/pop. Очередь - FIFO, enqueue/dequeue. Реализация массивом или списком. Применение: стек для вызовов и обхода, очередь для BFS и задач.

Открыть отдельно →
6 Что такое бинарное дерево поиска (BST)?

Дерево: левый потомок меньше узла, правый больше. Поиск, вставка, удаление в среднем O(log n). Несбалансированное дерево может выродиться в список - нужны AVL, красно-черные.

Открыть отдельно →
7 Что такое бинарная куча?

Полное бинарное дерево: родитель не меньше (max-heap) или не больше (min-heap) потомков. Хранение в массиве. Извлечение минимума/максимума O(log n). Используется для приоритетной очереди, heapsort.

Открыть отдельно →
8 BFS и DFS?

BFS - обход в ширину (очередь), кратчайший путь в невзвешенном графе. DFS - в глубину (стек/рекурсия), топологическая сортировка, поиск циклов. Выбор по задаче.

Открыть отдельно →
9 Рекурсия: когда применять?

Когда задача естественно сводится к той же подзадаче (дерево, разбиение). Базовый случай и рекурсивный шаг. Минусы: стек вызовов, риск переполнения. Хвостовая рекурсия может оптимизироваться в цикл.

Открыть отдельно →
10 Какие алгоритмы сортировки знаете?

QuickSort, MergeSort - O(n log n). BubbleSort, InsertionSort - O(n^2), для малых n. CountingSort, RadixSort - линейные при ограничениях на данные. Стабильность и in-place важны по задаче.

Открыть отдельно →
11 Бинарный поиск?

Поиск в отсортированном массиве за O(log n): сравнение с серединой, сужение диапазона. Варианты: lower_bound, upper_bound. Применение: поиск вставки, поиск в ответах (бинарный поиск по ответу).

Открыть отдельно →
12 Что такое динамическое программирование?

Разбиение на перекрывающиеся подзадачи; сохранение результатов (мемоизация или таблица). Оптимальная подструктура и перекрывающиеся подзадачи. Примеры: Fibonacci, рюкзак, LCS, кратчайший путь.

Открыть отдельно →
13 Реализация LRU cache?

HashMap для доступа по ключу + двусвязный список по порядку использования. При доступе - переместить в голову; при переполнении - удалить хвост. Операции O(1). Альтернатива: LinkedHashMap в Java.

Открыть отдельно →
14 Что такое Bloom filter?

Вероятностная структура: проверка "элемент точно не в множестве" или "возможно в множестве". Ложных отрицаний нет; возможны ложные срабатывания. Экономия памяти. Применение: кеш-промахи, дубликаты.

Открыть отдельно →
15 Алгоритмы rate limiting?

Фиксированное окно, скользящее окно, token bucket, leaky bucket. Счетчики в памяти или Redis. Выбор по требованию к гладкости и точности. Распределенный вариант - с центральным хранилищем или с допуском.

Открыть отдельно →
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.