数据结构查找
折半查找的判定树*
平均查找长度: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个记录, 在概率相等的情况下,
如果对索引表进行顺序查找, 则
如果对索引表进行折半查找, 则
计算散列表查找成功和查找不成功的平均查找长度(利用线性探测法处理冲突)_线性探测法查找失败的平均查找长度-CSDN博客
3.有n个数存放在一维数组A[1…n]中,在进行顺序查找时,这n个数的排列有序或无序其平均查找长度不同。()
正确答案: B
正确
错误
解析:
在等概率下,查找成功时的平均查找长度相同,查找失败时的平均查找长度不相同。如果查找失败,有序表可以尽早退出,而无序表必须全部遍历完,所以平均查找长度不同。例如对于有序表12345,查找-1时,在遍历第一个元素即可退出,而无序表需要将整个表遍历完。