算法在树中查找最大独立集

时间:2012-11-24 18:29:54

标签: algorithm tree independent-set

我需要一种算法来查找树中的最大独立集。我想从所有叶节点开始,然后删除直接父节点到这些叶节点,然后选择我们删除的父节点的父节点,递归地重复这个过程,直到我们到达root。这是在O(n)时间内完成的吗?任何回复表示赞赏。感谢。

有人可以指点一个算法来找到树中的最大支配集。

3 个答案:

答案 0 :(得分:17)

MAXIMUM INDEPENDENT SET

您可以通过树中的深度优先搜索来计算最大独立集。

搜索将为图中的每个子树计算两个值:

  1. A(i)=以i为根的子树中最大独立集的大小,约束为节点i必须包含在集合中。
  2. B(i)=以i为根的子树中最大独立集的大小,其限制是节点i不得包含在集合中。
  3. 这些可以通过考虑两种情况递归计算:

    1. 不包括子树的根。

      B(i)=儿童(i)中j的总和(max(A(j),B(j))

    2. 包含子树的根。

      A(i)= 1 +总和(儿童(i)中j的B(j))

    3. 整棵树中最大独立集的大小为max(A(root),B(root))。

      MAXIMAL DOMINATING SET

      根据definition of dominating set in wikipedia,最大支配集总是平凡地等于包含图中的每个节点 - 但这可能不是你的意思?

答案 1 :(得分:0)

  • 为了找到最大的独立顶点集,我们可以使用树的一个重要属性:每个树都是Bipartite,即我们可以使用两种颜色为树的顶点着色,这样就不会有两个相邻的顶点具有相同的颜色。

  • 执行DFS遍历并使用BLACK和WHITE开始着色顶点。

  • 选择数量更多的顶点集(BLACK或WHITE)。这将为您提供树的最大独立顶点集。

这个算法工作原理背后的一些直觉:

  • 让我们首先重新审视最大独立顶点集的定义。我们必须只选择边缘的一个端点,我们必须覆盖满足此属性的树的每个边缘。我们不允许选择边缘的两个端点。

  • 现在图表的双重组合有什么作用?它简单地将顶点集划分为两个子集(白色和黑色),白色顶点直接连接到黑色顶点。因此,如果我们选择所有WHITE或所有BLACK,我们固有地选择一组独立的顶点。因此选择最大独立 设置,去寻找尺寸较大的子集。

答案 2 :(得分:0)

简单快速的方法:

只要图不为空,则将叶v(度1)迭代添加到独立集合V中,并删除v及其邻居。

这应该可行,因为

  • 一棵树总是有一个度为1的顶点,

  • 在V中添加一个度为1的顶点可保持最优性,并且

  • 此步骤的结果再次给出了树木或森林,即树木的结合体。