我正在寻找一种算法,可以找到最小的顶点子集,通过从图中删除此子集(以及连接这些顶点的边),使所有其他顶点变得不相连(即图中将没有任何边)。
- 是否有这样的算法?
- 如果没有:您能推荐一些启发式方法来确定顶点吗?
我对图论有基本的了解,敬请谅解其中的任何不正确之处。
我正在寻找一种算法,可以找到最小的顶点子集,通过从图中删除此子集(以及连接这些顶点的边),使所有其他顶点变得不相连(即图中将没有任何边)。
我对图论有基本的了解,敬请谅解其中的任何不正确之处。
min sum_{v in V} x(v)
s.t.
forall {u, v} in E, x(u) + x(v) >= 1
forall v in V, x(v) in {0, 1}.
尝试这种方式:
重新排序堆,因为顶点的边数已更改,重复上一步,直到第一个顶点的相邻列表长度为0;
Heap Q
int count = 0
while(1){
Q = Create_Heap(G)
Vertex first = Q.pop
if(first.adjacents.size() == 0) {
break
}
for( Vertex v : first.adjacent ){
RemoveEdge(first, v)
RemoveEdge(v, first) /* 取决于实现 */
}
count = count + 1
}
return count