一、看常数操作总次数与数据量的关系

以选择排序为例,每次选择剩余数据中最小值,将选出的最小值放到前面。
看: 数组寻址获取index位置元素
比: 比较当前最小值与当前元素的的大小
swap:将最小值与当前序列头部元素交换
image.png
总次数:时间复杂度 - 图2 级别。

二、递归程序复杂度估计-master公式

image.png
image.png

tips:记忆方法
如果log(b,a) < d的话,那么整体复杂度是由除了递归的其他逻辑决定的,是指数的规模,
如果小于,那么就是由log(b,a)的递归行为决定,整体复杂度即使N的log(b,a) 次方;
如果是等于,就比较特殊,最终复杂度是由两部分乘积构成。
例子:
image.png
tips:这里mid取值是(R-L)>>1 ?
原因1 :(L+R/ 2) 可能整形溢出。弹幕说leetcode153题,不知道是个啥题目。
image.png
原因2 : 能够保证mid取不到R,每次是减小的,比如L= 1 ,R=2,求出来的mid =1;
如果写成mid = (R-L +1) /2 的话,结果就成了2, 这样下面的process(arr , L , mid)就有stack over flow 异常了。
复杂度分析:
image.png
T(N ) + 2 * T(N/2) + O(N), 套上master公式,a=2, b=2, d = 1.
log(b, a) = d; 所以最终复杂度就是 O(N)

三、 当递归程序归纳成master公式后,a是1的时候

比如T(N) = T(N-1 ) + O (N)
例子:

四、出现双指针有增有减的时候,分析方法:构造两个变量,看变化幅度

例如:KMP算法

五:一些优化后的数论算法、图论算法

先放着,看看就好
例1:素数埃式筛选,
为什么埃式筛法的时间复杂度是O(nloglogn)? - 知乎 https://www.zhihu.com/question/35112789
例2:并查集,据说证明了25年。

番外:
1、除了O,还有平均复杂度和最好复杂度。算法上不用。
image.png