常见算法时间复杂度:、
、
、
、
、按复杂度从小到大排序
很多人肯定对这些算法时间复杂度表示只了解相互之间大小,可能并不清楚具体每种算法时间复杂度对应那些常见的编码写法。下面分别举个例子。
1. :算法复杂度是最快的算法时间,其表示算法所需时间与数据量大小无关,所需计算时间是固定的。
例如:map.get(x)或array[0],这两个典型的时间复杂度,这里的map底层实现是数组类型,链表类型不一定。这里无论数组多大,数据有多少,都是从数组指定位置的内存直接获取。这也是为什么最朴素的循环数组可能比有些增强写法的循环快的原因。
2.:典型的二分查找
3.:单次循环,如for循环数组,随着数据量增大算法时间线性增加
4.:单层循环中嵌套一层二分查找
5.:双重for循环,算法时间是随着数据量增大平方次增加的。同理,次数为3则是3层for循环
补充:其实除了幂函数级别的算法时间复杂度还有指数函数的算法时间复杂度,但这种算法时间复杂度的算法没有什么研究意义了。因为随着数据增加,算法时间指数增加。平时我们在写代码时应该尽量避免高幂次的算法,更何况指数函数时间复杂度的算法了。同时这也衍生出P-NP问题。