411просмотров
23 ноября 2025 г.
Score: 452
Ура, снова пост! Сразу говорю, больше постов по запросам не будет, потому что heavy light decomposition(далее хлд) - ну это не тема, это пи...
Итак, хлд - метод разбиения подвешенного дерева(дерева с одним корнем) на множество путей. Декомпозиция - разбиение одной сложной задачи на несколько более простых(+- как динамическое программирование)
А далее рассмотрим простой пример(да, я писал сначала нормально, но потом понял, что сам не знаю некоторые термины, так что нафиг надо). Предположим, у нас есть карта, на которой изображена сеть дорог в различные города(здесь города - множество вершин V, а дороги - множество рёбер E). И нам нужно постоянно и быстро отвечать на вопросы: Кратчайшая дорога из A в B? Прибавь ко всем городам на пути Z-O-V 10? и т.д. Если все делать "в лоб", например, алгоритмом Дейкстры, то полученная сложность будет O(n**2) (ну ладно, O(m*log(n)) при использовании кучи.) Хлд позволяет "выпрямить" дерево, превращая его в набор отрезков.
Как проходит разбиение?
Обозначим ребро тяжелым, если оно ведёт к самому большому по размеру поддереву для данной вершины. Остальные рёбра для данной вершины - легкие. Если заметить открытую вкладку с deepseek.com на моем компьютере, то становится очевидно, что у каждой вершины может быть лишь 1 тяжелое ребро(Если у вершины два равных поддерева, то тяжёлым можно выбрать любое). После того, как мы разделим все вершины на лёгкие и тяжёлые, последние образуют непрерывную цепь, называемую тяжёлой. Теперь путь из A в B можно разбить на множество кусочков, где каждый кусочек - часть какой-то тяжёлой цепи.
Зачем это нужно?
Самая большая выгода в том, что тяжелые цепи — это непрерывные отрезки в массиве. Мы можем пронумеровать вершины так, чтобы все вершины одной тяжелой цепи шли в массиве подряд. Это позволяет использовать структуры данных для работы с отрезками (например, дерево отрезков).
Задача: Найти Максимум на пути из A в B.
1) Разбиваем путь на непрерывные отрезки
2) Для каждого из отрезком запрашиваем результат
3) Объединяем результат.
Возможная реализация(писал сами знаете кто) в комментах.
Удачи!
#графы
📺Channel 🤡Creator