在树中找到从根到叶的最长路径


15

我有一棵树(在图论的意义上),例如以下示例:

在此处输入图片说明

这是一棵有向树,有一个开始节点(根)和许多结束节点(叶)。每个边都有指定的长度。

我的问题是,如何找到从根到叶的最长路径?蛮力方法是检查所有的根叶路径,并采用最大长度的路径,但是如果有的话,我更喜欢一种更高效的算法。


Answers:


16

然·G。(Ran G.)提出了一种有效算法的提示,尽管他可能遗漏了一些细节。如果要一遍又一遍地进行工作,例如,如果先计算每个路径然后计算长度,则计算所有根叶路径的确确实会有点效率低下。

从下面开始执行以下递归算法LongestPath(root)将给出您想要的。本质上,它递归计算每个子树的最长路径。在每个节点上,这需要构建新路径并返回最长的路径。

 LongestPath(node)
   If node is a leaf, return (node,0) 
   If node is not a leaf:  
    For each edge (node,length,next):
       Let (p,l) = LongestPath(next)
       Let (path,len) = (p++[next], l + length)
    Return element (path,len) from previous step with largest value len

如果这是伪代码与某些Haskell表示法的结合,则我希望它是可以理解的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.