网站首页 > 技术文章 正文
时间复杂度
时间复杂度是用来衡量对常数操作次数的指标。
什么是常数操作呢?
与数据量没有关系,能在固定时间内完成的操组叫做常数时间操作。
冒泡排序的时间复杂度
假设给定一个数组:[1,2,3,4,5,6,7,8],按照冒泡排序的算法分析,需要经历两种操作:
1. 遍历数组;
2. 交换数据;
遍历数组要经历 8 + 7 + 6 + ... + 1次,一个等差数列求和。交换数据是固定操作。
等差数列的求和公式为:
展开后得出最高阶为 n^2/2。常数 1/2,以及 na1 等低阶项忽略。因此最终冒泡排序的时间复杂度为 O(n^2)。
为什么这样规定呢,因为在 0 趋于 ∞ 时
二分查找的复杂度
每次查询都是折半操作,所以时间复杂度为
但是在实际的复杂度表示中,2 是被省略的,直接记作 O(logN) ,这是因为不论底数是多少,计算得到的值也是很小的,所以默认写成 O(logN)。
常数的时间复杂度是O(1)。
动态数组
固定数组:空间分配确定后,不会动态扩容。无法存放超过分配空间大小的数据。
动态数组:当数据存放不下的时候,会自动扩容,使得数据得以存放。
思考一个问题:Java 中的动态数组的扩容机制会不会影响它的性能?
在时间复杂度上并不会影响。举个:
假设 ArrayList 容量只有 1,此时放入 2 个数据,需要拷贝原始数据,并扩容。(ArrayList 底层扩容机制是原有容量的 1.5)。因此每次扩容的时间复杂度是个常数。记为 O(1)。因此动态数组相比于固定数组的慢是一种常数时间的慢,从时间复杂度来说,并不影响。
- 上一篇: 算法的时间和空间复杂度-程序员的噩梦
- 下一篇: 排序算法时间复杂度、空间复杂度分享
猜你喜欢
- 2024-09-25 评估算法及算法的时间复杂度 评估算法有哪些
- 2024-09-25 关于算法的时间复杂度和大O记号的简单理解
- 2024-09-25 算法001:O(1)时间复杂度的底层原理,什么是时间复杂度?来看
- 2024-09-25 面试官:说说你对算法中时间复杂度,空间复杂度的理解?如何计算
- 2024-09-25 排序算法时间复杂度、空间复杂度分享
- 2024-09-25 算法的时间和空间复杂度-程序员的噩梦
- 2024-09-25 Python算法 00--时间复杂度和空间复杂度
- 2024-09-25 「算法」几分钟时间让你彻底学会—空间复杂度
- 2024-09-25 五分钟带你理解Java算法的时间复杂度
- 2024-09-25 「算法」什么是冒泡排序 冒泡排序的算法原理
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)