时间(空间)复杂度 O(N) 的理解
目录
时间复杂度
常数阶
线性阶
对数阶
对数阶乘以n
平方阶
空间复杂度
看算法相关的书籍,发现 O(N) 这样的公式比较困惑,搜罗资料解惑,如下:
描述算法复杂度时,常用o(1), o(n), o(logn), o(nlogn)表示对应算法的时间复杂度或空间复杂度,是算法的时空复杂度的表示。
O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的N代表输入数据的量。
时间复杂度
常数阶
O(1)就是最低的时空复杂度了,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。 哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标(不考虑冲突的话)。如以下代码:无论 n为几,运行步骤都是一样的,所以时间复杂度是:O(1)。
int num = 0,n = 100;
sum = (1+n)*n/2;
System.out.println("value:"+sum);
线性阶
O(n),就代表数据量增大几倍,耗时也增大几倍。
例如:时间复杂度O(n^2),就代表数据量增大n倍时,耗时增大n的平方倍,这是比线性更高的时间复杂度。比如冒泡排序,就是典型的O(n^2)的算法,对n个数排序,需要扫描n×n次。 如下代码,循环体的代码需要执行 n 次,所以时间复杂度为 O(n^2)。
for(int i = 0; i < n ; i++){System.out.println("value:"+i);
}
对数阶
O(logn),当数据增大n倍时,耗时增大logn倍(这里的log是以2为底的,比如,当数据增大256倍时,耗时只增大8倍,是比线性还要低的时间复杂度)。二分查找就是O(logn)的算法,每找一次排除一半的可能,256个数据中查找只要找8次就可以找到目标。如下代码:有多少个 2 相乘大于 n ,循环才能停止,也就是说 2 的 x次方要大于等于n才行,至少等于,那么假如 2 的 x次方 等于 n,则 x 就等于 logn,则时间复杂度就为 O(logn)。
int count = 1;while(count < n){count = count * 2;}
对数阶乘以n
O(nlogn)同理,就是n乘以logn,当数据增大256倍时,耗时增大256*8=2048倍。这个复杂度高于线性低于平方。归并排序就是O(nlogn)的时间复杂度。
平方阶
O(n^2),如下代码,外层循环的次数为n次,外层每循环一次内层循环的次数为n次,所以这段代码的时间复杂度为O(n²)。
int i ,j;for(i = 0; i < n ; i++){for(j = 0; j < n ; j++){System.out.println("");}}
常见的时间复杂度列表
名称 | 运行时间 |
---|---|
常数阶 | O(1) |
对数阶 | O(logn) |
线性阶 | O(n) |
nlogn阶 | O(nlogn) |
平方阶 | O(n²) |
立方阶 | O(n³) |
指数阶 | O(2ⁿ) |
常用的时间复杂度所耗费的时间由小到大依次是:O(1) <O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。
时间(空间)复杂度 O(N) 的理解相关推荐
- STM32输出1-500KHz任意整数频率脉冲,代码时间空间优化实现误差最小频率输出。
提示:此文章只是分析了一种优化STM32发送脉冲减少误差的方法实现,由于本人水平有限,该方法并不是最优解,但确是一种比较容易理解的实现方法. STM32输出1-500KHz任意整数频率脉冲,代码时间空 ...
- SSLOJ 1459.空间简单度【扫描线】【线段树】
... 题意: 分析: 代码: 题意: 给出一棵树以及若干条边 给出一个定值kkk,求有多少条路径的空间简单度>k>k>k 而空间简单度的定义如下: 分析: 这道题和JZOJ(GMO ...
- AAAI 2020 时间交错网络 | ICCV19多标签视频理解冠军方案
本文主要介绍三个部分: 一个高效的 SOTA 视频特征提取网络 TIN,发表于 AAAI 2020 ICCV19 MMIT 多标签视频理解竞赛冠军方案,基于 TIN 和 SlowFast 一个基于 P ...
- TRIZ发明问题解决理论——本质是分析问题中的矛盾,利用资源(时间空间物质能量功能信息等)来解决矛盾从而解决问题——抽象出来:问题是什么,为什么?...
TRIZ意译为发明问题的解决理论.TRIZ理论成功地揭示了创造发明的 内在规律和原理,着力于澄清和强调系统中存在的矛盾,其目标是完全解决矛盾,获得最终的理想解.它不是采取折衷或者妥协的做法,而且它是基 ...
- 时间 ,空间 ,物质
从宇宙暴涨开始才有空间.时间和物质,三者都是相辅相成的,缺一不可,从某种意义上来说时间也空间也可以看成是一种物质,只不过是一种非常特殊的物质....!! 时间是一个独立存在的维度,尽管它能被压缩.拉伸 ...
- 最长上升子序列o(nlogn)复杂度一种简单易懂的理解
文章转载自:https://blog.csdn.net/wqtltm/article/details/81253935 版权归原作者. 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版 ...
- 关节空间阻抗控制器设计的个人理解
通过分享几页PPT来分享一下对阻抗控制器的个人理解. 阻抗控制需要机器人有力控的接口开放出来,不依赖测量外力,对应的导纳控制刚好相反.关节空间的阻抗控制相对于任务空间比较简单,关节空间是的每一个关节都 ...
- 支持度、置信度、提升度、apriori算法理解(简易版)
关于支持度.置信度.提升度以及apriori算法的理解(简单版) 理解支持度 所谓支持度,就是比如说10个用户购买商品,有8个用户购买商品A,那么商品A的支持度就是80%.支持度越大,关联规则越重要, ...
- FDS学习笔记(二)设置时间空间条件,fds中网格(MESH)的设置
通常来说,在建立一个火灾模型时,首先要确定全局参数,即火灾蔓延的时间和空间.即仿真时间.计算域的大小和范围 一.HEAD 设置输入文件时要做的第一件事是给模拟起一个名字,HEAD就是用来设置改项内容的 ...
最新文章
- 关于Linux服务器磁盘空间占满问题的解决方法
- 皮一皮:直男这下懂了吧...
- istringstream和ostringstream
- “有趣”的投影:当PCA失效时怎么办?
- SPP-net论文笔记
- MIT 算法导论 (二)Math Notation
- 天气查询接口演示示例
- Unity通过压缩字体减小包体大小
- Hadoop KMS 使用
- Java二次开发海康SDK-对接门禁机
- cubase计算机音乐,Cubase与Nuendo电脑音乐制作从新手到高手 (200例)
- 软考中级网络工程师证书如何查询?
- html中设置首字母大写,css如何设置英文首字母大写
- 2022-2028年全球与中国各向异性导电胶行业市场前瞻与投资战略规划分析
- gitbucket push卡住
- Unity全面的面试题(包含答案)
- 把多列的迭代次数问题化简为单列问题
- Kubernetes 故障解之(Failed to find subsystem mount for required subsystem: pids)
- CODING 敏捷实战系列课第三讲:可视化业务分析
- 分分钟进阶MongoDB