树中最长路径的线性时间算法

时间:2012-11-02 00:09:37

标签: algorithm graph-theory

我被赋予了一个令我难过的作业的问题。我可能只是想得太多......问题随之而来。

提供线性时间算法,以确定非循环无向图(即树)中最长的未加权路径。

我的第一个目的是使用DFS。但似乎DFS只会给我从我开始的节点到另一个顶点的最长路径;但是,问题要求树中最长的路径...不是从我开始的节点开始的最长路径。有人会让我直截了当吗?

感谢。

1 个答案:

答案 0 :(得分:6)

一种这样的方法是选择任何节点A,并以线性时间计算到所有其他节点的距离。假设B距离A最远。在步骤2中,找到距离B最远的节点。

设d(P,Q)表示从P到Q的距离。注意,如果E是A,B,C的最低共同祖先,那么d(A,B)= d(A,E)+ d( E,B)并注意到d(​​E,B)≥d(E,C)。

编辑1:算法或方法 - 找到距离任何A最远的B;找到距离B最远的C;声称d(B,C)在图中的所有顶点对上都是最大的 - 似乎是合理的,但上面并没有证明它。

一方面,它不一定是d(E,B)≥d(E,C),而另一方面,仅仅这一点不足以确定d(B,C)≥d(F, G)其中F,G是树中的任何节点。 ...