1. 重要特性
    1. 有穷性
      1. 执行有穷步后结束
      2. 每一步都可在有穷时间内完成
    2. 确定性
      1. 每一条指令必须有确切含义
    3. 可行性
      1. 算法中描述的操作都是可以通过已实现的基本运算有限次来实现
    4. 输入
      1. 零个或多个输入
    5. 输出
      1. 一个或多个输出
  2. “好”的算法考虑的目标
    1. 正确性
      1. 能够正确解决问题
    2. 可读性
      1. 助于人们理解
    3. 健壮性
      1. 输入非法数据时,算法也能适当的作出反应或进行处理
    4. 效率与存储质量需求
      1. 执行时间
      2. 执行过程中所需的最大存储空间
  3. 效率度量
    1. 时间复杂度
      1. 频度:某语句在算法中被执行的次数
      2. T(n)=算法中所有语句频度之和
      3. 主要分析T(n)的数量级
      4. 记为T(n)=O(f(n))
      5. 最坏时间复杂度
        1. 最坏情况下,算法的时间复杂度
      6. 最好时间复杂度
        1. 最好情况下,算法的时间复杂度
      7. 平均时间复杂度
        1. 所有输入实例在等概率出现的情况下,算法的期望运行时间
      8. 分析时间复杂性的规则
        1. 加法规则
          1. T(n)=T1(n)+T2(n) =O(f(n))+O(g(n))=O(max(f(n),g(n)))
        2. 乘法规则
          1. T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))
      9. 常见的时间复杂度
        1. O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
    2. 空间复杂度
      1. 算法所耗费的存储空间
      2. 记为S(n)=O(g(n))
      3. 只分析除输入和程序之外的额外空间
      4. 原地工作
        1. 算法所需的辅助空间时常量,即S(n)=O(1)