Clarkson的2近似加权顶点覆盖算法运行时分析

时间:2016-07-29 23:31:06

标签: algorithm time-complexity

Clarkson提出的最小加权顶点覆盖问题的一个着名的2近似:

Clarkson,Kenneth L."对顶点覆盖的贪婪算法的修改。"信息处理快报16.1(1983):23-25。

可以找到易于阅读的算法伪代码here,参见第32.1.2节。 根据该论文,该算法的运行时复杂度为O(|E|*log|V|),其中E是边集,V是顶点集。我不完全确定他们是如何得到这个结果的。

设d(v)为图中的顶点v的度数,w(v)为一些权重函数。 从算法中排除一些技术性,算法如下所示:

while( |E| != 0){ //While there are still edges in the graph
    Pick a vertex v \in V for which w(v)/d(v) is minimized;
    for( u : (u,v) \in E){
        update w(u);
        ...
    }
    delete v and all edges incident to it from the graph.
}

外部循环在运行时复杂性中生成术语|E|。这意味着可以在log n时间内从最小化某个比率的顶点列表中选择一个顶点。据我所知,从值列表中找出最小值需要n-1次比较,而不是log n。最后,内部for循环运行v的每个邻居,因此产生d(v)的复杂性,其由n-1支配。因此,我得出结论,该算法的运行时复杂度为O(|E|*|V|)。 我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

将顶点保持在由w(v)/ d(v)排序的平衡二叉搜索树中。找到min是O(log | V |)。每次我们删除边缘uv时,我们必须更新你的密钥(通过删除它并用新密钥将其重新插入树中),这需要时间O(log | V |)。这些步骤中的每一步最多都完成| E |次。