这个问题是不是可以使用多项式时间算法,还是 NP-hard 问题?如果是,有人可以帮我吗?
Posted
技术标签:
【中文标题】这个问题是不是可以使用多项式时间算法,还是 NP-hard 问题?如果是,有人可以帮我吗?【英文标题】:Is a polynomial time algorithm possible for this question or is it a NP-hard problem? If yes, can someone help me with it?这个问题是否可以使用多项式时间算法,还是 NP-hard 问题?如果是,有人可以帮我吗? 【发布时间】:2021-06-10 07:16:59 【问题描述】:我们已经给出了树,假设 T 具有顶点集 V,现在尝试给出一个算法来找到顶点 W 的最小基数子集。给定集合 V 中的每个顶点都有一条边集合 W 中至少有一个顶点。
【问题讨论】:
【参考方案1】:这可以通过递归算法在线性时间内解决。首先为树选择一个根,然后为每个顶点构建一个子列表。如果子树中的每个顶点(可能除了子树的根)都在集合中或与集合的成员相邻,则我们说一组顶点“覆盖”了一个子树。
该算法将这棵树中的顶点v
作为输入,并返回一个由三个数字组成的元组,它们是覆盖v
的子树的子集的最小基数,它们分别(a)包括顶点v
, (b) 不包括v
,但至少包括v
的一个孩子,并且(c) 既不包括v
也不包括v
的任何一个孩子。
算法的基本情况是当输入v
是叶节点时返回元组(1, 0, 0)
。在递归的情况下,元组(a, b, c)
可以通过递归调用v
的孩子的算法的结果来计算。我不会为您解决整个问题,而是让您自己弄清楚如何做到这一点。
那么最后的答案就是min(a, b, c+1)
,其中a, b, c
是在根节点上调用算法的结果。
【讨论】:
以上是关于这个问题是不是可以使用多项式时间算法,还是 NP-hard 问题?如果是,有人可以帮我吗?的主要内容,如果未能解决你的问题,请参考以下文章