算法 二分查找的时间复杂度为O(log2N)的原因推理
时间复杂度概念还不清楚的可以先看我的下面这个文章:
https://blog.csdn.net/u010452388/article/details/80875958
由于二分查找每次查询都是从数组中间切开查询,所以每次查询,剩余的查询数为上一次的一半,从下表可以清晰的看出查询次数与剩余元素数量对应关系
表-查询次数及剩余数
第几次查询 | 剩余待查询元素数量 |
1 | N/2 |
2 | N/(2^2) |
3 | N/(2^3) |
… | … |
K | N/(2^K) |
从上表可以看出N/(2^K)肯定是大于等于1,也就是N/(2^K)>=1,我们计算时间复杂度是按照最坏的情况进行计算,也就是是查到剩余最后一个数才查到我们想要的数据,也就是
N/(2^K)=1
=>N=2^K
=>K=log2N
所以二分查找的时间复杂度为O(log2N)
代码
/*** 二分查找* @param arr 指定查询的数组* @param searchNum 要查询的数字* @return 返回查询的的结果(数组中的索引),没有则返回-1*/public static int binerySearch(int[] arr, int searchNum) {// 初始化左侧索引int leftIndex = 0;// 初始化右侧索引int rightIndex = arr.length - 1;while (leftIndex <= rightIndex) {// 计算中间索引int mid = (leftIndex + rightIndex) >>> 1;//主要防止溢出,就是除以2的意思// 如果查询的数等于中间索引对应的数组里的数,则返回mid索引,并退出循环if (searchNum == arr[mid]) {return mid;}// 判断并计算右侧索引if (searchNum < arr[mid]) {rightIndex = mid - 1;}// 判断并计算左侧索引if (searchNum > arr[mid]) {leftIndex = mid + 1;}}return -1;}
算法 二分查找的时间复杂度为O(log2N)的原因推理相关推荐
- 算法简介——二分查找,时间复杂度,空间复杂度
文章目录 前言 二分查找 时间复杂度 大O表示法 空间复杂度 小结 前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略 ...
- 二分查找的时间复杂度以及算法
给定一个规模为n的按照数字从小到大排序的数组,快速查询x元素在数组中的位置 示例: 数组:[1,3,6,9,14,35,67] 查找的值:9输出:3 1.计算数据规模为n二分查找的时间复杂度 循环 ...
- 数据结构三大查找算法(二分查找、插值查找、斐波那契数列查找)C语言实现
文章目录 查找 二分查找(折半查找) 插值查找 斐波拉契查找 总结: 查找 查找是在大量的信息里面寻找一个特定的信息元素 (1)静态查找和动态查找: 静态或者动态都是针对查找表而言的.动态表指查找表中 ...
- 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)
数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...
- 二分查找的时间复杂度分析
话不多说,先上代码 : public int binarysearch (int []array,int value ){int begin =0;int end = array.length -1; ...
- java 二分查找_计算机入门必备算法——二分查找法
1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...
- 算法学习:我终于明白二分查找的时间复杂度为什么是O(logn)了
最近发现了个好东西,就是一个学算法的好东西,是网易公开课的一个视频. 直通车 这是麻省理工学院的公开课,有中英字幕,感谢网易.. 也可以在App把视频缓存下来之后再放到电脑上面看,因为我这样可以倍速, ...
- 二分查找与时间复杂度计算分析
二分查找: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表. 原理:假设表中元素 ...
- 90%的程序员都写错的算法-二分查找万能模版
新的角度看二分 二分就是将数组分为两段 因此,问题的最终目标是找出蓝红边界 朴素算法 红色指针一开始指向最右超出范围处,随后不断向左移动,直到找到蓝红边界:或者蓝色指针- 时间复杂度O(n)O(n)O ...
最新文章
- HDU 4609 3-idiots FFT
- ssh-keygen-基础使用
- Dynamics CRM Publisher
- Tick技术栈之InfluxDB
- 计算机联网实验步骤,计算机网络技术实验操作过程.doc
- Google Guava缓存实现接口的限流
- 【报告分享】百度大脑AI技术成果白皮书2018-2019.pdf
- XMLHttpRequest异步时的超级链接调用函数问题
- C#数组和集合专题2(Array)
- js如何监听元素事件是否被移除_javascript:什么是js事件?(上)
- 由一个照片,可以看出云是个物体
- 极光短信验证码JAVA_Android如何集成极光短信验证
- udp java 检测连接_java创建udp连接 java udp怎样测试是否连接
- ai人工智能的数据服务_AI如何帮助提高企业数据质量
- 能够自动绘制网络拓扑图的软件——WGCLOUD
- C++ QT调用python脚本并将软件打包发布
- 唯品会开盘股价超过8美元 市值再超当当网
- Canvas入门篇(一)
- 奔腾PLFE5001电压力锅
- Oracle19C 解决scott不存在的问题
热门文章
- SGM6230关键参数及其曲线特性的分析
- 网络营销教程SEO 第四章 搜索引擎优化基础(第四节)
- 足球数据【图文直播】API调用示例代码
- vivoz5电池测试软件,vivo Z5续航能力测评!配备4500mAh大电池,续航神机名不虚传...
- Javascript查找字符串中的某个值,截取其之前。和之后的值
- Android使用AudioTrack播放WAV音频文件
- 前端常见面试题——闭包
- Python:SSH连接及FTP文件传输
- Netty游戏服务器开发实战(14):游戏推送的设计
- Android 性能优化lt;九 RecyclerView替代Listview用法