选择k个子集

时间:2010-07-17 15:40:56

标签: algorithm graph complexity-theory np-hard poset

我在尝试分类算法时遇到了以下算法问题。元素被分类为多层次结构,我理解为具有单根的poset。我必须解决以下问题,看起来很像set cover problem

我上传了我的Latex-ed问题说明here

设计满足1& 1的近似算法。 2很容易,只需从G的顶点开始并“向上走”或从根开始并“向下走”。假设您从根开始,迭代地展开顶点,然后删除不必要的顶点,直到您至少有k个子格。近似界限取决于顶点的子节点数,这对我的应用程序来说是可以的。

有谁知道这个问题是否有正确的名称,或者问题的树版本?我有兴趣知道这个问题是否是NP难的,也许有人想要一个好的NP难问题来减少或者有一个多项式算法来解决这个问题。如果您同时收集your million dollar price。 ;)

1 个答案:

答案 0 :(得分:2)

DAG版本很难通过(滚筒)减少设置封面。设置k = 2并做明显的:条件(2)阻止我们取根。 (注意,(3)实际上并不暗示(2)因为下界k。)

树版本是串并行poset版本的特例,可以在多项式时间内完全求解。这是一个递归公式,给出一个多项式p(x),其中x n 的系数是基数n的覆盖数。

要覆盖的单个顶点:p(x)= x。

其他顶点:p(x)= 1 + x。

并行组合,其中q和r是两个偏序的多项式:q(x)r(x)。

系列组合,其中q是顶部poset的多项式,r是底部的多项式:如果顶部poset不包含要覆盖的顶点,则p(x)=(q(x) - 1)+ r( X);否则,p(x)= q(x)。