Алгоритмы и структуры данных
Алгоритмы и структуры данных с нуля: массивы и сортировка, стеки, очереди, списки, рекурсия, деревья, хеш-таблицы, кучи и графы — простыми словами, с примерами и O-нотацией. Маршрут от простого к сложному.
Раздел — для тех, кто хочет разобраться в основах алгоритмов и структур данных с нуля и простыми словами. Пятнадцать статей идут от простого к сложному: сначала массивы и сортировка, потом структуры-инструменты, деревья, хеш-таблицы и, наконец, графы. У каждой структуры разбираем, что она делает быстро, что медленно и почему, — и всё это на общей мерке скорости, O-нотации. Читать удобнее по порядку, но каждая статья самодостаточна.
Основы
- Зачем нужны структуры данных и алгоритмы — что это такое, три роли структур, обзор и базовые термины.
- Массивы, двоичный поиск и O-нотация — самый простой контейнер и то, как измеряют скорость: O(1), O(N), O(log N).
- Простая сортировка: пузырёк, выбор, вставка — три базовых алгоритма O(N²) и чем они отличаются.
Структуры-инструменты
- Стеки и очереди — LIFO и FIFO, дек и приоритетная очередь: доступ намеренно ограничен.
- Связанные списки — узлы и ссылки, быстрая вставка вместо быстрого доступа.
- Рекурсия — метод вызывает сам себя; базовое условие, стек вызовов, «разделяй и властвуй».
Быстрая сортировка
- Нетривиальная сортировка: Шелла, быстрая, поразрядная — как обогнать O(N²) и дойти до O(N·log N) и даже O(N).
Деревья
- Двоичные деревья — быстрый поиск и вставка сразу; обход, удаление, вырождение.
- Красно-чёрные деревья — как удержать баланс автоматически поворотами и перекраской.
- Деревья 2-3-4 и B-деревья — узлы с несколькими ключами; отсюда индексы баз данных.
Хеш-таблицы и кучи
- Хеш-таблицы — доступ по ключу за O(1); коллизии, пробирование, цепочки.
- Пирамиды (кучи) — мгновенный максимум, основа приоритетной очереди и heapsort.
Графы
- Графы — вершины и рёбра; обход в глубину и в ширину, топологическая сортировка.
- Взвешенные графы — минимальный остов и кратчайший путь (алгоритм Дейкстры).
Итог
- Как выбрать структуру данных — сводка раздела и практическое руководство, что брать под какую задачу.
Связанное
- Как устроена HashMap внутри — хеш-таблица на конкретном примере из Java.
- Коллекции Java — списки, множества и словари стандартной библиотеки.
- Системный дизайн — где эти структуры встречаются в проектировании больших систем.