Algorithm 二叉树的主深度是O(sqrt(N))?

Algorithm 二叉树的主深度是O(sqrt(N))?,algorithm,data-structures,Algorithm,Data Structures,在C语言的第二版数据结构和算法分析中,关于二叉树,有一个描述,二叉树的平均深度是O(sqrt(n))。我试图证明这一点,但我不知道怎么做,有人能帮我吗?这是二叉树的平均深度,不是平衡树,顺便说一句,最大深度与logN成比例。解释相关章节: 二叉树的一个重要特性是,平均二叉树的深度远小于N 分析表明,平均深度为O(√N) ,对于一种特殊类型的二叉树,即二叉搜索树 深度的平均值为O(logN)。不幸的是,深度可能大到n-1 要解决这个问题,您可以为某个值N生成所有可能的树,然后对这些深度进行平均。顺

在C语言的第二版数据结构和算法分析中,关于二叉树,有一个描述,二叉树的平均深度是O(sqrt(n))。我试图证明这一点,但我不知道怎么做,有人能帮我吗?

这是二叉树的平均深度,不是平衡树,顺便说一句,最大深度与
logN
成比例。解释相关章节:

二叉树的一个重要特性是,平均二叉树的深度远小于
N

分析表明,平均深度为
O(√N) 
,对于一种特殊类型的二叉树,即二叉搜索树 深度的平均值为
O(logN)
。不幸的是,深度可能大到
n-1

要解决这个问题,您可以为某个值
N
生成所有可能的树,然后对这些深度进行平均。

顺便说一句,这是二叉树的平均深度,而不是平衡树,其中最大深度与
logN
成比例。解释相关章节:

二叉树的一个重要特性是,平均二叉树的深度远小于
N

分析表明,平均深度为
O(√N) 
,对于一种特殊类型的二叉树,即二叉搜索树 深度的平均值为
O(logN)
。不幸的是,深度可能大到
n-1


为了解决这个问题,你可以生成所有可能的树,用于某个值<代码> n>代码>,然后平均那些深度。

让我们考虑PrimeEffic二叉树(总是分裂元素为2):

如果我删除间隙并向左对齐:

*
**
****
********
您可以看到,每个深度级别中的元素数量都会增加一倍(与上一个级别相比),因此:

或:

因此,如果你认为它(就像所有位都设置好的二进制数)是一样的:

n = 2^level -1
因此,从中提取级别:

n=2^级别-1//+1
n+1=2^级别//日志2
log2(n+1)=电平
其中,
n
是元素的数量,
level
是树的深度

对于不同的分割数,只有对数的底会改变。。。然而,对于通常的实树,分割不是规则的,您需要考虑每个元素的平均分割数

如果树的级别应与
O(sqrt(n))
成比例,则元素应形成正方形(
level^2=n
)或矩形,以便以图形方式推测:

******
******
******
******
******
******

@@@@@@
*@@@@@
**@@@@
***@@@
****@@
*****@

@
*@@
**@@@
***@@@@
****@@@@@
*****@@@@@@

*
***
*****
*******
*********
***********

          *
       *  *  *
     *  * * *  *
   *  * * * * *  *
 *  * * * * * * *  *
* * * * * * * * * * *
因此,除了第一个级别拆分为3之外,每个级别中的大多数元素都不是第一个和最后一个拆分为2。如果我选择一个矩形而不是正方形,那么矩形越宽,平均分割数就越多

          *
         * *
       *  *  *
     *  * * *  *
   *  * * * * *  *
 *  * * * * * * *  *
*   * * * * * * *   *

让我们考虑PROFECT二叉树(总是分裂元素为2):

如果我删除间隙并向左对齐:

*
**
****
********
您可以看到,每个深度级别中的元素数量都会增加一倍(与上一个级别相比),因此:

或:

因此,如果你认为它(就像所有位都设置好的二进制数)是一样的:

n = 2^level -1
因此,从中提取级别:

n=2^级别-1//+1
n+1=2^级别//日志2
log2(n+1)=电平
其中,
n
是元素的数量,
level
是树的深度

对于不同的分割数,只有对数的底会改变。。。然而,对于通常的实树,分割不是规则的,您需要考虑每个元素的平均分割数

如果树的级别应与
O(sqrt(n))
成比例,则元素应形成正方形(
level^2=n
)或矩形,以便以图形方式推测:

******
******
******
******
******
******

@@@@@@
*@@@@@
**@@@@
***@@@
****@@
*****@

@
*@@
**@@@
***@@@@
****@@@@@
*****@@@@@@

*
***
*****
*******
*********
***********

          *
       *  *  *
     *  * * *  *
   *  * * * * *  *
 *  * * * * * * *  *
* * * * * * * * * * *
因此,除了第一个级别拆分为3之外,每个级别中的大多数元素都不是第一个和最后一个拆分为2。如果我选择一个矩形而不是正方形,那么矩形越宽,平均分割数就越多

          *
         * *
       *  *  *
     *  * * *  *
   *  * * * * *  *
 *  * * * * * * *  *
*   * * * * * * *   *

我理解为什么二叉搜索树的平均深度是o(logN),左右子树之间存在逻辑关系。但我认为二叉树的位置是完全随机的,也就是说,二叉树的深度可以大到n-1,同时也可以小到o(logN).每种情况的概率相同,有n个!所以我需要把所有这些深度加起来,把总和除以n!。“我的理解有什么问题吗?”莉莉,这完全取决于你的二叉树是否有序。在一些用例中,排序并不重要,但不一定如此。你认为所有深度的可能性相等的论点可能不是真的。考虑一个三节点有序树。有几种深度为3的树(其中a在根上,b在a的右下,c在b的右下,(a在根上,c在a的右下,b在c的左下,(c在根上,b在c的左下,a在b的左下),但只有一种深度为2的树(b在根上,a在b的左下,c在b的右下)。我认为你的方法是正确的,你只需要决定“可能性空间”是什么包含用于分区的。与无序树相比,有序树的可能性更小。感谢您的帮助。我已经认识到一些案例可能具有相同的深度,因为深度的范围是[log(n),n-1],并且有更多的基本案例。因此我的意思是,案例的可能性相同,但深度不同。而您的帮助使我意识到,总案例不是n!也许,我会更仔细地计算。非常感谢。我理解为什么二叉搜索树的平均深度是o(logN),并且左右子树之间存在逻辑关系。但在我看来,二叉树的位置是完全随机的,也就是说,二叉树的深度可以大到n-1,同时