Алгоритмы и структуры данных на C++: сортировки, поиск, обходы, разбор классических задач с оценкой сложности. Каждый алгоритм — с реализацией, пояснением шагов и примерами применения в реальном коде.
Структуры данных для специфичных задач: куча (priority_queue), trie, union-find
Введение В завершение разбора структур данных рассмотрим три специализированные структуры, каждая решающая конкретный, узкий класс задач значительно эффективнее общих структур: кучу для эффективного доступа к минимуму/максимуму (уже использованную…
Жадные алгоритмы и их применение
Введение В отличие от динамического программирования, рассматривающего все возможные варианты решения подзадач, жадный алгоритм на каждом шаге делает локально оптимальный выбор, никогда не пересматривая его позже — в…
Динамическое программирование: концепция и практические примеры
Введение Динамическое программирование (ДП) — техника решения задач путём разбиения на подзадачи с сохранением (мемоизацией) уже вычисленных результатов подзадач, избегая повторного пересчёта одного и того же — в…
Поиск: бинарный поиск и его вариации, std::lower_bound/upper_bound
Введение Бинарный поиск как принцип, лежащий в основе поиска в сбалансированном дереве — в этой статье разберём бинарный поиск отдельно, как самостоятельный алгоритм для отсортированных линейных коллекций, и…
Сортировки: сравнение алгоритмов, std::sort изнутри
Введение Сортировка — одна из самых частых операций в практическом коде, и std::sort/std::ranges::sort обычно используются как готовый, не требующий раздумий инструмент — в этой статье разберём, что происходит…
Кратчайшие пути: алгоритм Дейкстры и его применение в реальных задачах
Введение Как способ найти кратчайший путь по числу рёбер в невзвешенном графе — для взвешенного графа (где у разных связей разная «стоимость») нужен другой алгоритм. В этой статье…