偏心提到的解决方案的最佳解释,表示为ecc(v)
,被定义为ecc(v):=max_u d(u,v)
,即作为到图中最远顶点的距离。图G
的中心是其中ecc(v)=min_v max_u d(u,v)
的任何顶点v
,即中心是使偏心率最小化的顶点。
如果合并两棵树(来自不同连接的部件),T1
和T2
,通过将它们的中心c1
和c2
之间的边缘,你会得到一棵树T
与diam T = max(diam T1, diam T2, 1+rad(T1)+rad(T2))
。
以下方法的正确性应该从这些属性中显而易见。
下面是该算法一个想法,把我的头顶部:
- 让
T1
,T2
,...,Tk
是包括森林树木。
- 为每棵树
Ti
计算一个center vertexci
。
- 以智能的方式通过在中心之间放置边来连接组件。
当然,现在的问题是如何巧妙地解决最后一颗子弹。直觉上我建议你先连接最大直径的treest(然后更新新树的直径并计算新树的中心)。也许是这样的:
而优先级队列中包含一个以上的树做
- 让
T1
和T2
与最大直径的树。让c1
和c2
成为他们的中心;
- 连接
c1
和c2
以形成新树T
;
- 计算一个新的中心
c
的T
,计算diam T
并将T
放回优先级队列(可以是使用直径作为密钥的最大堆)。
做
更新。我不确定是先加入最大直径树还是其他方式(即最小直径树首先)。但现在很容易做一个证明的草图(一旦你找到了方法),这是正确的路要走。
更新。如果您首先连接最大(如PDF中所建议的),则数学肯定会经历。
其实尝试过这种方法,但它给了期限超过 – suraj
解决方案为每社论是是最大的一棵树的 最大直径, 最大和第二大的半径+1的总和, 的总和第二和第三大半径+2。问题是我不明白这个解决方案怎么可能是正确的 – suraj
我不明白最后的评论。关于第一条评论,您可能使用了某些步骤的低效实施。 – blazs