如何计算折半查找的平均查找长度?

如题所述

折半查找可以借助于一个二叉树来描述。

为了简化讨论,则把这棵树近似看成满二叉树,设二叉树的高度为h(h>1)

则,根据二叉树的性质,它有最大节点数n=2^h-1,

则h=log2(n+1) (2是底数)。那么二叉树的第j层节点数为:2^(j-1)

假定每个元素的查找概率相等,则,pi=1/n (pi为第i个节点的查找概率)

那么平均查找长度为 1/n*(1*2^0+2*2^1+3*2^2+……+j*2^(j-1))

则经过化简计算,得平均查找长度为:((n+1)/n ) *log2(n+1)-1 (其中对数中的2为底数:即log以2为底(n+1)的对数)

注 : 当n很大时 ,可近似为 log2(n+1)-1

搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找。

而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

扩展资料:

假设有已经按照从小到大的顺序排列好的五个整数a0~a4,要查找的数是X,其基本思想是: 设查找数据的范围下限为l=0,上限为h=4,求中点m=(l+h)/2,用X与中点元素am比较,若X等于am,即找到,停止查找。

否则,若X大于am,替换下限l=m+1,到下半段继续查找;若X小于am,换上限h=m-1,到上半段继续查找;如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束。

用待查关键字值与中间位置的关键字值进行比较;若相等,则查找成功若大于,则在后(右)半个区域继续进行折半查找若小于,则在前(左)半个区域继续进行折半查找。

对确定的缩小区域再按折半公式,重复上述步骤。最后,得到结果:要么查找成功, 要么查找失败。折半查找的存储结构采用一维数组存放。

参考资料来源:百度百科——折半查找法

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-16
首先,折半查找可以借助于一个二叉树来描述。
为了简化讨论,则把这棵树近似看成满二叉树,设二叉树的高度为h(h>1)
则,根据二叉树的性质,它有最大节点数n=2^h-1,
则h=log2(n+1) (2是底数)。那么二叉树的第j层节点数为:2^(j-1)
假定每个元素的查找概率相等,则,pi=1/n (pi为第i个节点的查找概率)
那么平均查找长度为 1/n*(1*2^0+2*2^1+3*2^2+……+j*2^(j-1))
则经过化简计算,得平均查找长度为:((n+1)/n ) *log2(n+1)-1 (其中对数中的2为底数:即log以2为底(n+1)的对数)
注 : 当n很大时 ,可近似为 log2(n+1)-1
其中 1*2^0+2*2^1+3*2^2+……+j*2^(j-1)的求法如下:
设 S = 1*2^0 + 2*2^1+3*2^2 +……+ j*2^(j-1) ,
则 2S = 1*2^1+2*2^2 +……+ (j-1)*2^(j-1) + j*2^j
则 2S - S = -( 2^0 + 2^1 + 2 ^2 + …… + 2 ^(j-1)) + j *2^j
即 S = - (2^j-1)+j*2^j
带入化简即可。本回答被网友采纳
第2个回答  推荐于2017-05-27
如果你是要求给定的一组有序的记录关键字序列的话,例如{13,18,24,35,47,50,62,83,90}.你要先求出其折半查找判定树。{47(18(13,24( ,35)),62(50,83( ,90)))}.这树你可以还原吧。所以平均查找长度为( 1*1+2*2+3*4+4*2)/9=25/9,只看每一层的结点数。至于那个公式的话,书上有,你就自己看吧。
第3个回答  2011-12-19
你是说纸上计算呢还是编程计算呢?如果是纸上计算,把N个数化为一个N个叶子的二叉树,平均查找长度就是从根到每个叶子的长度的平均值

如果你说编程,那简单的方法是N个数中,每个数的查找长度,然后加一起除以N就好了呗本回答被网友采纳
第4个回答  2020-01-09

如何计算折半查找的平均查找长度?
那么平均查找长度为 1\/n*(1*2^0+2*2^1+3*2^2+……+j*2^(j-1))则经过化简计算,得平均查找长度为:((n+1)\/n ) *log2(n+1)-1 (其中对数中的2为底数:即log以2为底(n+1)的对数)注 : 当n很大时 ,可近似为 log2(n+1)-1 搜索过程从数组的中间元素开始,如果中间元...

折半查找的平均查找长度是多少?
1、顺序查找的平均查找长度ASL=(n+1)\/2,2、在n趋于无穷大时,折半查找的ASL=((n+1)log2(n+1))\/n - 1,当n大于50时,ASL约等于log2(n+1)-1 3、设分块查找中将长为 n 的表分成均等的 b 个块,每块 s 个元素,则 b = (n \/ s)上取整,如果索引表中采用顺序查找,则ASL=(...

折半查找法的平均查找长度=?
平均查找长度=1\/12*(1*1+2*2+3*4+4*5)=37\/12。=3.1。

折半查找方法查找成功的平均查找长度
判定树 如上,查找成功平均长度=1\/8(1+2*2+3*4+1*5)=22\/8=11\/4

具有12个关键字的有序表,折半查找的平均长度是多少
平均查找长度=1\/12*(1*1+2*2+3*4+4*5)=37\/12。关于有序线性表是说线性表中的元素是按照升序或降序(允许相邻元素相同)的方式排列的。线性表是一种基本的计算机内的存储工具。顺序查找的基本思想是:从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查到所...

【讨论】这道题怎么求折半查找的平均查找长度?
折半查找的算法你知道吗?根节点就是折半查找比较的第一个节点(1+29)\/2=15号元素左子树根节点就是1-14号元素中间的那个,右子树根节点16-29中间的那个,以此类推 查看原帖>>

有一个长度为12的有序表,按折半查找法对表进行查找,在表内各元素等概 ...
需要查找1次的排序为:第 6 需要查找2次的排序为:第 3,9 需要查找3次的排序为:第 1,4,7,10 需要查找4次的排序为:第 2,5,8,11,12 平均查找长度: (1*1+2*2+3*4+4*4)\/12 = 37\/12

折半查找的平均查找长度和它的判定树一样吗,为什么我这书上写了三个AS...
第一个只是笼统概念公式,最后两个是实际公式实现过程。现在来说最后两个ASL。将这棵树可看成完全二叉树,我将你图上的树重新画过,红色框表示为空结点。根结点为1,深度为4。查询成功:层次数x该层结点数之和除以总结点数。所以有(1x1+2x2+3x4+4x4)\/11即为平均查找长度。查询不成功:将平衡...

【数据结构】请教一道题,关于二分查找(折半查找)的平均搜索长度。
链表中的位置 :1 2 3 4 5 6 7 8 9 搜索成功的长度:3 2 3 4 1 3 2 3 4 所以平均长度是 (3+2+3...+3+4) \/ 9 答案是: C

「考前避坑」这几个ASL的坑不要再跳了!
考点1:顺序查找、二分查找、分块查找的ASL 在有序单链表中查找任一元素,平均查找长度为(n+1)\/2,无论表是否有序。具有12个关键字的有序表,折半查找成功平均查找长度为37\/12,失败为49\/13。通过折半查找判定树计算得出。分块查找成功平均查找长度计算公式为(s2+2s+n)\/2s,s为每块元素数,n...

相似回答