algorithm - 如何找到树的任意两个顶点之间的边或顶点的数量?

标签 algorithm graph tree

它是一棵通用树(无环图),所以这样的路径只能有一条。我可以为此使用什么算法?

编辑:

需要找到树中所有顶点对的路径

最佳答案

我想在这里扩展@templatetypedef 的答案1

请注意,在您的问题中,您需要为树中的每对节点至少执行一次写入。其中有 n*(n-1)/2
因此,就大O符号而言,你找不到比O(n^2)运行得更好的算法。

现在,使用 DFSBFS找到每个节点的路径。它将在 O(n+m) 中运行(n 个顶点,m 个边)。但由于它是一棵树,我们知道 m=n-1,从而为 BFS/DFS 提供 O(n)。请注意,在来自某个节点 v 的单个 BFS/DFS 中 - 您会为每个节点 u 获得 d(v,u)

如果您对每个节点重复它,它将得到 O(n^2) - 这在大 O 表示法方面是最佳的。我同意您可能会通过一些优化获得更好的常量,但仅此而已。


(1) 以评论的形式开始,但它太长了,我认为它值得回答。

关于algorithm - 如何找到树的任意两个顶点之间的边或顶点的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21662649/

相关文章:

C++ set_intersection 比较函数

algorithm - 变半径圆覆盖算法

Java Servlet -> 具有非静态属性的 Hashmap 中的静态图

scripting - 从 gnuplot 中的不同行获取特定元素的值

java - 层次关系的图遍历

java - 如何在 BST 中测试我的删除方法

java - 这个词链的时间复杂度

ios - 更改算法以在 UITableView 中设置行高的方法

php - 如何恢复根节点

java - 以下数据结构的集合