BIg O notation
O(1):Constant Complexity 常数复杂度
O(log n): Logaritgmic Complexity 对数复杂度
O(n): Linear Complexity 线性时间复杂度
O(n^2): N square Complexity 平方
O(n^3): N square Complexity 立方
O(n!): Factorial 阶乘
注意: 只看高复杂度的运算
例1:
第二个 不管运行几次都是常数级的 只能说是 常数级复杂度 或者是 O(1)
时间复杂度 和 n是线性关系 因此 记作O(n)
第二个 假如 n=100; 则 100*100 因此复杂度是 O(n^2)
第一个: n=100 i执行到10次 n=4 i执行到2次 因此 复杂度就是O(log(n))
第二个 O(k^n) k是常数
时间复杂度曲线图:
降低时间复杂度的例子:
第二个因为只执行一次: 所以复杂度就是O(1)
求斐波拉契数列的第n项
由下图可以看出上面这种写法会直接把复杂度变成指数级的,
建议用循环 或者是 构建一个缓存
主定理求时间复杂度:
1.二分查找,一般发生在一个数列本身有序的时候,在有序数列中查出你要的目标数,所以每次都一分为二,最后时间复杂度是 log(n)
2.二分遍历查找,它没一边是相等的时间复杂度这么下去 T(n) = 2T(n/2)+O(1)这样
3.一个排好序的二位矩阵进行二分查找;O(n)
4.归并排序; Nlogn的时间复杂度