在二叉排序树上查找其关键字等于给定值的结点的过程,恰是走了一条从根结点到该结点的路径的过程,和给定值比较的关键字个数等于路径长度加1(或结点所在层次数),因此,和折半查找类似,与给定值比较的关键字个数不超过树的深度。然而,折半查找长度为n的表的判定树是惟一的,而含有n个结点的二叉排序树却不惟一。图1中(a)和(b)的两棵二叉排序树中结点的值都相同,但前者由关键字序列(45,24,53,12,37,93)构成,而后者由关键字序列(12,24,37,45,53,93)构成。(a)树的深度为3,而(b)树的深度为6。再从平均查找长度来看,假设6个记录的查找概率相等,为1/6,则(a)树的平均查找长度为

而(b)树的平均查找长度为:

标图1 不同形态的二叉查找树
(a)关键字排序为(45,24,53,12,37,93)的二叉排序树
(b)关键字排序为(12,24,37,45,53,93)的单支树题

因此,含有n个结点的二叉排序树的平均查找长度和树的形态有关。当先后插入的关键字有序时,构成的二叉排序树蜕变为单支树。树的深度为n,其平均查找长度为(和顺序查找相同),这是最差的情况。显然,最好的情况是二叉排序树的形态和折半查找的判定树相同,其平均查找长度和成正比。那么,它的平均性能如何呢?

假设在含有n(n≥1)个关键字的序列中,i个关键字小于第一个关键字,n-i-1个关键字大于第个关键字,则由此构造而得的二叉排序树在n个记录的查找概率相等的情况下,其平均查找长度为

P(n,i)=[1 + i * (P(i) + 1) + (n - i -1 )(P(n - i - 1)+1)]      (9-17)

其中P(i)为含有主个结点的二叉排序树的平均查找长度,则P(i)+1为查找左子树中每个关键字时所用比较次数的平均值,P(n一i一1)+1为查找右子树中每个关键字时所用比较次数的平均值。又假设表中n个关键字的排列是“随机”的,即任一个关键字在序列中将是第1个,或第2个……,或第n个的概率相同,则可对(9-17)式从主等于0至n-1取平均值

容易看出上式括弧中的第一项和第二项对称。又,i=0时iP(i)=o,则上式可改写为

由此可见,在随机的情况下,二叉排序树的平均查找长度和 logn是等数量级的。然而,在某些情况下(有人研究证明,这种情况出现的概率约为46.5%)0,尚需在构成二叉排序树的过程中进行“平衡化”处理,成为二叉平衡树。

然后今天就讲到这里啦,大家记得点赞收藏,分享转发,关注小哥哥哦! 最后,如果你想学或者正在学C/C++编程,可以来小编的编程学习C/C++企鹅圈https://jq.qq.com/?_wv=1027&k=vLNylJeG

数据结构之算法(二叉排序树的查找分析)相关推荐

  1. 数据结构与算法--代码鲁棒性案例分析

    代码鲁棒性 鲁棒是robust的音译,就是健壮性.指程序能够判断输入是否符合规范,对不合要求的输入能够给出合理的结果. 容错性是鲁棒的一个重要体现.不鲁棒的代码发生异常的时候,会出现不可预测的异常,或 ...

  2. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  3. 数据结构与算法--代码完整性案例分析

    确保代码完整性 在撸业务代码时候,经常面对的是接口的设计,在设计之初,我们必然要先想好入参,之后自然会有参数的校验过程,此时我们需要把可能的输入都想清楚,从而避免在程序中出现各种纰漏.但是难免面面俱到 ...

  4. 《代码随想录(Carl)》 数据结构与算法 程序的性能分析知识点总结

    <代码随想录(Carl)> 数据结构与算法 程序的性能分析 2.1时间复杂度分析 2.1.1时间复杂度 时间复杂度是一个函数,它定性描述该算法的运行时间. 假设算法的数据规模为n,操作单元 ...

  5. java 线性的排序算法_077-线性查找分析和实现

    2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...

  6. java二叉排序树_数据结构与算法—二叉排序树(java)

    前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度.规则相对是简单的. 再数据结构中树.图才是数据结构标志性产物,(线性表大多都现成api可以使用),因为树的难度相比线性表大一 ...

  7. 【数据结构与算法】二分查找

    一.什么是二分查找? 二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0. 二.时间复杂度分析? 1.时间复杂度 ...

  8. 数据结构与算法分析c++第四版_数据结构与算法 - 时空复杂度分析

    这周主要总结了时间复杂度的学习,跟小伙伴们分享下,欢迎指正. 一.为何需要分析算法复杂度 挺多同学本科都学习过数据结构和算法这门课,但是有没有想过这门课到底是解决什么问题?科学家设计这些数据结构和算法 ...

  9. 数据结构与算法:二分查找

    二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...

最新文章

  1. python tableview_在PyQ中清除TableView
  2. 源码编译安装percona-xtrabackup-2.3.2
  3. 图像恢复迭代算法的加速
  4. 视频中的目标检测与跟踪综述
  5. jquery常用功能
  6. Java+selenium 自动化测试--自动化测试模型介绍
  7. halcon-高速下载
  8. LBP原理介绍以及算法实现
  9. 服务器怎么查看c盘大文件在哪里,怎么快速查找系统中的大文件?
  10. 力扣:714.买卖股票的最佳时机含手续费
  11. Android自定义进度条拖动,Android之ProgressBar(进度条)和SeekBar(拖动条)
  12. 家事:庆祝父亲60岁生日
  13. 苹果审核返回崩溃日志 iOS .crash文件处理 symbolicatecrash
  14. Pfam数据库转移至InterPro数据库导致HMMER模型下载不能用
  15. [转载]无盘网吧实际施工过程中的注意事项(转)
  16. 线性回归的损失函数与逻辑回归的损失函数
  17. KMP(b中有几个a)
  18. 转载:详解5个被误解的CPU/GPU概念
  19. linux+shell+解压命令,Shell命令 文件压缩解压缩之gzip、zip详解
  20. 曾国藩经典人生哲理语录

热门文章

  1. 大华服务器维护常使用的命令,大华平台软件简介
  2. 微信开发者工具 设置一个tab为4个空格
  3. 技术一旦被用来作恶,究竟会有多可怕?
  4. 抖音短视频开发项目跨入社交圈,头条实现社交梦?...
  5. 蒟蒻のpython(记一个爬虫教程小网站)
  6. 网络安全如何进行培训才有效
  7. 【Oracle】SQL字符串查找_精确查询,只要23不要234
  8. SIP协议栈OSIP分析
  9. 03 矩阵不只是mn个数字
  10. 申宝股票-抱团股继续杀跌