当前位置: 首页 > news >正文

聊聊Java算法的时间复杂度

参考

o(1), o(n), o(logn), o(nlogn)_o(1)-CSDN博客
算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?-CSDN博客

在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义:
这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。
O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。

  • 比如时间复杂度为O(n),就代表数据量增大几倍,耗时也增大几倍。比如常见的遍历算法。
  • 再比如时间复杂度O(n^2),就代表数据量增大n倍时,耗时增大n的平方倍,这是比线性更高的时间复杂度。比如冒泡排序,就是典型的O(n^2)的算法,对n个数排序,需要扫描n×n次。
  • 再比如O(logn),当数据增大n倍时,耗时增大logn倍(这里的log是以2为底的,比如,当数据增大256倍时,耗时只增大8倍,是比线性还要低的时间复杂度)。二分查找就是O(logn)的算法,每找一次排除一半的可能,256个数据中查找只要找8次就可以找到目标。
  • O(nlogn)同理,就是n乘以logn,当数据增大256倍时,耗时增大256*8=2048倍。这个复杂度高于线性低于平方。归并排序就是O(nlogn)的时间复杂度。
  • O(1)就是最低的时空复杂度了,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。 哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标(不考虑冲突的话)

通过表格对比

时间复杂度这个东西,其实更准确点说应该是描述一个算法在问题规模不断增大时对应的时

间增长曲线。所以,这些增长数量级并不是一个准确的性能评价,可以理解为一个近似值,时间的增长近似于logN、NlogN的曲线。

常见时间复杂度之间的关系

 

所消耗的时间从小到大

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) <O(n^3)​​​​ < O(2^n) < O(n!) < O(n^n)

http://www.lryc.cn/news/266840.html

相关文章:

  • hive中array相关函数总结
  • 年终盘点文生图的狂飙之路,2023年文生图卷到什么程度了?
  • C++:list增删查改模拟实现
  • 基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
  • ubuntu 18.04 共享屏幕
  • 第十三节TypeScript 元组
  • 基于Java (spring-boot)的仓库管理系统
  • SQL面试题挑战06:互相关注的人
  • LSTM和GRU的区别
  • 算法基础之数字三角形
  • 蓝桥杯宝藏排序题目算法(冒泡、选择、插入)
  • 如何使用Docker部署Dashy并无公网ip远程访问管理界面
  • 【接口测试】如何定位BUG的产生原因
  • JavaScript 中的短路求值(if语句简洁写法--逻辑运算符||和的高级用法)
  • 普本毕业,还有逆风翻盘的机会吗?
  • spark:RDD编程(Python版)
  • 中国元宇宙论坛暨常孝元宇宙发布会即将在京举行
  • 华为认证 | 云计算方向HCIE有效期多久?实验报名费多少?
  • 动物分类识别教程+分类释义+界面展示
  • 【Java动态代理如何实现】
  • 数据库(部分函数)
  • 基于Vite+Vue3 给项目引入Axios
  • 为什么查企业的时候有的公司没有显示注册资金?
  • DataProcess-VOC数据图像和标签一起进行Resize
  • MultiValueMap
  • 山西电力市场日前价格预测【2023-12-25】
  • 【华为OD机试真题2023CD卷 JAVAJS】5G网络建设
  • OSI 七层参考模型及TCP/IP 四层模型
  • 【面向对象】对比JavaScript、Go、Ada、Python、C++、Java、PHP的访问限制。
  • 力扣(leetcode)第26题删除有序数组中的重复项(Python)