Time Complexity (时间复杂度)

定义

Time Complexity(时间复杂度) 用来定性的描述算法的执行时间的一个函数,更类似于一个耗时的趋势,函数表示为: O(f(n))

公式

T(n) = O(f(n)) 渐进时间复杂度

名词解释

n :问题的规模,重复执行的次数
T(n) :一段程序运行,各种操作代码所执行的总次数
f(n) :存在的某个函数,使得T(n)/f(n)=非零常数,那么f(n)称为T(n)的同数量级函数
O :大O符号,一种符号,表示渐进于无穷的行为

算法中各种代码操作所执行的总次数用T(n)表示,存在某个函数f(n),使得T(n)/f(n)=非零常数,那么f(n)称为T(n)的同数量级函数(类想一下,在坐标轴中,当入参n趋于无穷时,两条曲线的商为常数),即:T(n)=O(f(n)),O(f(n))就是时间复杂度。O符号表示一个渐进常数,在这个函数中可以忽略低阶项和首项系数。

时间复杂度推导原则

  1. 如果运行时间是常数量级,用常数1表示
  2. 只保留时间函数中的最高阶项
  3. 如果最高阶项存在,则省去最高阶项前面的系数(与这个项相乘的常数)
  4. 递归算法的时间复杂度 == 递归总次数*每次递归的次数

常见时间复杂度

  1. 常数阶 O(1)
  2. 对数阶 O(logN)
  3. 线性阶 O(n)
  4. 线性对数阶 O(nlogN)
  5. 平方阶 O(n2)
  6. 立方阶 O(n3)
  7. k次方阶 O(nk) 一般控制k的大小,否则比指数阶更复杂
  8. 指数阶 O(2n) 一般不用,性能太差

按增长率排序:O(1) < O(logn) < O(n) < O(nlogN) < O(n2) < O(n3) < O(nk) < O(2n)

Example

  • 常数阶 O(1)
public void O_1() {
   
	int n = 100;	// 没有入参变量,执行规模永远为1行
	long[] fib = {
   1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值