Algorithm 求BST平均高度的递推关系/时间复杂度
假设我们有一个初始为空的BST,我在其中执行n次任意插入,我如何找到这个BST的平均高度?这个表达式/伪代码是(如果我没有弄错的话): 我猜这个循环关系是Algorithm 求BST平均高度的递推关系/时间复杂度,algorithm,time-complexity,binary-search-tree,recurrence,Algorithm,Time Complexity,Binary Search Tree,Recurrence,假设我们有一个初始为空的BST,我在其中执行n次任意插入,我如何找到这个BST的平均高度?这个表达式/伪代码是(如果我没有弄错的话): 我猜这个循环关系是T(n)=1+2*T(n/2),但我不确定这是否正确 现在我的困境是,如果我的递归关系是正确的,我如何计算我的平均高度算法的平均复杂度?在一般平均情况下,案例分析更为复杂,并且你不能真正使用与普通最坏情况证明相同的大O技术。虽然您对高度的定义是正确的,但将其转换为重复可能会比这更复杂。首先,您可能指的是T(n)=1+T(n/2)(这将给出一个O
T(n)=1+2*T(n/2)
,但我不确定这是否正确
现在我的困境是,如果我的递归关系是正确的,我如何计算我的平均高度算法的平均复杂度?在一般平均情况下,案例分析更为复杂,并且你不能真正使用与普通最坏情况证明相同的大O技术。虽然您对高度的定义是正确的,但将其转换为重复可能会比这更复杂。首先,您可能指的是
T(n)=1+T(n/2)
(这将给出一个O(logn)高度,而您的版本给出O(n)),然后,没有任何东西可以保证值在右侧和左侧之间平均分配50-50
如果你会看到,在BST的平均高度上有大量的材料。例如,他说,随着n的增加,BST的预期高度趋于4.3*(对数n),但要达到这一点需要经过大量复杂的数学运算。在一般平均情况下,案例分析更为复杂,你不能真正使用与普通最坏情况证明相同的大O技术。虽然您对高度的定义是正确的,但将其转换为重复可能会比这更复杂。首先,您可能指的是
T(n)=1+T(n/2)
(这将给出一个O(logn)高度,而您的版本给出O(n)),然后,没有任何东西可以保证值在右侧和左侧之间平均分配50-50
如果你会看到,在BST的平均高度上有大量的材料。例如,他说,随着n的增加,BST的预期高度趋于4.3*(对数n),但要达到这一点需要经过许多复杂的数学运算。T(n/2)+c
其中c是常数
我们将数组分成两部分,但只使用单个部分进行搜索。如果out ans大于的中间值,那么我们只搜索(mid+1…..j)
如果它小于中间值,那么我们只搜索(i……mid)
所以,当时我们只使用单个子数组T(n/2)+c
其中c是常数
我们将数组分成两部分,但只使用单个部分进行搜索。如果out ans大于的中间值,那么我们只搜索(mid+1…..j)
如果它小于中间值,那么我们只搜索(i……mid)
所以,当时我们只处理单个子数组这不是一个简单的递归关系。有n个!输入序列S_i。虽然多个序列可以生成同一棵树,但每个序列都会生成一个BST(S_i)。每棵树都有一个高度H(T(S_i))。你需要算出(sum{i=0..n!}H(T(S_i)))/n!。现在,如何计算H(T(s))?这不是一个简单的递推关系。有n个!输入序列S_i。虽然多个序列可以生成同一棵树,但每个序列都会生成一个BST(S_i)。每棵树都有一个高度H(T(S_i))。你需要算出(sum{i=0..n!}H(T(S_i)))/n!。现在,如何计算H(T(s))?
H(T) = 1 + max(H(T.left), H(T.right))