二叉排序树的时间复杂度 快速排序时间复杂度分析-生活-

二叉排序树的时间复杂度 快速排序时间复杂度分析

牵着乌龟去散步 生活 14 0

老铁们,大家好,相信还有很多朋友对于二叉排序树的时间复杂度和快速排序时间复杂度分析的相关问题不太懂,没关系,今天就由我来为大家分享分享二叉排序树的时间复杂度以及快速排序时间复杂度分析的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

本文目录

  1. 二叉排序树与折半查找时间性能相不相同
  2. 二叉排序树中插入一个结点的时间复杂度是多少
  3. 二叉排序树的时间复杂度是多少
  4. 为什么采用二叉排序树查找的平均查找长度为O(log_{2}n)
  5. 二叉树为二叉排序树的充分必要条件是什么
  6. 二叉排序树是二叉平衡树吗
  7. 选择题 数据结构 折半搜索与二叉排序树的时间性能( )。

一、二叉排序树与折半查找时间性能相不相同

折半查找:必须要求记录有序,采用顺序存储,利用这个特点,所以折半查找的效率也比顺序查找高,对于数量非常大时,非常快,时间复杂度为O(logN)。

二叉查找树:若它的左子树不为空,则左子树上所有节点的值均小于根节点。若它的右子树不为空,则右子树上所有节点的值均小于根节点,它的左右子树都是二叉查找树。

所以二叉排序树不一定是平衡树,它是只要求了左右子树与根结点存在大小关系。但是对左右子树之间没有层次差异的约束,因此通过二叉排序树进行查找不一定能够满足logn的。

例如一棵只有多层左子树的而叉排序树。只有是一棵平衡的二叉排序树时,其查找时间性能才和折半查找类似。

与次优二叉树相对,二叉排序树是一种动态树表。其特点是:树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的结点时再进行插入。新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径 *** 问的最后一个结点的左孩子或右孩子结点。

2、查找树非空,将给定值key与查找树的根结点关键码比较。

3、若相等,查找成功,结束查找过程,否则:当给值key小于根结点关键码,查找将在以左孩子为根的子树上继续进行,转(1)。当给值key大于根结点关键码,查找将在以右孩子为根的子树上继续进行,转(1)。

二、二叉排序树中插入一个结点的时间复杂度是多少

1、采用边查找边插入的方式,类似重新建立一个一维数组时间复杂度=O(n)因为深度不平衡,所以会发展成单链的形状,就是一条线 n个点那么深。

2、二叉排序树是查找过程中,当树中不存在关键字等zhi于给定值的结点时再进行插入。新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径 *** 问的最后一个结点的左孩子或右结点。

3、因此二叉排序树插入时间复杂度更大为O(n)。若是二叉排序树比较平衡,其时间复杂度下降,最小的时间复杂度为O(logn)。

4、①结点:包含一个数据元素及若干指向子树分支的信息。

5、②结点的度:一个结点拥有子树的数目称为结点的度。

6、③叶子结点:也称为终端结点,没有子树的结点或者度为零的结点。

7、④分支结点:也称为非终端结点,度不为零的结点称为非终端结点。

8、⑤树的度:树中所有结点的度的更大值。

三、二叉排序树的时间复杂度是多少

1、平均的时间复杂度在O(logn)到O(n)之间。

2、因为二叉排序树是在查找过程中,当树中不存在关键字等于给定值的结点时再进行插入。新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径 *** 问的最后一个结点的左孩子或右孩子结点。

3、因此二叉排序树插入时间复杂度更大为O(n)。若是二叉排序树比较平衡,其时间复杂度下降,最小的时间复杂度为O(logn)。

4、每个结点的C(i)为该结点的层次数。最坏情况下,当先后插入的关键字有序时,构成的二叉排序树蜕变为单支树,树的深度为其平均查找长度(n+1)/2(和顺序查找相同),

5、更好的情况是二叉排序树的形态和折半查找的判定树相同,其平均查找长度和log 2(n)成正比。

6、参考资料来源:百度百科-二叉排序树

四、为什么采用二叉排序树查找的平均查找长度为O(log_{2}n)

O(log2(n))是时间复杂度,而二叉排序树查找成功的平均查找长度为:

假设有一颗二叉排序树,总结点数是n,高度是h,根结点的高度是1,

假设也是满二叉树,n与h的关系,有公式:n=(2^h)-1

对于高度为2,总结点数是3的二叉排序树(满二叉树),查找成功的平均查找长度为:

对于高度为3,总结点数是7的二叉排序树(满二叉树),查找成功的平均查找长度为:

对于高度为h,总结点数是n的二叉排序树(满二叉树),查找成功的平均查找长度为:

ASL=(1*1+2*2+3*4+...+h*2^(h-1))/n[等式1]

对于[等式1]里的1*1+2*2+3*4+...+h*2^(h-1)

该数列有h项:1*2^0,2*2^1,3*2^2,...,h*2^(h-1)

其总和S=1*2^0+2*2^1+3*2^2+...+h*2^(h-1)[等式2]

等式两边同乘以2,有:2*S=1*2^1+2*2^2+3*2^3+...+(h-1)*2^(h-1)+h*2^h[等式3]

S=h*2^h-(2^0+2^1+2^2+2^3+...+2(h-1))[等式4]

其中(2^0+2^1+2^2+2^3+...+2^(h-1))是等比数列求和,设:

M=(2^0+2^1+2^2+2^3+...+2^(h-1))

等式两边同乘以2,有:2*M=(2^1+2^2+2^3+...+2^h)

将M代入[等式4]有:S=h*2^h-(2^h-1)=(h-1)*2^h+1[等式5]

因为h=log2(n+1),将h代入[等式5],有:

S=[log2(n+1)-1]*2^[log2(n+1)]+1

也就是S=(1*1+2*2+3*4+...+h*2^(h-1))=(n+1)*log2(n+1)-n

将上述S代入[等式1],有:ASL=[(n+1)*log2(n+1)-n]/n

所以,二叉排序树查找成功的平均查找长度为:

ASL=[(n+1)/n]*log2(n+1)-1[公式1]

假设有一颗平衡的二叉排序树,高度h=4,总结点数n=11,不是满二叉树:

根据[公式1],查找成功的平均查找长度为:

ASL=[(n+1)/n]*log2(n+1)-1=[(11+1)/11]*log2(11+1)-1约等于2.91

ASL=(1*1+2*2+3*4+4*4)/11=33/11=3

假设有一颗平衡的二叉排序树,高度h=4,总结点数n=15,是满二叉树:

根据[公式1],查找成功的平均查找长度为:

ASL=[(n+1)/n]*log2(n+1)-1=[(15+1)/15]*log2(15+1)-1=49/15

ASL=(1*1+2*2+3*4+4*8)/15=49/15

五、二叉树为二叉排序树的充分必要条件是什么

1、二叉排序树(Binary Sort Tree),首先它是一棵树,“二叉”这个描述已经很明显了,就是树上的一根树枝开两个叉,于是递归下来就是二叉树了(下图所示),而这棵树上的节点是已经排好序的,具体的排序规则如下:

2、若左子树不空,则左子树上所有节点的值均小于它的根节点的值

3、若右子树不空,则右字数上所有节点的值均大于它的根节点的值

4、它的左、右子树也分别为二叉排序数(递归定义)

5、从图中可以看出,二叉排序树组织数据时,用于查找是比较方便的,因为每次经过一次节点时,最多可以减少一半的可能,不过极端情况会出现所有节点都位于同一侧,直观上看就是一条直线,那么这种查询的效率就比较低了,因此需要对二叉树左右子树的高度进行平衡化处理,于是就有了平衡二叉树(Balenced Binary Tree)

6、所谓“平衡”,说的是这棵树的各个分支的高度是均匀的,它的左子树和右子树的高度之差绝对值小于1,这样就不会出现一条支路特别长的情况。于是,在这样的平衡树中进行查找时,总共比较节点的次数不超过树的高度,这就确保了查询的效率(时间复杂度为O(logn))

六、二叉排序树是二叉平衡树吗

1、平衡二叉树不一定是二叉排序树,平衡二叉树是为了避免二叉排序树高度增长过快,降低二叉排序树性能而设的树,二叉排序树当然不可能都是平衡二叉树。

2、首先平衡二叉树是特殊的二叉排序树,他的结点元素间存在着偏序关系;其次相对于一般的二叉排序树,平衡二叉树的左右子树的深度差也有不超过1层的约束,这样使得平衡树是同种元素序列情况下的深度最小的二叉排序树,这可以减少二叉树元素查找的深度,从而提升平均查找效率。

3、平衡树可以完成 *** 的一系列操作,时间复杂度和空间复杂度相对于“2-3树”要低,在完成 *** 的一系列操作中始终保持平衡,为大型数据库的组织、索引提供了一条新的途径。

4、二叉排序树或者是一颗空树,或者是具有下列性质的二叉树:

5、(1)若左子树不空,则左子树上所有结点的值均小于它的根节点的值。

6、(2)若右子树不空,则右子树所有结点的值均大于或等于它的根结点的值。

二叉排序树的时间复杂度 快速排序时间复杂度分析-第1张图片-

7、(3)左、右子树也分别为二叉排序树。

七、选择题 数据结构 折半搜索与二叉排序树的时间性能( )。

1、折半查找复杂度恒定是log2n,但二叉排序树更优时间复杂度是log2n,只有平衡二叉树才是log2n。

2、折半查找:必须要求记录有序,采用顺序存储,利bai用这个特点,所以折半查找的效率也比顺序查找高,对于数量非常大时,非常快,时间复杂度为O(logN)。

3、二叉查找树:若它的左子树不为空,则左子树上所有节点的值均小于根节点。若它的右子树不为空,则右子树上所有节点的值均小于根节点,它的左右子树都是二叉查找树。

4、二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x。

5、时间复杂度即是while循环的次数。

6、渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数

7、可得k=log2n,(是以2为底,n的对数)

8、所以时间复杂度可以表示O(h)=O(log2n)

9、参考资料来源:百度百科-二分查找

好了,关于二叉排序树的时间复杂度和快速排序时间复杂度分析的问题到这里结束啦,希望可以解决您的问题哈!

标签: 复杂度 排序 时间 快速 分析

抱歉,评论功能暂时关闭!