算法的效率

影响因素

  1. 算法采用的策略和方案
  2. 编译产生的代码质量
  3. 问题的输入规模
  4. 机器执行指令的速度

算法时间复杂度 T(N)

**T(N) = O(f(n))**
表示随着问题规模 n 的增大, 算法执行时间的增长率和 f(n) 的增长率相同, 
称作算法的渐进时间复杂度, 简称时间复杂度
一般来讲, 随着输入规模 n 的增大, T(n) 增长最慢的算法为最优时间算法
推导攻略:
    - 用常数 1 取代运行时间中的所有加法常数
    - 在修改后的运行次数函数中, 只保留最高阶项
    - 如果最高阶项存在且不是 1, 则去除与这个项相乘的常数
常见时间复杂度比较: O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

算法的空间复杂度 S(n)

S(n) = O(f(n))
n 为问题的规模, f(n) 为语句关于 n 所占存储空间的函数
通常 “时间复杂度” 用来来指运行时间的需求; 
    “空间复杂度” 用来指空间需求