Существует жадный алгоритм поиска минимального покрытия вершин дерева, который использует обход DFS.
- Для каждого листа дерева выберите его родителя (т.е. его родитель находится в минимальном покрытии вершин).
- Для каждого внутреннего узла:
если ни один из его дочерних элементов не выбран, выберите этот узел.
Как мне доказать, что эта жадная стратегия дает оптимальный ответ? Что нет покрытия вершин меньшего размера, чем то, которое создает приведенный выше алгоритм?
Я не думаю, что логика для второго шага верна. Если вы рассматриваете вырожденное дерево с 6 вершинами, идущими вниз полностью вправо (отметьте их 1-6 в соответствии с их глубиной) Затем первый шаг вашего алгоритма выберет узел 5. Второй шаг, возможно, выберет первый узел (корень), а затем второй узел (дочерний) ИЛИ третий узел. Однако это неверно, поскольку вы хотите выбрать только узел 2 и узел 5 для правильного решения.
—
miguel.martin
@ miguel.martin Если покрытие вершин содержит только вершины с номерами 2 и 5, ребро между узлами 3 и 4 не будет покрыто.
—
Laschet Jain