【发布时间】:2023-03-16 20:48:01
【问题描述】:
设v为树T的一个节点。节点v的深度可以定义如下:
- 如果 v 是根,则 v 的深度为 1。
- 否则,v 的深度是 1 加上 v 的父级的深度。
基于上述定义,递归算法深度,如下面的算法所示,通过在 v 的父节点上递归调用自身,并将返回的值加 1 来计算 Tree 的节点 v 的深度。
算法depth(T, y):
- 第一步:如果
T.isRoot(v),则返回1 - 第2步:否则,返回
1 + depth(T, T. parent(v))
一棵树 T 的高度等于 T 的外部节点的最大深度。虽然这个定义是正确的,但它不会导致一个有效的算法。事实上,如果我们将上述深度查找算法应用于树 T 中的每个节点,我们将推导出一个 O(n2) 时间的算法来计算 T 的高度。
根据上面的说法怎么可能是O(n2)?如果我们在每个外部节点上尝试这个算法,那么它需要 O(n),并且找到最大值需要 O(n)。所以总复杂度应该是O(n)+O(n) = O(2n)==O(n)吧?
【问题讨论】: