算法时间复杂度简单理解

常见算法时间复杂度:O(1)O(log_{2}^{n})O(n)O(n\cdot log_{2}^{n})O(n^{2})、按复杂度从小到大排序

很多人肯定对这些算法时间复杂度表示只了解相互之间大小,可能并不清楚具体每种算法时间复杂度对应那些常见的编码写法。下面分别举个例子。

1. O(1):算法复杂度是最快的算法时间,其表示算法所需时间与数据量大小无关,所需计算时间是固定的。

例如:map.get(x)或array[0],这两个典型的O(1)时间复杂度,这里的map底层实现是数组类型,链表类型不一定。这里无论数组多大,数据有多少,都是从数组指定位置的内存直接获取。这也是为什么最朴素的循环数组可能比有些增强写法的循环快的原因。

2.O(log_{2}^{n}):典型的二分查找

3.O(n):单次循环,如for循环数组,随着数据量增大算法时间线性增加

4.O(n\cdot log_{2}^{n}):单层循环中嵌套一层二分查找

5.O(n^{2}):双重for循环,算法时间是随着数据量增大平方次增加的。同理,次数为3则是3层for循环

补充:其实除了幂函数级别的算法时间复杂度还有指数函数的算法时间复杂度O(a^{n}),但这种算法时间复杂度的算法没有什么研究意义了。因为随着数据增加,算法时间指数增加。平时我们在写代码时应该尽量避免高幂次的算法,更何况指数函数时间复杂度的算法了。同时这也衍生出P-NP问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值