微信公众号:珷玞的日常
复杂度分析是衡量算法快慢标准,这个标准很大程度上能衡量一个算法的优劣。所以在数据结构和算法最开始,复杂度分析的学习是很重要的。
为什么需要复杂度分析?
在许多算法书中都有这样一个名词,叫「事后统计法」,即通过监控代码的运行过程来得到算法的运行时间和占用的内存大小。但是显然这种方式有着很大的弊端:
-
测试结果非常依赖测试环境 不同的机器,硬件设施不同就可以造成代码运行时间的不同。即使是同一台机器,不同的编译器运行同一段代码时间也不尽相同。
-
测试结果受数据影响较大
例如在排序中,输入如果是有序的,那么运行时间就会比输入无序的结果短;另外输入数据规模过小也可能会无法真实的反映算法性能。
所以,我们需要一个不需要具体测试的方法,来达到估算算法执行效率的目的,这就是复杂度分析。
大O表示法
以一段代码为例:
-
# 1-1
-
def sum(int n):
-
a = 1
-
for i in range(n):
-
a += i
-
print(a)
这是一段很简单的累加程序,这里我们将执行每条语句的