Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求BST平均高度的递推关系/时间复杂度_Algorithm_Time Complexity_Binary Search Tree_Recurrence - Fatal编程技术网

Algorithm 求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

假设我们有一个初始为空的BST,我在其中执行n次任意插入,我如何找到这个BST的平均高度?这个表达式/伪代码是(如果我没有弄错的话):

我猜这个循环关系是
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))