Перейти к основному контенту
NGPP
Кабинет

Учебный конструктор · алгоритмы и структуры данных

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

Не «выучи 100 алгоритмов», а «пойми, почему одни задачи решаются за O(log n), а другие — нет». Четыре раздела: 8 алгоритмов сортировки с анимацией и кодом, 8 структур данных с таблицами сложностей, алгоритмы поиска и интерактивная Big O. Код на Python, JavaScript, Go.

Тут знакомые слова кажутся загадкой? → словарь внизу. Нужны серверы для запуска кода → конструктор серверов. Контейнеры для деплоя → Docker и K8s.

📖 Словарь: простыми словами

Встретил незнакомое слово выше — найди его здесь. Коротко — суть; разверни — подробное объяснение с аналогией.

Алгоритмчёткая последовательность шагов для решения задачи

Последовательность чётких шагов для решения задачи. Должен завершаться за конечное время и давать одинаковый результат для одних и тех же входных данных.

Big O нотацияоценка роста сложности при увеличении n

Способ описать, как растёт время/память при увеличении размера входных данных. O(n) — «растёт пропорционально n». Не точное число операций, а порядок сложности.

Сортировкаупорядочивание элементов по критерию

Упорядочивание элементов по заданному критерию. Один из самых изученных классов алгоритмов. Нет универсально «лучшей» — каждый алгоритм оптимален в своих условиях.

Стабильная сортировкасохраняет порядок равных элементов

Сохраняет относительный порядок элементов с одинаковыми ключами. Merge sort — стабильна, quick sort — нет. Важно при многоуровневой сортировке объектов.

In-place сортировкане использует дополнительную память O(n)

Не использует дополнительную память пропорционально n. Quick sort и heap sort — in-place (O(log n) стека). Merge sort требует O(n) доп. памяти.

Структура данныхспособ организации данных в памяти

Способ организации и хранения данных в памяти. Определяет сложность операций доступа, поиска, вставки и удаления. Правильный выбор важнее оптимизации кода.

Массивэлементы подряд в памяти, O(1) доступ по индексу

Последовательность элементов одного типа в непрерывном блоке памяти. O(1) доступ по индексу, кэш-дружелен. Вставка/удаление в середину — O(n).

Связный списокцепочка узлов с указателями, O(1) вставка

Цепочка узлов, каждый из которых содержит данные и указатель на следующий. O(1) вставка при наличии указателя на позицию, O(n) доступ по индексу.

Стек (Stack)LIFO — последний пришёл, первый ушёл

LIFO-структура: последний добавленный элемент извлекается первым. Push и Pop — O(1). Используется в стеке вызовов, undo/redo, DFS, проверке скобок.

Очередь (Queue)FIFO — первый пришёл, первый ушёл

FIFO-структура: первый добавленный элемент извлекается первым. Enqueue и Dequeue — O(1). Используется в BFS, очередях задач, буферах данных.

Хеш-таблицаключ → значение, O(1) среднее

Структура ключ-значение с O(1) операциями в среднем. Использует хеш-функцию для вычисления позиции элемента. Основа словарей, кэшей и множеств.

Коллизиядва ключа → один хеш

Ситуация, когда два разных ключа дают одинаковый хеш. Обрабатывается цепочками (separate chaining) или открытой адресацией (open addressing).

Бинарное дерево поиска (BST)упорядоченное дерево, O(log n) при балансе

Дерево, где для каждого узла: все в левом поддереве меньше, в правом — больше. O(log n) при сбалансированном. Деградирует до O(n) без балансировки (AVL/Red-Black).

Куча (Heap)O(1) доступ к max/min, O(log n) вставка

Бинарное дерево, где родитель всегда ≥ (max-heap) или ≤ (min-heap) потомков. O(1) доступ к максимуму/минимуму. Основа Priority Queue и алгоритма Дейкстры.

Priority Queueочередь с приоритетами, всегда даёт max/min

Очередь, где каждый элемент имеет приоритет. Извлекается всегда элемент с наивысшим приоритетом. Реализуется через heap.

Графвершины (V) + рёбра (E), моделирует связи

Набор вершин (V) и рёбер (E). Бывает ориентированный/неориентированный, взвешенный/невзвешенный. Моделирует дороги, соцсети, зависимости пакетов, интернет-маршруты.

BFS (поиск в ширину)обход по уровням, кратчайший путь в невзвешенном

Обход графа уровень за уровнем. Находит кратчайший путь в невзвешенном графе. Использует очередь. O(V+E).

DFS (поиск в глубину)обход вглубь, поиск циклов и топосорт

Обход графа, идя как можно глубже перед возвратом. Использует стек (или рекурсию). Находит циклы, топологическую сортировку, связные компоненты. O(V+E).

Алгоритм Дейкстрыкратчайший путь в взвешенном графе, O((V+E) log V)

Находит кратчайший путь от источника до всех вершин в взвешенном графе с неотрицательными весами. Использует min-heap. O((V+E) log V).

Рекурсияфункция вызывает себя, нужен базовый случай

Функция, которая вызывает сама себя. Требует базового случая для остановки. Каждый вызов добавляет кадр в стек вызовов. Может переполнить стек при глубокой рекурсии.

Мемоизациякэширование результатов функции

Кэширование результатов функции для одинаковых аргументов. Основа динамического программирования. Превращает экспоненциальную рекурсию в линейную (напр., фибоначчи).

Разделяй и властвуйразбить → решить → объединить

Стратегия: разбить задачу на подзадачи, решить каждую рекурсивно, объединить результаты. Основа merge sort, quick sort, бинарного поиска. Даёт O(n log n) для сортировки.

Амортизированная сложностьсредняя сложность в серии операций

Средняя сложность операции с учётом всей последовательности вызовов. Push в динамический массив — O(1) амортизированно: иногда O(n) на удвоение, но суммарно дёшево.

Дальше по теме

Эти инструменты связаны с текущим — так задачи стыкуются на практике.

Все инструменты — в каталоге.