算法效率评估
算法层面,我们无非解决两个问题
- 找到问题的解法: 最重要的一点是,他首先能解答问题。
- 寻求最优解法: 其次,他需要尽可能的优化,以达到最优的性能, 一般从时间和空间两个维度来评估, 但往往在实际中,我们需要做权衡。
所以,在效率评估中,我们主要关注的是 时间维度 和 空间维度。
- 时间维度: 评估算法执行的效率,一般用时间复杂度来表示。
- 空间维度: 评估算法执行时所占用的内存空间,一般用空间复杂度来表示。
最终,我们需要在时间和空间维度上找到一个平衡点,以达到最优的性能。
效率评估的两种方式,一种是 事后统计法, 一种是 事前分析法。
事后统计法
事后统计法,顾名思义,就是通过实际运行程序来统计执行时间,比较偏实际。
- 优点: 直观, 真实
- 缺点: 需要实际运行, 受环境影响大, 结果不准确
事前分析法
事前分析法,顾名思义,就是通过分析代码来预估执行时间,比较偏理论。
- 优点: 不需要实际运行, 结果准确
- 缺点: 需要分析代码, 结果不准确
当我们一般的评估的话,实际上还是事前分析法, 具体而言的话 复杂度分析。
注意,这里并非分析出具体执行的时间,而是通过一种相对的复杂度来评估执行时间, 如 O(1), O(n), O(n^2) 等。
复杂度分析的好处在于“量执行某个算法所需的时间和空间资源,对比不同算法之间的效率”