二分查找的最大比较次数
二分查找很简单,可是对于一个区间长度为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
次
二分查找的最大比较次数相关推荐
- 二分查找最大比较次数证明
结论 对n个元素进行二分查找,最大比较次数为:⌊log2n⌋+1\lfloor log_2n \rfloor +1⌊log2n⌋+1 问题 给定升序数组,各元素不同,查找某元素. 如果该元素存在:输 ...
- Round17—顺序查找、二分查找
知识点: 知道什么是顺序查找,什么是二分查找,知道判定树,知道二分查找的最大比较次数是 单选题: 2-1已知一个长度为16的顺序表L,其元素按关键字有序排列.若采用二分查找法查找一个L中不存在的元素, ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- 二分查找模板全面总结
二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...
- 二分法:二分查找(递归+非递归)实现
二分查找又称折半查找,首先,假设表中元素是按升序排列,将 表中间位置的关键字与查找关键字比较: 如果两者相等,则查找成功; 否则利用中间位置将表分成前.后两个子表: 1)如果中间位置的关键字大于查找关 ...
- 数据结构之二分查找(折半查找)
数据结构之二分查找(折半查找) 二分查找又称折半查找,优点是次数比较少,查找速度快,平均性能好,其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先 ...
- python实现二分查找(折半查找)算法
python实现二分查找算法 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 查找又称折半 ...
- C++实现二分查找(递归方法和非递归方法)
需要注意的一个地方:middle=start+(end-start)/2;//假如,left与right之和超过了所在类型的表示范围的话,那么middle就不会得到正确的值.所以写成这种形式稳妥 另外 ...
最新文章
- 「AI不惑境」数据压榨有多狠,人工智能就有多成功
- WPF中实现先登录后启动主程序的方法
- 谈表达式树的缓存(7):五种缓存方式的总体分析及改进方案
- nand ubi -4 kernel和mtd
- C++总结8——shared_ptr和weak_ptr智能指针
- buuct 假如给我三天光明 misc_假如给我三天光明读后感
- [ZT]大型企业局域网安全解决方案
- React仿写网易云音乐项目
- android转发短信到邮箱,Android手机使用Tasker转发短信及来电
- 【EasyExcel】 模板填充批量导出,多文件以zip压缩包格式导出
- hdu 5755 Gambler Bo【gauss】
- pta 循环——首字母大写
- 如何注册自己的企业邮箱?
- 最详细的MySQL大表优化方案
- matlab norm函数使用_MATLAB 中NORM运用
- Spring Boot入门教程(四十六): @Async
- 《调色师手册:电影和视频调色专业技法(第2版)》——第2章 调色工作的环境设定 基于监视器的色彩管理...
- 全球最大的Spark+AI峰会发放优惠码SAIS20TRAIN,培训费优惠20%!
- Python基础入门知识
- 该以什么样的心态面对工作
热门文章
- LiveBos---按钮成下拉
- HDU2602 (0-1背包)
- 【动态规划】【多重背包】[HDU 1291]悼念512汶川大地震遇难同胞――珍惜现在,感恩生活...
- 白话经典算法系列之中的一个 冒泡排序的三种实现
- powerdesigner 导出数据库表结构
- mysql文件软连接失败,解决打包软链接打包失败问题
- java gson fromjson,Gson的fromJson()方法
- mysql lepus_MySQL 监控软件lepus天兔
- mysql 5.7 udf http_mysql下mysql-udf-http效率测试小记
- c语言用星号输出沙漏,《算法笔记》学习日记——3.3 图形输出