用于求出BST平均高度的递归关系/时间复杂度

时间:2012-05-23 15:57:13

标签: algorithm time-complexity binary-search-tree recurrence

假设我有一个最初为空的BST,我执行n个任意插入,我怎么能找到这个BST的平均高度?这个表达式/伪代码是(如果我没记错的话):

H(T) = 1 + max(H(T.left), H(T.right))

我对这种复发关系的猜测是T(n) = 1 + 2*T(n/2),但我不确定这是否正确。

现在这就是我的困境,如果我的递归关系是正确的,我如何计算平均身高算法的平均复杂度?

2 个答案:

答案 0 :(得分:0)

一般情况下,平均案例分析比较复杂,您无法真正使用与普通最坏情况证明相同的大O技术。虽然您对高度的定义是正确的,但将其转换为重复可能会更加复杂。首先,你可能意味着T(n) = 1 + T(n/2)(当你的版本给出O(n)时,这将给出O(log n)高度,然后,没有任何东西可以保证值在右和左之间均匀分割50-50。 / p>

如果你search a bit,你会发现BST的平均高度上有足够的材料。例如,one of the results I got表示,当n增长时,BST的预期高度趋于4.3 *(log n),但是经过大量复杂的数学计算才能实现。

答案 1 :(得分:0)

T(N / 2)+ C 其中c是一些常数 我们将数组分成两部分,但我们只使用单个部分进行搜索。如果ans比中间值大,那么我们只搜索(mid + 1 ..... j) 如果它小于中间值那么我们只搜索(i ... mid) 所以,我们只使用单个子阵列