使用贪婪算法找到树的最小尺寸支配集

时间:2011-03-15 17:06:54

标签: algorithm greedy

支配集(DS):=给定无向图G =(V; E),一组 顶点S V是一个支配集,如果对于V中的每个顶点,都有一个顶点 与v相邻的S。整个顶点集V是一个平凡的支配集 任何图表。

找到树的最小尺寸支配集。

2 个答案:

答案 0 :(得分:2)

1-始终从叶子开始

2-将他们的父母添加到DS并剪切孩子

3-将选定父级的父级标记为已占优势

4-完成流程后,检查那些标记的节点是否有子节点 支配并将它们添加到DS

祝你好运

答案 1 :(得分:0)

我将尝试以更正式的方式证明这一点。

概述

要证明您的贪婪算法是正确的,您需要证明两件事:

  1. 首先,您的贪婪选择是有效的,并且可以始终用于形成最佳解决方案,并且
  2. 第二,您的问题具有最优的子结构属性,也就是说,您可以形成从最优解到自己问题的子问题的最优解。

贪婪选择:在树T =(V,E)中,在树上找到叶数最多的顶点 v 。将其添加到您的主导集中。

最佳子结构

T'=(V',E')使得:

  • V'= V \({a:a ϵ V,a与v相邻,并且a的度≤2}∪{v})
  • E'= E-涉及任何已移除顶点的任何边

换句话说

寻找具有最多叶数的顶点,移除其度数小于或等于2的任何相邻顶点,然后移除v本身,并将其添加到主导集中。重复此操作,直到没有顶点为止。


证明

贪婪选择证明

对于任何叶子 l ,必须是其自身或其父级位于主导集中。在我们的例子中,我们会选择的顶点 v 处于这种情况。

A = { v 1 ,v 2 ,...,v k }是T的最小主导集。如果A已经具有 v 作为成员,我们就完成了。如果不是,则必须具有 l ,否则它不是主导集。因此,我们可以简单地形成 A' = { A - {l} + { v }},主导地位。由于| A' | = | A |, A'仍然是最佳的。因此,我们始终可以通过我们的贪婪选择来形成最佳解决方案。

最佳子结构证明

假设 A T =( V,E )的最小主导集,但是 A' = A \ { v }不是上述定义的 T'的最小主导集。

使T'的最小主导集称为B。如上所述,| B | <| A' |。可以证明 B' = B ∪{ v }是 T 的主要集合。然后,由于| A' | = | A | -1 | | B' | = | B | + 1,我们得到| B' | <| A |。这是矛盾的,因为我们假设 A 是最小的独立集。因此必须 A'也是 T'的最小独立集合。

证明 B' = B ∪{ v }是 T 的主要集合:

  • v 的相邻顶点可能不在 T'中。我们将显示 T'中未考虑的任何顶点将由 B'中的顶点控制(这意味着我们最佳地选择了集合):让 y 是与 v 相邻的某个顶点,而不是在 T'中。根据 T'的定义,y只能具有1级或2级。现在, y v 主导。如果 y 是一片叶子,那么我们就完成了。但是,如果 y 为2级,则 y 连接到另一个必须位于 B 主导集中的节点。这是因为,当我们删除 v 使其成为T'时, y 的度变为1,这意味着必须添加 y 或其父级到主导地位。因此, B' T 的主导集。
相关问题