【数据结构】1-3 算法的时间复杂度
数据结构知识点合集:数据结构与算法
• 知识点
• 时间复杂度的定义
1、算法时间复杂度
事前预估算法时间开销T(n)与问题规模 n 的关系(T 表示 “time”)
2、语句频度
算法中语句的执行次数
对于以上算法,语句频度:
① ——1次 ② ——3001次 ③④ ——3000次 ⑤ ——1次
T(3000) = 1 + 3001 + 2*3000 + 1
时间开销与问题规模 n 的关系:
T(n)=3n+3
大O记号表示算法的一种渐近时间复杂度;大O表示“同阶”,同等数量级。即:当 n->∞时,二者之比为常数
结论1:可以只考虑阶数高的部分
结论2:问题规模足够大时,常数项系数也可以忽略
• 时间复杂度的计算规则
1、加法规则
T(n) = T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n), g(n)))
多项相加,只保留最高阶的项,且系数变为1
2、乘法规则
T(n) = T1(n)×T2(n) = O(f(n))×O(g(n)) = O(f(n)×g(n))
多项相乘,都保留
3、常见时间复杂度的比较
O(1) < O(log2n) < O(n) < O(nlog2n) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
常<对<幂<指<阶
4、顺序执行的代码只会影响常数项,可以忽略
5、只需挑循环中的一个基本操作分析它的执行次数与 n 的关系即可
6、如果有多层嵌套循环,只需关注最深层循环循环了几次
例:计算以下算法的时间复杂度 T(n):
设最深层循环的语句频度(总共循环的次数)为 x,则由循环条件可知,循环结束时刚好满足 2^x > n
x = log_2(n) + 1
T(n) = O(x) = O(log_(2)n)
• 三种常用的时间复杂度
最坏时间复杂度:最坏情况下算法的时间复杂度
平均时间复杂度:所有输入示例等概率出现的情况下,算法的期望运行时间
最好时间复杂度:最好情况下算法的时间复杂度