【发布时间】:2020-04-25 15:59:44
【问题描述】:
我曾想过一个证明,但无法在纸上画出草图。 我认为二叉搜索树高度的递归关系是
T(n)=T(k)+T(n-k-1)+1
如果根和 n-k-1 在根的右子树上(并且 n= 总节点),则 k 是左子树中的元素数
(如果上面有错,请纠正我)
现在我的想法是,因为我们必须计算平均情况.. 所以有一半的情况可能...... (现在这是我开始搞砸的地方,请在这里纠正..)
我的主张:我将有大约一半的情况。 示例
根
(0,N-1) 或 (1, N-2) 或 . . (N-1,0)
其中 N 是节点总数。 现在我正在考虑将上述案例中的一半用于平均案例计算... (我不知道我这样做是否正确..对此发表评论将不胜感激)
所以我明白了:
T(n)=T(n/2)+T(n/2)+1
T(n)=2T(n/2)+1
现在,当我应用主方法来获得所获得的递归关系的近似答案时.. 我得到 O(n)。
现在我应该如何继续...? (我的期望是我应该登录而不是 n) 但这并没有成功.. 所以请建议我应该如何进一步进行。 (我的方法是否完全正确..从一开始,也告诉我?)
【问题讨论】:
-
您的树高重复出现错误。目前,它正在计算节点数而不是高度。如果您假设均匀分布,您可能想要的期望的递归形式为 $T(n) = \frac1n \sum_k (1+\max{T(k), T(n-k-1)})$ .我相信你可以通过归纳证明 $T(n) = O(\log n)$。使用 $\log(n!) \leq n\log n$ 的事实(为什么?)。
-
不要忘记这仅适用于完全平衡的树。不平衡的树木将有更长的高度。考虑一个只有左节点的 BST。然后你基本上有一个链表,其中高度 == 节点数。
标签: algorithm time-complexity binary-search-tree