02-时间复杂度

未匹配的标注

算法的时间复杂度#

定义: 事前预估算法时间开销 T (n) 与问题规模 n 的关系(T 表示 “time”)

规则:

问题: T (n) = 3n + 3 (这个表达式如何简化?)
= O(n)

  • 加法规则:T (n) = T1 (n) + T2 (n) = O (f (n)) + O (g (n)) = O (max (f (n), g (n))) (多项相加,只保留最高阶的项,且系数变为 1)
  • 乘法规则:T (n) = T1 (n)×T2 (n) = O (f (n))×O (g (n)) = O (f (n)×g (n))(多项相乘,都保留 )
  • 算法好坏:O (1) < O (log2n) < O (n) < O (nlog2n) < O (n^2) < O (n^3) < O (2^n) < O (n!) < O (n^n)(口诀:常对幂指阶)

02-时间复杂度

问题: 代码很长,如何算复杂度?

结论#

  1. 顺序执行的代码,常数项可以被忽略
  2. 只需挑循环中的一个基本操作分析它的执行次数与 n 的关系即可
  3. 如果有多层嵌套循环,只需关注最深层循环,循环了几次

其他#

  • 数量级仅需考虑循环内,最深层嵌套的部分
  • 最坏时间复杂度:最坏情况下算法的时间复杂度
  • 平均时间复杂度:所有输入示例等概率出现的情况下,算法的期望运行时间
  • 最好时间复杂度:最好情况下算法的时间复杂度
  • 一般只考虑最坏和平均复杂度

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~