【cs基础】如何判断算法的好坏

算法复杂度

  • 平时我们说算法的好坏,排除一些软件和硬件上的限制,怎么去衡量这个算法运行的更快呢?这就是Big O notation的作用啦!

Big O notation

  • Big O notation是一种描述述函数渐进行为的理论,说白了,表达算法的增长趋势,一个算法会渐渐走向快速还是缓慢的表达方式。
  • 这种渐进表达有三种记号来表示:O、 Θ 和 Ω 记号法。Θ 记号渐进地给出了一个函数的上界和下界,当只有渐近上界时使用 O 记号,当只有渐近下界时使用 Ω 记号。

  • 譬如:

    T(n)=4n2+2n+2

    当 n 增大到非常大时,n2 项将开始占主导地位 , 一般就用O(n2) 表示该算法的上界表示算法复杂度。

算法复杂度趋势一览


算法的衡量从两个方向出发:时间复杂度和空间复杂度

1. 时间复杂度

  • 算法完成其执行所需的总时间量
  • 但是!算法执行的时间我们很难真实的估计,只能比较算法语句的执行次数,以此比较时间复杂度

2. 空间复杂度

  • 算法完成其执行所需的计算机存储器的总量
  • 说白了,就是程序执行所需要的内存空间:
    1. 指令空间:用于存储已编译版本指令的内存量。
    2. 环境堆栈:在函数调用时存储部分执行函数信息的内存量。
    3. 数据空间:用于存储所有变量和常量的内存量。

怎么做

  • 书读百遍,其义自见。

参考:
http://www.cnblogs.com/gaochundong/p/complexity_of_algorithms.html
http://www.ehcoo.com/complexity.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章