如何在图中找到最长路径?

时间:2013-03-02 19:00:05

标签: algorithm data-structures graph tree depth-first-search

我们获得了

形式的邻接列表
U -> (U,V,C) -> (U,V,C) ...  
U2 -> ...  
U3 -> ...  
.  
.  
etc

(U,V,C)表示从U到V的边缘成本为C.

给定的邻接列表用于具有N个节点的单个连接树,因此包含N-1个边缘。

给出了一组节点F=F1,F2,F3...Fk

现在问题是找到F中节点之间最长路径的最佳方法是什么? 是否可以在O(N)中进行?

F中每个节点的DFS是唯一的选择吗?

2 个答案:

答案 0 :(得分:1)

我理解你的问题是要求从集合F中找到一对节点,以便这两个节点之间的唯一路径尽可能长。路径是唯一的,因为您的图表是树。

对于O(n k)解决方案,可以通过从F中的每个节点执行DFS来解决问题,其中n是图的大小,k是集F的大小。

但是,您可以通过分而治之的方法更快地解决它。从图中选择任何节点R,并使用单个DFS将距离Dist(R,a)列表到每个其他节点aa,同时将节点划分为子树S1,...,Sm,其中m是数字R的边缘;也就是说,这些是悬挂在根R处的m树。现在,对于属于不同子树的任何f和g,它认为它们之间的路径具有Dist(R,f)+ Dist(R,g)边缘,所以可以在O(k ^ 2)时间内搜索最长的这样的路径。此外,您必须递归到子问题S1,...,Sm以覆盖最长路径位于其中一棵树内的情况。整体复杂度可能低于O(n k),但数学仍然是读者的练习。

答案 1 :(得分:-2)

如果我正确理解了您的问题,那么您正试图在生成树中找到最长的成本路径。

你可以在2个完整的遍历中找到路径,即O(2N)~O(N)表示大的N值。

你应该在下面做一步。

  1. 选择生成树中的任何节点。
  2. 从节点运行任何算法(DFS或BFS)并找到最长的费用 来自此节点的路径。
  3. 这不是您通过随机选择节点开始的最长成本路径。

    1. 从最长成本路径的最后一个节点再次运行BFS或DFS 在第2步找到。
    2. 这次您获得的最长成本路径将是最长的费用 生成树中的路径。
    3. 您不必从每个节点运行DFS。