алгоритм поиска максимального независимого множества в дереве

Мне нужен алгоритм для поиска максимального независимого множества в дереве. Я думаю, начните со всех листовых узлов, а затем удалите прямые родительские узлы к этим листовым узлам, затем выберите родительские узлы родительских узлов, которые мы удалили, повторите эту процедуру рекурсивно, пока мы не доберемся до root. и это делается в O (n) время? любой ответ приветствуется. спасибо.

и может ли кто-нибудь указать мне алгоритм, чтобы найти максимальный доминирующий набор в дереве.

2 ответов


МАКСИМАЛЬНЫЙ НЕЗАВИСИМЫЙ НАБОР

вы можете вычислить максимальный независимый набор по глубине первого поиска по дереву.

поиск вычислит два значения для каждого поддерева на графике:

  1. A (i) = размер максимального независимого множества в поддереве, коренящемся в i с ограничением, что узел i должен быть включен в набор.
  2. B (i) = размер максимального независимого множества в поддереве, коренящемся в i с ограничением, которое узел не должен быть включен в набор.

Они могут быть вычислены рекурсивно, рассматривая два случая:

  1. корень поддерева не входит.

    B (i) = sum(max(A(j), B(j)) для j у детей(i))

  2. корень поддерева включен.

    A (i) = 1 + sum(B(j) для j у детей(i))

размер максимального независимого набора во всем дереве max(a(root),B(root)).

МАКСИМАЛЬНОЕ ДОМИНИРУЮЩЕЕ МНОЖЕСТВО

по словам определение доминирующего множества в Википедии максимальное доминирующее множество всегда тривиально равно включению каждого узла в график - но это, вероятно, не то, что вы имеете в виду?


  • чтобы найти максимальный независимый набор вершин, мы можем использовать важное свойство дерева: каждое дерево двудольное, т. е. мы можем раскрасить вершины дерева, используя только два цвета, так что никакие две соседние вершины не имеют одного цвета.

  • выполните обход DFS и начните окрашивать вершины черным и белым.

  • выберите набор вершин (черных или белых), которые больше по числу. Это даст тебе максимальное независимое множество вершин в дереве.

некоторая интуиция за тем, почему этот алгоритм работает:

  • давайте сначала вернемся к определению максимального независимого множества вершин. Мы должны выбрать только одну конечную точку края, и мы должны покрыть каждый край дерева, удовлетворяющий этому свойству. Нам не разрешается выбирать обе конечные точки ребра.

  • какое двухцветным свойствам графа делать? Он просто делит множество вершин на два подмножества (белое и черное), а вершины белого цвета напрямую связаны с черными. Таким образом, если мы выбираем либо все белые, либо все черные, мы по своей сути выбираем независимый набор вершин. Таким образом, выбрать maximal independent установите, перейдите к подмножеству, размер которого больше.