二分查找法最大查找次数是怎么得来的?

wgyygw5 2010-12-15 10:51:04
对有序表折半查找,其最坏情况下查找一个元素的最大比较次数将介于1和[ log2 n ] + 1 ( n为元素的个数)之间。

这个log2n+1是怎么得来的呢,看到好多书就是直接给这个答案。

还有,“平均查找长度”是个什么意思?
...全文
13101 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lipache1 2013-03-18
  • 打赏
  • 举报
回复 1
引用 8 楼 wgyygw5 的回复:
如1234要找4这个数,根据公式,最大需要log(2)4+1=3次。 1.(1+4)/2=2,把4和2比较,发现比2大 2.(2+4)/2=3,把4和3比较,发现比3大 3.(3+4)/2=3,把4和3比较,发现比3大.... 为什么最后一次又没有找到4???看来我基础不够
第一步结束后,应该把2+1=3赋给新的low,得到的之后两步应为: 2. (3+4)/2=3,把4和3比较,发现比3大 3. (4+4)/2=4, 返回查找值4.
wgyygw5 2010-12-15
  • 打赏
  • 举报
回复
如1234要找4这个数,根据公式,最大需要log(2)4+1=3次。
1.(1+4)/2=2,把4和2比较,发现比2大
2.(2+4)/2=3,把4和3比较,发现比3大
3.(3+4)/2=3,把4和3比较,发现比3大....
为什么最后一次又没有找到4???看来我基础不够
hai040 2010-12-15
  • 打赏
  • 举报
回复
找4才是最坏情况
wgyygw5 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hnuqinhuan 的回复:]
每次二分 直到最后一次才找到 就会有 2^k = n / 2 得到 k = long2n + 1
[/Quote]
数学好久没用了,麻烦哪位帮我举个例子啦,2^k 是什么意思,n / 2 又是什么意思?

我的理解:如1234要找1这个数,根据公式,最大需要log(2)4+1=3次。
1.(1+4)/2=2,把1和2比较,发现比2小
2.(1+2)/2=1,把1和1比较,相同,找到
为什么只用了2次???
bdmh 2010-12-15
  • 打赏
  • 举报
回复
这是一个对数概念,这个不用说了吧,因为二分法每次都会把范围缩小一半,因为最后剩一个元素时,也要执行查找过程,所以+1
flysnowhite 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hnuqinhuan 的回复:]
每次二分 直到最后一次才找到 就会有 2^k = n / 2 得到 k = long2n + 1
[/Quote]
正解。清楚了算法的原理,很容易计算出来。实际值应该略小于它。
hai040 2010-12-15
  • 打赏
  • 举报
回复
最坏情况就是log2n+1
话说什么情况都是在1和log2n+1之间

反过来比较顺,次方比对数容易
最多比较1次的串长是1
最多比较2次的串长是2-3
3是4-7
4是8-15
x是2^(x-1)-2^x-1
無_1024 2010-12-15
  • 打赏
  • 举报
回复
平均查找长度 这是哈希表里面的吧 http://baike.baidu.com/view/547277.htm
無_1024 2010-12-15
  • 打赏
  • 举报
回复
每次二分 直到最后一次才找到 就会有 2^k = n / 2 得到 k = long2n + 1

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧