Алгоритмы 22

Алгоритмы

Графы: представление, обход (BFS/DFS), практическое применение

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

Алгоритмы

Деревья: бинарные деревья поиска, балансировка, map/set на их основе

Введение В статьях SQL-цикла упоминала B-tree индексы СУБД — в этой статье разберём похожую по духу, но более общую структуру данных программирования: бинарные деревья поиска, лежащие в основе…

Алгоритмы

Хеш-таблицы: unordered_map/unordered_set, коллизии, производительность

Введение QSet для демонстрации линейной сложности поиска дубликатов — в этой статье разберём хеш-таблицы (std::unordered_map/unordered_set, QHash/QSet) подробнее: принцип работы через хеш-функцию, проблему коллизий, и практические последствия для производительности.…

STL

Структуры данных STL изнутри: vector, list, deque — когда что выбрать

Введение Основной цикл статей уже использовал std::vector/QVector без подробного разбора внутреннего устройства — в этой статье разберём, как реализованы основные линейные контейнеры STL изнутри, и какая внутренняя структура…

Алгоритмы

Обзор сложности алгоритмов: Big O на практике для C++ разработчика

Введение Все предыдущие циклы статей писали код, работающий корректно — но не всегда явно анализировали, насколько быстро этот код работает при росте объёма данных. В этой статье разберём…

Алгоритмы

Итоговый мини-проект: применение алгоритмов для оптимизации реального Qt-приложения

Введение В заключительной статье цикла, и всего плана статей в его текущем объёме, соберём итоговый проект, демонстрирующий применение разобранных алгоритмов и структур данных для оптимизации реалистичной, практической задачи…

Алгоритмы

Структуры данных для специфичных задач: куча (priority_queue), trie, union-find

Введение В завершение разбора структур данных рассмотрим три специализированные структуры, каждая решающая конкретный, узкий класс задач значительно эффективнее общих структур: кучу для эффективного доступа к минимуму/максимуму (уже использованную…

Алгоритмы

Жадные алгоритмы и их применение

Введение В отличие от динамического программирования, рассматривающего все возможные варианты решения подзадач, жадный алгоритм на каждом шаге делает локально оптимальный выбор, никогда не пересматривая его позже — в…

Алгоритмы

Динамическое программирование: концепция и практические примеры

Введение Динамическое программирование (ДП) — техника решения задач путём разбиения на подзадачи с сохранением (мемоизацией) уже вычисленных результатов подзадач, избегая повторного пересчёта одного и того же — в…

Алгоритмы

Поиск: бинарный поиск и его вариации, std::lower_bound/upper_bound

Введение Бинарный поиск как принцип, лежащий в основе поиска в сбалансированном дереве — в этой статье разберём бинарный поиск отдельно, как самостоятельный алгоритм для отсортированных линейных коллекций, и…