算法效率评估
在能够解决问题的前提下,算法效率已成为衡量算法优劣的主要评价指标。主要包括以下两个维度。
时间效率:算法运行速度的快慢(即算法运行时间的长短)。
空间效率:算法占用内存空间的大小。
目标是设计 “既快又省” 的数据结构与算法。
效率评估方法
1、实际测试
给定两种算法,在计算机上分别运行它们,记录时间和空间使用情况。
缺陷
- 难以排除测试环境的干扰因素。不同的测试环境可能会得到相反的结果。
- 展开完整测试非常消耗资源。完整测试需要在不同数据量下开展,非常浪费资源。
2、理论估算
复杂度分析(complexity analysis) 描述了随着输入数据大小的增加,算法执行所需时间和空间的增长趋势。 - “时间和空间资源”分别对应时间复杂度(time complexity) 和空间复杂度(space complexity)。
- “随着输入数据大小的增加”意味着复杂度反映了算法运行效率与输入数据体量之间的关系。
- “时间和空间的增长趋势”表示复杂度分析关注的不是运行时间或占用空间的具体值,而是时间或空间增长的快慢。
复杂度分析相对于实际测试的优点 - 仅需理论分析,绿色节能。
- 独立于运行环境,适用于各类平台。
- 能够体现不同数据量下的算法效率。
迭代
迭代(iteration):在满足特定条件下重复执行某段代码,直到该条件不再满足。
迭代实现方式
- for循环
for循环适合预先知道迭代次数时使用。例求解1到n之和:
def for_loop(n:int)->int:
""" for循环"""
res = 0
# 循环求和1,2,...,n-1,n
for i in range(1, n+1): # range(a,b)是左闭右开区间[a,b),故此处是n+1.
res += i
return res
# 输出
res_for = for_loop(5)
print("for_loop:", res_for)
# for_loop: 15
- while循环
while循环与for循环类似,在while循环中,程序每轮都会先检查条件,如果条件为真则继续执行,否则就结束循环。求和代码如下
def while_loop(n:int)->int:
""" while循环"""
res = 0
i = 1 # 初始化条件变量
while i <= n:
res += i # 累加
i += 1