我的问题是关于用最小的顶点集感染整个图的问题。问题大致如下:对于有向图中的一个顶点A,如果对于形如(A,B)的所有入边(有向图中A指向B),B也被感染了,那么A将被感染。如果我们拿一个具体的例子来说:
在这种情况下,如果顶点E和A被感染:第一轮迭代:由于唯一指向F和D的顶点是E且E已被感染,因此顶点F和D也被感染。
第二轮迭代:由于顶点A和D都被感染,因此顶点B也被感染。
第三轮迭代:由于顶点B在第二轮迭代中被感染,所以最终顶点C也被感染。
在这种情况下,我选择的感染集合{E,A}能够感染整个图。显然,这并不总是可能的,例如感染集合为{B}(由于B没有指向A,因此无法到达A),或者感染集合为{A}(由于D是B的父节点且健康,因此B没有被感染)。
我真的想找到一种算法,能够找到最小的感染顶点集合,在任意次迭代后能够感染整个图。这样的算法是否已经存在?
为了澄清,对于自环的顶点,它必须在感染集合中,因为这是唯一能使其被感染的方式。
btilly回答了问题的NP难度。那么有人能提供一个好的近似算法吗?它不需要太高效。毕竟,我只需要在大型图上运行一次。它有大约750,000个节点,每个节点大约有10条边。