算法综述

246 阅读2分钟

算法:是解决某个问题的确定性指令序列

算法思维:解决问题的思维,从现实问题出发,抽象、形式化描述问题,设计算法,实现算法,运行算法得到实际问题的解

常用算法设计模式

  • 枚举(暴力求解)
  • 分治
  • 回溯
  • 贪心
  • 动态规划
  • 分支限界
  • 概率

算法的性质

  • 输入:有外部提供的量作为算法的输入
  • 输出:算法产生至少一个量作为输出
  • 确定性:组成算法的每条指令是清晰的,无歧义的
  • 有限性:算法中的每条指令的执行次数是有限的,执行每条指令的时间也是有限的

算法的描述方式

  • 自然语言
  • 流程图
  • 数学公式
  • 伪代码
  • 程序设计语言

好的算法应该具备的特质

  • 正确性
  • 有效性(时间有效性、空间有效性)
  • 易实现
  • 易理解
  • 通用性

算法评价

评价一个算法可以去分析其时间复杂度和空间复杂度,一般分析算法的复杂度,指的是这个算法的时间复杂度。 分析算法时间复杂度主要有执行时间、运算步骤和增长量级三种方式

执行时间

  • 优点:简单直接
  • 缺点:
    • 机器依赖:在不同的机器上运行需要的时间不同
    • 缺乏解释:没有回答不同程序运行为什么存在时间差异

运算步骤

统计基本运算的执行次数

  • 优点:机器无关、具有解释力
  • 缺点:
    • 计数复杂
    • 算法复杂度主要考虑规模较大的情形,具体的增长函数不重要,重要的是增长量级

增长量级的近似表示

用f(n)表示问题的运算步骤数量随问题规模n的变化

  • Big-O: 上界O(g(n)) 存在常数c和n0,使得n>=n0时 c g(n) >= f(n)
  • Big-Ω: 下界Ω(g(n)) 存在常数c和n0,使得n>=n0时 c g(n) <= f(n)
  • Big-Θ: 同阶Θ(g(n)) 存在常数c1、c2、n0使得 n >= n0时 c1g(n) <= f(n) <=c2g(n)

增长量级从低到高

  • O(1) 常数
  • O(logn) 对数 底数一般都指2
  • O(n) 线性
  • O(nlogn) 线性对数
  • O(n^2) 平方
  • O(n^k) 多项式
  • O(2^n) 指数
  • O(n!) 阶层