二分查找很简单,可是对于一个区间长度为n的数组,最大的比较次数为多少呢?

对于标准的二分查找,我们每次从区间[l,r)中取一个值,和中间值mid=(l+r)>>1进行比较,然后将数组分为[l,mid) [mid+1,r),即每次将区间长度x变为(x-1)>>1。最大比较次数显然是我们想要查找的数并不在数组中的时候,这样的话我们需要将区间长度变为0才能结束比较。这样直接分析有些困难,因此我们不妨换一个思路。

如果区间长度为1,显然最多比较1次
区间长度为2,最多比较2次([0,2) -> [0,1) -> [0,0)
区间长度为3,最多比较2次([0,3) -> [0,1) [2,3)
区间长度为4,最多比较3次([0,4) -> [0,2) -> [0,1)

因此我们不难得到规律:
如果最多比较x次,则区间长度为2^(x-1) ~ 2^x-1
对于区间长度y,最多比较logy+1

我们对上述发现的规律进行归纳证明:

假设对于区间长度为2^(k-1) ~ 2^k-1的区间,最多比较k
则对于区间长度为2^k ~ 2^(k+1)-1的区间,假设区间长度为x
如果区间长度为奇数,那么第一次比较以后左右两个区间的长度在2^(k-1) ~ 2^k-1之间,加上第一次比较,最多比较k+1
如果区间长度为偶数,那么第一次比较以后较大的区间为长度为偶数的区间,此区间的长度仍然在2^(k-1) ~ 2^k-1之间,加上第一次比较,最多比较k+1

综上对于区间长度为2^(k-1) ~ 2^k-1的区间,最多比较k次(k>=1),即对于区间长度y,最多比较logy+1

二分查找的最大比较次数相关推荐

  1. 二分查找最大比较次数证明

    结论 对n个元素进行二分查找,最大比较次数为:⌊log2n⌋+1\lfloor log_2n \rfloor +1⌊log2​n⌋+1 问题 给定升序数组,各元素不同,查找某元素. 如果该元素存在:输 ...

  2. Round17—顺序查找、二分查找

    知识点: 知道什么是顺序查找,什么是二分查找,知道判定树,知道二分查找的最大比较次数是 单选题: 2-1已知一个长度为16的顺序表L,其元素按关键字有序排列.若采用二分查找法查找一个L中不存在的元素, ...

  3. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  4. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  5. 二分查找模板全面总结

    二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...

  6. 二分法:二分查找(递归+非递归)实现

    二分查找又称折半查找,首先,假设表中元素是按升序排列,将 表中间位置的关键字与查找关键字比较: 如果两者相等,则查找成功; 否则利用中间位置将表分成前.后两个子表: 1)如果中间位置的关键字大于查找关 ...

  7. 数据结构之二分查找(折半查找)

    数据结构之二分查找(折半查找) 二分查找又称折半查找,优点是次数比较少,查找速度快,平均性能好,其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先 ...

  8. python实现二分查找(折半查找)算法

    python实现二分查找算法 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 查找又称折半 ...

  9. C++实现二分查找(递归方法和非递归方法)

    需要注意的一个地方:middle=start+(end-start)/2;//假如,left与right之和超过了所在类型的表示范围的话,那么middle就不会得到正确的值.所以写成这种形式稳妥 另外 ...

最新文章

  1. 「AI不惑境」数据压榨有多狠,人工智能就有多成功
  2. WPF中实现先登录后启动主程序的方法
  3. 谈表达式树的缓存(7):五种缓存方式的总体分析及改进方案
  4. nand ubi -4 kernel和mtd
  5. C++总结8——shared_ptr和weak_ptr智能指针
  6. buuct 假如给我三天光明 misc_假如给我三天光明读后感
  7. [ZT]大型企业局域网安全解决方案
  8. React仿写网易云音乐项目
  9. android转发短信到邮箱,Android手机使用Tasker转发短信及来电
  10. 【EasyExcel】 模板填充批量导出,多文件以zip压缩包格式导出
  11. hdu 5755 Gambler Bo【gauss】
  12. pta 循环——首字母大写
  13. 如何注册自己的企业邮箱?
  14. 最详细的MySQL大表优化方案
  15. matlab norm函数使用_MATLAB 中NORM运用
  16. Spring Boot入门教程(四十六): @Async
  17. 《调色师手册:电影和视频调色专业技法(第2版)》——第2章 调色工作的环境设定 基于监视器的色彩管理...
  18. 全球最大的Spark+AI峰会发放优惠码SAIS20TRAIN,培训费优惠20%!
  19. Python基础入门知识
  20. 该以什么样的心态面对工作

热门文章

  1. LiveBos---按钮成下拉
  2. HDU2602 (0-1背包)
  3. 【动态规划】【多重背包】[HDU 1291]悼念512汶川大地震遇难同胞――珍惜现在,感恩生活...
  4. 白话经典算法系列之中的一个 冒泡排序的三种实现
  5. powerdesigner 导出数据库表结构
  6. mysql文件软连接失败,解决打包软链接打包失败问题
  7. java gson fromjson,Gson的fromJson()方法
  8. mysql lepus_MySQL 监控软件lepus天兔
  9. mysql 5.7 udf http_mysql下mysql-udf-http效率测试小记
  10. c语言用星号输出沙漏,《算法笔记》学习日记——3.3 图形输出