求图的直径的近似算法

时间:2014-01-29 12:38:17

标签: algorithm graph graph-algorithm

鉴于图表 G =( V,E ,无向和无重力,我们希望找到图的直径 D 的值<强“G 即可。展示如何在O(| V | + | E |)的运行时间中找到值X使得X <= D <= 2 * X.

现在,要找到图形的实际直径,您只需要运行BFS两次。从任意节点开始,然后从最大的扩展节点运行。但在这个问题中,我需要找到直径的近似值。我的猜测是运行一次BFS并选择最大距离作为直径。有两种边缘情况可以发生。

当所选节点位于图形 G 的周边时,会出现第一个节点。扩展节点将位于周边的相对侧,因此 X 将等于 D

当所选节点位于 G 的中心并且 X 将等于 D 的一半时,将出现第二种情况(<在这种情况下,em> X 将是G)的无线电。

这是我对这个问题的回答。然而我得到了15/25。是否有一个我无法处理的边缘情况,或者从一开始就错了?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

对于这个以前的算法TA,60%似乎有点苛刻 - 你给出了正确的算法,并确定了两个不等式的极值情况。不过,我同意你需要提供正式证据。如果您的评分者特别严格,您可能需要说一两个关于算法为线性时间的原因。

这是正式证明的开始。设d(v,w)是顶点v和w之间的路径的最小长度。直径定义为D = max_ {v,w} d(v,w)。您的算法选择一个任意顶点并输出X = max_ {w} d(s,w)。

你需要做一点代数才能显示两个事实:X <= D且D <= 2 X.你需要三角不等式d(a,b)+ d(b, c)&gt; = d(a,c),它适用于所有顶点a,b,c,以及对称性d(a,b)= d(b,a)。