алгоритм поиска максимального независимого множества в дереве
Мне нужен алгоритм для поиска максимального независимого множества в дереве. Я думаю, начните со всех листовых узлов, а затем удалите прямые родительские узлы к этим листовым узлам, затем выберите родительские узлы родительских узлов, которые мы удалили, повторите эту процедуру рекурсивно, пока мы не доберемся до root. и это делается в O (n) время? любой ответ приветствуется. спасибо.
и может ли кто-нибудь указать мне алгоритм, чтобы найти максимальный доминирующий набор в дереве.
2 ответов
МАКСИМАЛЬНЫЙ НЕЗАВИСИМЫЙ НАБОР
вы можете вычислить максимальный независимый набор по глубине первого поиска по дереву.
поиск вычислит два значения для каждого поддерева на графике:
- A (i) = размер максимального независимого множества в поддереве, коренящемся в i с ограничением, что узел i должен быть включен в набор.
- B (i) = размер максимального независимого множества в поддереве, коренящемся в i с ограничением, которое узел не должен быть включен в набор.
Они могут быть вычислены рекурсивно, рассматривая два случая:
-
корень поддерева не входит.
B (i) = sum(max(A(j), B(j)) для j у детей(i))
-
корень поддерева включен.
A (i) = 1 + sum(B(j) для j у детей(i))
размер максимального независимого набора во всем дереве max(a(root),B(root)).
МАКСИМАЛЬНОЕ ДОМИНИРУЮЩЕЕ МНОЖЕСТВО
по словам определение доминирующего множества в Википедии максимальное доминирующее множество всегда тривиально равно включению каждого узла в график - но это, вероятно, не то, что вы имеете в виду?
чтобы найти максимальный независимый набор вершин, мы можем использовать важное свойство дерева: каждое дерево двудольное, т. е. мы можем раскрасить вершины дерева, используя только два цвета, так что никакие две соседние вершины не имеют одного цвета.
выполните обход DFS и начните окрашивать вершины черным и белым.
выберите набор вершин (черных или белых), которые больше по числу. Это даст тебе максимальное независимое множество вершин в дереве.
некоторая интуиция за тем, почему этот алгоритм работает:
давайте сначала вернемся к определению максимального независимого множества вершин. Мы должны выбрать только одну конечную точку края, и мы должны покрыть каждый край дерева, удовлетворяющий этому свойству. Нам не разрешается выбирать обе конечные точки ребра.
- какое двухцветным свойствам графа делать? Он просто делит множество вершин на два подмножества (белое и черное), а вершины белого цвета напрямую связаны с черными. Таким образом, если мы выбираем либо все белые, либо все черные, мы по своей сути выбираем независимый набор вершин. Таким образом, выбрать maximal independent установите, перейдите к подмножеству, размер которого больше.