数据结构查找

发布时间 2024-01-09 22:35:13作者: W_K_KAI

折半查找的判定树*

平均查找长度:O(log2n)。

结点的平衡因子定义为 节点的左子树深度与右子树深度之差。对于“平衡二叉树”平衡因子只可能为0,1,-1。若出现非三个值,则不平衡!

解析折半查找树的步骤

首先就是要了解折半查找的步骤,然后依次将mid指向的值作为树的value。如下展示:

例如:长度为10的折半查找判定树的具体生成过程,都遵循

左孩子结点<根结点<右孩子结点
在这里插入图片描述

在长度为10的有序表中进行折半查找,不论查找哪个记录,都必须和中间记录进行比较,而中间记录为(1+10)/2 =5 (注意要取整,即向下取整) 即判定数的的根结点为5。
在这里插入图片描述

考虑判定树的左子树,即将查找区域调整到左半区,此时的查找区间为[1,4],那么中间值为(1+4)/2 =2 (注意要取整) ,所以做孩子根结点为2
在这里插入图片描述

考虑判定树的右子树,即将查找区域调整到右半区,此时的查找区间为[6,10],那么中间值为(6+10)/2 =8 (注意要取整) ,所以做孩子根结点为8

在这里插入图片描述

重复以上步骤,依次去确定左右孩子
在这里插入图片描述

如何快速判断树是否为折半查找判定树

以2017年408中的选择真题为例:
​ 下列二叉树中,可能成为折半查找判定树(不含外部节点)的是(__)。
在这里插入图片描述
【分析】:首先折半查找判断树是执行折半查找过程中形成的树,那么他的子树有着相同的结构。

  • 当表中元素个数为偶数个时,那么折半所产生的子表中,必然会出现两种情况:①前子表比后子表多一个元素;②后子表比前子表多一个元素;那么以这种结构推其后所有的子表应均满足此结构。
  • 当表中元素个数为奇数个时,那么折半所产生的子表中,只会产生一种情况,即前后子表元素个数相同,那么以这种结构推其后所有的子表应均满足此结构。
  • 若二叉树出现例如上题中BC此类关于根节点对称的结构,那么它一定不是折半查找二叉树。

基于上述三点即可以快速看出本题答案为A。至于D选项为何错误,读者可以自行分析便可轻易知晓。

折半查找的判定树一定是一棵平衡二叉树吗?

答:不一定
看看平衡二叉树的定义:要么该二叉树是一颗空树,要么其左右子树的深度之差不超过1,并且左右子树也是平衡二叉树。

折半查找不一定会形成这样的树。

分块查找

分块查找的概念

当数据表中的数据元素很多时,可以采用分块查找。

分块查找又称为索引顺序查找。它汲取了顺序查找和折半查找各自的优点,既有动态结构,又适于快速查找。

查找——分块查找_分块查找的平均查找长度怎么算-CSDN博客

分块查找的平均查找长度
分块查找的平均查找长度为索引p;l.,查找和块内查找的平均长度之和。
设长度为n的查找表均匀地分为b块, 每块有s个记录, 在概率相等的情况下,

如果对索引表进行顺序查找,

\[ASL= \frac {b+1}{2} + \frac {s+1}{2} \]

\[且当s= \sqrt {n} 时, \]

\[ASL_ {\min } = \sqrt {n} +1 \]

如果对索引表进行折半查找, 则

\[ASL=[ \log _ {2} (b+1)]+ \frac {s+1}{2} \]

计算散列表查找成功和查找不成功的平均查找长度(利用线性探测法处理冲突)_线性探测法查找失败的平均查找长度-CSDN博客

3.有n个数存放在一维数组A[1…n]中,在进行顺序查找时,这n个数的排列有序或无序其平均查找长度不同。()
正确答案: B
正确
错误
解析:

在等概率下,查找成功时的平均查找长度相同,查找失败时的平均查找长度不相同。如果查找失败,有序表可以尽早退出,而无序表必须全部遍历完,所以平均查找长度不同。例如对于有序表12345,查找-1时,在遍历第一个元素即可退出,而无序表需要将整个表遍历完。