Каков хороший алгоритм получения минимального вершинного покрытия дерева?

T (V, E) - дерево, из которого trees следует, что для любого листа tree любое минимальное вершинное algorithms покрытие должно включать dynamic-programming либо лист, либо вершину, смежную algorithm с листом. Это дает нам следующий algorithm алгоритм нахождения S, вершинного algorithms покрытия:

  1. Найдите все листья дерева (BFS или DFS), O (| V |) в дереве.
  2. Если (u, v) - такое ребро, что v - лист, добавьте u к покрытию вершины и сократите (u, v). Это оставит вас с лесом T_1 (V_1, E_1), ..., T_n (U_n, V_n).
  3. Теперь, если V_i = {v}, что означает | V_i | = 1, то это дерево можно отбросить, поскольку все ребра, инцидентные на v, покрыты. Это означает, что у нас есть условие завершения рекурсии, при котором у нас либо одна вершина, либо нет, и мы можем вычислить S_i в качестве покрытия для каждого T_i и определить S поскольку все вершины из шага 2 объединяют покрытие каждого T_i.

Теперь осталось dynamic-programming только проверить, что если algorithms исходное дерево имеет только algorithm-design одну вершину, мы возвращаем dynamic-programming 1 и никогда не запускаем trees рекурсию, а минимальное покрытие algorithm-design вершин может быть вычислено.

Изменить:

На algorithm самом деле, если немного algorithm-design подумать, это можно сделать algorithm с помощью простого варианта algorithm DFS.

algorithm

tree

dynamic-programming

2022-07-17T11:12:49+00:00
Вопросы с похожей тематикой, как у вопроса:

Каков хороший алгоритм получения минимального вершинного покрытия дерева?