先说下定义O(log2n)与O(n)的区别

O(log2n)含义说明:

比如123456789,你要找2,首先查中间元素5,大于2,所以直接排除掉5右边的6789,然后在1234里继续二分查找。每次排除1/2的元素,所以是O(log2n)。

O(n)含义说明:

n是元素的个数,O(n)意味着你把每个元素都访问一遍,这样你当然可以找到要查找的数了。但是对于有序数组,没必要这样遍历整个数组。

再说下时间复杂度:

总共有n个元素,每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。

由于n/2^k取整后>=1,即令n/2^k=1,

可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn)。

总结一下就是:

二分法的关键思想是   假设该数组的长度是N那么二分后是N/2,再二分后是N/4……直到二分到1结束(当然这是属于最坏的情况了,即每次找到的那个中点数都不是我们要找的),那么二分的次数就是基本语句执行的次数,于是我们可以设次数为x,N*(1/2)^x=1;则x=logn,底数是2。

最后说二分法查找(binary search):

也称作折半查找(half-interval search),每次划分一半进行下一步搜索,所以时间复杂度无非就是while循环的次数。

适用范围:

已经排好序的数组

Java 实现:

定义两个变量,一个low,一个high,则mid=(low+high)/2

    public static void main(String[] args) {int[] arr= {30,20,50,10,80,9,7,12,100,40,8};Arrays.sort(arr);//{7,8,9,10,12,20,30,40,50,80,100};System.out.println(Arrays.toString(arr));System.out.println(twoff(arr,40));}public static int twoff(int[] arr, int value) {//定义边界int low = 0;int high = arr.length - 1;while ((low <= high) && (low <= arr.length - 1)&& (high <= arr.length - 1)) {int mid=(low+high)/2;if(value==arr[mid]) {return mid;}if(value>arr[mid]) {low=mid+1;}if(value<arr[mid]) {high=mid-1;}}return -1;//没有找到返回-1}

总结一下,简单理解就是二分都是以2为底n的对数

二分法的时间复杂度计算相关推荐

  1. 二分法查找时间复杂度计算

    查找数据长度为N,每次查找后减半, 第一次   N/2 ... 第k次   N/2^k 最坏的情况下第k次才找到,此时只剩一个数据,长度为1. 即 N/2^k = 1 查找次数 k=log(N).

  2. 二分查找与时间复杂度计算分析

    二分查找: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.   原理:假设表中元素 ...

  3. 时间复杂度计算超全整理!!(数据结构和算法的第一步

    目录 1. 什么是数据结构? 1.1 数据结构和数据库的区别 1.1.1磁盘的特点: 2.什么是算法? 3.算法效率 3.1 如何衡量一个算法的好坏 4.时间复杂度 4.1 时间复杂度的概念 4.2 ...

  4. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

  5. 【算法数据结构Java实现】递归的简单剖析及时间复杂度计算

    1.理解 对于递归函数的理解,我觉得是比较重要的,因为很多大神能把递归函数用的惟妙惟肖,不光是他们的编程功力高深,更主要是能理解这个算法.比较直白的理解是,如果一个事件的逻辑可以表示成,f(x)=nf ...

  6. 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)

    上一篇文章学习了:[算法设计与分析]15 分治策略:芯片测试 文章目录 1. 快速排序的基本思想 1.2 时间复杂度的计算 1.21 最坏情况时间复杂度计算 1.22 最好情况时间复杂度 1.23 平 ...

  7. 时间复杂度计算--求两正整数最大公约数

    1.计算时间复杂度的基本流程 时间复杂度计算主要分为3个步骤: 先找出算法的基本操作 计算基本语句的执行次数的数量级 用O记号表示算法的时间性能 2. 求两数最大公约数 问题描述:求a, b两正整数的 ...

  8. 递归算法的时间复杂度计算

    递归算法的时间复杂度计算 递归时间复杂度的计算本质在于 递归次数*每次递归中的操作数 利用二叉树进行递归调用:O(logn),每次递归调用都是n/2.

  9. 高斯消元法的时间复杂度计算

    高斯消元法的时间复杂度计算 1.时间复杂度定义 2.几种常见复杂度执行效率的比较 3.时间复杂度的计算 4.高斯消元法的时间复杂度     算法的时间复杂度通常用来反映程序执行时间随输入规模增长而增长 ...

最新文章

  1. ML之DT之CART:分类与回归树CART算法的简介、应用、经典案例之详细攻略
  2. 用OpenSSL编写SSL,TLS程序
  3. python正则表达式爬虫_Python爬虫之正则表达式一些常用方法
  4. U盘中病毒了,丢失的文件能用EasyRecovery恢复吗?
  5. こだわり者いろはちゃん / Iroha's Obsession (暴力枚举)
  6. vue.js2.0视频教程
  7. Internet Explorer 无法打开搜索页完美解决办法
  8. 总结几款国内外在线的神级抠图工具
  9. linux内核 quota,Linux系统磁盘配额(quota)
  10. 考研二战日记-第11天——高数2.1 导数概念
  11. pandoc 转换html,使用pandoc实现markdown和latex以及html的互转
  12. 量化交易学习(10)均线交叉策略
  13. JavaScript高级编程设计(第三版)——第二章:在html中使用javaScript
  14. kettle工具坐mysql数据迁移_Kettle数据迁移的安装及使用
  15. pak文件的打包和解包
  16. 巴厘岛旅行摄影调色效果lr预设
  17. 【UGUI】如何实现自动滚动文本效果
  18. 微信小程序中vant/weapp安装,初始化,及使用
  19. 2020年,如何做好抖音快手运营?短视频运营攻略
  20. JustNews WordPress 强悍插件不到一个月权重4开源无加密无需数据库无授权关键词自动扩充文章自动生成适合所有cms

热门文章

  1. Filebeat+Kafka+ELK日志采集(五)——Elasticsearch
  2. 【JavaScript】获取和操作 DOM 节点
  3. 【安全知识分享】PPTX|高处作业安全培训(81页)(附下载)(附下载)
  4. Android 接口回调(有史以来最实用最简单的例子)
  5. win10基本操作(抖音总结)__2018.05.27
  6. systick 时间修改_如何用SysTick实现测量程序运行时间
  7. 【HIT-计算机系统】ICS-Lab2 DataLab
  8. 腾讯企业邮箱发送邮件异常(501):ÇëµÇ¼exmail.qq.comÐÞ¸ÄÃÜÂë
  9. 对话天壤创始人薛贵荣:AIGC正在成为新的“水煤电”
  10. 英国皇家海军即将举行“信息勇士17”网络作战演习