法复杂度 概念
在描述算法复杂度时候,经常用到O(1),O(n),O(logn),O(nlogn) 来表示对应复杂度程度, 不过目前大家默认也通过这几个方式表示空间复杂度 。
那么,O(1), O(n), O(logn), O(nlogn)就可以看作既可表示算法复杂度,也可以表示空间复杂度。
大O加上()的形式,里面其实包裹的是一个函数f(),O(f()),指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。
类型 | 意义 | 举例 |
---|---|---|
O(1) | 最低复杂度,常量值,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变 | 哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标(不考虑冲突的话) |
O(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)的时间复杂度 | |
### 经典例子 |