首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于折半查找,书上的介绍有点不理解。平均查找长度如何算的

2012-02-14 
关于折半查找,书上的介绍有点不理解。平均查找长度怎么算的?书上说:假定有序表的长度n2^h-1,则描述这边查

关于折半查找,书上的介绍有点不理解。平均查找长度怎么算的?
书上说:
  假定有序表的长度n=2^h-1,则描述这边查找的判定树是深度为h的满二叉树。树中层次为1的结点有1个,层次为2的结点有2个……,层次为h的结点有2^(h-1)个。假设表中每个记录的查找概率相等(Pi=1/n),则查找成功时折半查找的平均查找长度

ASLbs=Pi*Ci(i从1到n)
  =(1/n)(j*2^(j-1))(j是从1到h)

为什么不是(1/n)*j呢?不是第j层之前只比较了j个记录吗?不是每一层只比较一次吗?

书上说:Ci为找到表中其关键字与给定值相等的第i个记录时,和给定值已进行过比较的关键字个数

[解决办法]
1, 3, 5, 7, 9, 11, 13

对以上有序数组,查找关键字8,自己走一遍看看,是不是你想的那样。然后把相应的二叉搜索树画出来,再看看是怎么找的。
[解决办法]
注意1/n是每个节点被查找的概率,而所求的是平均查找长度。
如果是顺序查找,那么平均查找长度=(1/n)*(1+2+3+...+n)
如果是二分查找,那么平均查找长度=(1/n)*(1+2+2+3+3+3+3+...h+h+h+h...)
对于h层的节点有2^(h-1)个
你没搞懂的应该是这个求的是平均查找长度,所以要遍历每一个节点的查找长度.

[解决办法]
这是求平均查找长度呀,就是所有n个节点的期望!
如果你只求一次的查找长度,那么可以去掉1/n,然后就是j了呀

热点排行