我们获得了
形式的邻接列表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是唯一的选择吗?
答案 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值。
你应该在下面做一步。
这不是您通过随机选择节点开始的最长成本路径。
您不必从每个节点运行DFS。