算法复杂度
- 平时我们说算法的好坏,排除一些软件和硬件上的限制,怎么去衡量这个算法运行的更快呢?这就是Big O notation的作用啦!
Big O notation
- Big O notation是一种描述述函数渐进行为的理论,说白了,表达算法的增长趋势,一个算法会渐渐走向快速还是缓慢的表达方式。
这种渐进表达有三种记号来表示:O、 Θ 和 Ω 记号法。Θ 记号渐进地给出了一个函数的上界和下界,当只有渐近上界时使用 O 记号,当只有渐近下界时使用 Ω 记号。
譬如:
T(n)=4n2+2n+2
当 n 增大到非常大时, n2 项将开始占主导地位 , 一般就用 O(n2) 表示该算法的上界表示算法复杂度。
算法的衡量从两个方向出发:时间复杂度和空间复杂度
1. 时间复杂度
- 算法完成其执行所需的总时间量
- 但是!算法执行的时间我们很难真实的估计,只能比较算法语句的执行次数,以此比较时间复杂度
2. 空间复杂度
- 算法完成其执行所需的计算机存储器的总量
- 说白了,就是程序执行所需要的内存空间:
- 指令空间:用于存储已编译版本指令的内存量。
- 环境堆栈:在函数调用时存储部分执行函数信息的内存量。
- 数据空间:用于存储所有变量和常量的内存量。
怎么做
- 书读百遍,其义自见。
参考:
http://www.cnblogs.com/gaochundong/p/complexity_of_algorithms.html
http://www.ehcoo.com/complexity.html