时间复杂度
刚学算法的小伙伴可能会有一个疑问,什么是时间复杂度?时间复杂度怎么估算?
一般来说时间复杂度是确定算法流程的总操作数量与样本数量之间的表达式关系,并且只看表达式最高阶项的部分
为什么只看最高阶项?
100W * N^3 + 200W * N^2 + 300W
当N趋近于无穷大的时候,真正起到决定性作用的就是N^3,
N^2以及其它常数项的影响都可以忽略掉了
比如我们自己做一件事情,估算时间的时候可能会说:完成这件事需要一周。
但是没有人说完成这件事需要一周零五小时
所以生活中我们估算一个时间的时候就已经将影响较小的因素给忽略掉了
如果两个算法阶数一样,就需要考虑常数项时间了
如果是O(N^ 3) 和 O(N^2),那么没有可比性
但是如果都是O(n^2)就要看常数项了,有的逻辑实现复杂,有的逻辑实现简单
具体测试就是直接用大样本测试,看看实际运行时间
不要自己分析,分析这个要求的功力太高
比如加减运算肯定要比乘除效率高
比如位运算肯定比加减运算效率高(与、或、异或、左移、右移)
常见的时间复杂度
排名从好到差:
O(1)
O(logN)
O(N)
O(N*logN)
O(N^2) O(N^3) … O(N^K)
O(2^N) O(3^N) … O(K^N)
O(N!)
常数时间操作
如果一个操作的执行时间不以具体样本量为转移,每次执行时间都是固定时间,那么称这样的操作为常数时间的操作
常见的常数时间的操作&#