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

作者&投稿:哈视 (若有异议请与网页底部的电邮联系)
~
O(log2(n))是时间复杂度,而二叉排序树查找成功的平均查找长度为: 
ASL = [(n+1)/n] * log2(n+1) - 1

推导过程如下:

假设有一颗二叉排序树, 总结点数是n, 高度是h, 根结点的高度是1,
假设也是满二叉树, n与h的关系, 有公式: n = (2^h) - 1 
也就是: h = log2(n+1)

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

对于高度为3,总结点数是7的二叉排序树(满二叉树),查找成功的平均查找长度为:
ASL = (1*1 + 2*2 + 3*4) / 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]
用[等式3]减去[等式2]有:
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 = 2^h - 1
将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
  = [ log2(n+1) - 1 ] * (n+1) + 1
  = (n+1) * log2(n+1) - n

也就是 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
                          = [(n+1)/n] * log2(n+1) - 1

所以,二叉排序树查找成功的平均查找长度为: 
ASL = [(n+1)/n] * log2(n+1) - 1   [公式1]

其时间复杂度是: O(log2(n))


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

              36
          /        \
         24        52
        / \       /  \
      10   30    41  90
      / \       /    /
     8  12     38   61

根据[公式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,是满二叉树:

               36
          /           \
         24            52
        /  \         /    \
      10    30      41     90
     / \    / \    /  \    / \
    8  12  28  31 38  42  61  91

根据[公式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



为什么采用二叉排序树查找的平均查找长度为O(log_{2}n)
O(log2(n))是时间复杂度,而二叉排序树查找成功的平均查找长度为: ASL = [(n+1)\/n] * log2(n+1) - 1推导过程如下:假设有一颗二叉排序树, 总结点数是n, 高度是h, 根结点的高度是1,假设也是满二叉树, n与h的关系, 有公式: n = (2^h) - 1 也就是: h = log2(n+1)对于高度...

二叉排序树的应用
二叉排序树(Binary Sort Tree),首先它是一棵树,“二叉”这个描述已经很明显了,就是树上的一根树枝开两个叉,于是递归下来就是二叉树了(下图所示),而这棵树上的节点是已经排好序的,具体的排序规则如下:若左子树不空,则左子树上所有节点的值均小于它的根节点的值 若右子树不空,则右字数上...

二叉排序树的应用
回答:当用线性表作为表的组织形式时,可以有三种查找法。其中以二分查找效率最高。但由于二分查找要求表中结点按关键字有序,且不能用链表作存储结构,因此,当表的插入或删除操作频繁时,为维护表的有序性,势必要移动表中很多结点。这种由移动结点引起的额外时间开销,就会抵消二分查找的优点。也就是说,...

借助二叉排序树实现排序
算法输出:排序结果算法要点:(1)利用建立二叉排序树的方法,将n个键值作为结点,生成一棵... 问题描述:对于给定的n个关键字值,采用二叉排序树方法对其进行排序。算法输入:n个键值。算法输出:排序结果算法要点:(1)利用建立二叉排序树的方法,将n个键值作为结点,生成一棵二叉排序树。 (2)对树进行中序遍历 展开  ...

mysql索引的数据结构是什么
一、简介mysql索引的数据结构是树,常用的存储引擎innodb采用的是B+Tree。这里对B+Tree及其相关的查找树进行简要介绍。二、各种查找树1、二叉排序树(也称为二叉查找树)二叉排序树是最简单的查找树,特点:a)是一棵二叉树;b)左子树所有结点的值小于它的父结点的值,右子树所有结点的值大于它的父结点...

二叉查找树和二叉排序树是否相同?
二叉查找树:若它的左子树不为空,则左子树上所有节点的值均小于根节点。若它的右子树不为空,则右子树上所有节点的值均小于根节点,它的左右子树都是二叉查找树。所以二叉排序树不一定是平衡树,它是只要求了左右子树与根结点存在大小关系。但是对左右子树之间没有层次差异的约束,因此通过二叉排序树...

二叉排序树定义
首先二叉排序树也是一棵二叉树,所谓二叉树,就是“任何节点最多只允许两个子节点”,这两个子节点称为左右子节点。二叉排序树通常采用二叉链表作为存储结构。中序遍历二叉排序树可得到一个依据关键字的有序序列,一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即是对无序序列...

哪种树结构是一种自平衡二叉搜索树
红黑树是一种特定类型的二叉树,它是在计算机科学中用来组织数据比如数字的块的一种结构。若一棵二叉查找树是红黑树,则它的任一子树必为红黑树。而由于每一颗红黑树都是一颗二叉排序树,因此,在对红黑树进行查找时,可以采用运用于普通二叉排序树上的查找算法,在查找过程中不需要颜色信息。行为特征:...

二分查找的判定树和二叉排序树画法如何?
二分查找的判定树和二叉排序树画法如下:将序列48、38、65、97、13、27、76、49放到一棵二叉排序树中。首先,画出一棵普通的二叉树,将序列中第一个数48放到根节点中;第二个数耍王38比48小,因此放到左子树中;第三个数65比48大,因此放到右子树中。接着看序列中的第四个数97,比48大,因此...

二叉查找树与二叉排序树区别? 请教
且其平均的执行时间均为O(lgn),因此更有效。二分查找所涉及的有序表是一个向量,若有插入和删除结点的操作,则维护表的有序性所花的代价是O(n)。当有序表是静态查找表时,宜用向量作为其存储结构,而采用二分查找实现其查找操作;若有序表里动态查找表,则应选择二叉排序树作为其存储结构。

德州市19464606061: 平衡二叉树比其他二叉树有什么好处 -
章桦地榆: 首先平衡二叉树是特殊的二叉排序树,他的结点元素间存在着偏序关系. 其次相对于一般的二叉排序树,平衡二叉树的左右子树的深度差也有不超过1层的约束. 这样使得平衡树是同种元素序列情况下的深度最小的二叉排序树.这可以减少二叉树元素查找的深度,从而提升平均查找效率.

德州市19464606061: 设二叉排序树中有n个结点,则在二叉排序树的平均查找长度为 -
章桦地榆:[答案] 二楼正解 最坏情况是深度为N的单支树为(N+1)/2 最好的是形态均匀和折半查找一样大约为 LOG2 N PS:若构造完成,例: 则平均查找长度为:(1*1+2*2+3*4+4*3)/10=2.9

德州市19464606061: 二叉树和hash哪个查找效率更高 -
章桦地榆: 1. 原则上来说是hash的查找效率更高.2. 针对具体的情况则不尽然.首先单纯的二叉树的查找效率是不高的,等于是无序数组的遍历,需要转变成二叉排序树或者二叉平衡树才能提升查找效率,查找平均效率为O(logn).其次hash的映射冲突的发生概率对hash的查找效率影响较大,在映射冲突较小的情况下平均查找效率为O(1),但如果映射函数对目标序列的适配性较差,则可能导致大量的数据发生映射冲突,从而大大降低查找效率.

德州市19464606061: 二叉排序树的不成功的平均查找长度怎么求? -
章桦地榆: 按二叉树的公式求.1.就你的BST,结果如下:15的左右子树都为空,也就是左右子树都是外结点,失败时需要比较62、30、15一共3次. 2.48的左右子树都为空,也就是左右子树都是外结点,失败时需要比较62、30、15、48一共4次. 3.56的右子树为空,也就是右子树是外结点,失败时需要比较62、30、56一共3次. 4.74的左右子树都为空,也就是左右子树都是外结点,失败时需要比较62、74一共2次. 5.因此外结点总数为2 *3 + 1 = 7 (其实这个数量一定是关键字个数加1). 6.所以ASL = (2 * 3 + 2 * 4 + 1 * 3 + 2 * 2) / 7 = 21 / 7 = 3.

德州市19464606061: 在下列查找方法中,平均查找速度最快的是( A)顺序查找 B)折半查找 c)分块查找 D)二叉排序树查找在下列查找方法中,平均查找速度最快的是(A)... -
章桦地榆:[答案] 是B,

德州市19464606061: 链式存储结构里,查找速度最快的是二叉排序树?指的是ASL平均查找长度最短.假设元素有序. -
章桦地榆:[答案] 准确地说,是B树 和红黑树,这个二叉排序树最坏会达到O(n),前两者可以保证O(logn) 这个链式存储还不包括索引和散列

德州市19464606061: 数据结构概论任一查找树(二叉分类树)的平均查找时间都小于用顺序查找法查找同样结点的线性表的平均查找时间.2. 任何一棵二叉树都可以不用栈实现前... -
章桦地榆:[答案] 1.错.如果长度为1,两者一样. 2.错 3.错.主要操作是进行比较. 4.错.使用栈. 5.错.二分法不能应用于无序表. 6.错 7.对 8.对 9.对 10.错.折半最小,分块次之,顺序查找最大. 11.对 12.错.取表尾一定是一个表,但它可能是只包含一个元素...

德州市19464606061: 数据结构 填空题目 二叉排序树的平均查找长度设一组初始记录关键字序列为(20,12,42,31,18,14,28),则根据这些记录关键字构造的二叉排序树的平均查找... -
章桦地榆:[答案] 先构造二叉排序树,然后计算就行了: (2*3+2*2+2)/7=1.7

德州市19464606061: 二叉查找树与二叉排序树区别? 请教 -
章桦地榆: 二叉查找树与二叉排序树区别 就平均时间性能而言,二叉排序树上的查找和二分查找差不多. 就维护表的有序性而言,二叉排序树无须移动结点,只需修改指针即可完成插入和删除操作,且其平均的执行时间均为O(lgn),因此更有效.二分查找所涉及的有序表是一个向量,若有插入和删除结点的操作,则维护表的有序性所花的代价是O(n).当有序表是静态查找表时,宜用向量作为其存储结构,而采用二分查找实现其查找操作;若有序表里动态查找表,则应选择二叉排序树作为其存储结构.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网