假设我有一个最初为空的BST,我执行n个任意插入,我怎么能找到这个BST的平均高度?这个表达式/伪代码是(如果我没记错的话):
H(T) = 1 + max(H(T.left), H(T.right))
我对这种复发关系的猜测是T(n) = 1 + 2*T(n/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) 所以,我们只使用单个子阵列