时间复杂度分析

简单来说,大O描述的是算法的运行时间和输入数据之间的关系

n代表数据的个数,时间复杂度中描述的是n趋近于无穷的情况。


O(1) 表示消耗的时间与数据的规模是没有关系的。

O(n) 说明这个算法的运行时间与数据的个数(n)呈线性关系

实际运行时间 T = c1*n + c2,c1和c2是常数,在不同的算法中是不确定的。

所以并不一定时间复杂度为 O(n)的算法运行时间就比O(n^2)的算法快:

可能 O(n):T = 2000n + 10000             O(n^2):T = 1n*n + 0

这时,当数据量小于2000时,明显O(n^2)的算法要快。


均摊复杂度:

在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上。基本上均摊结果就等于低级别复杂度。

例如,数组每次插入一个数的时间复杂度是O(1),当数组满了之后进行自动扩容一倍的时间复杂度是O(n)。如果按最坏情况分析,每次插入都进行扩容,那么插入操作的时间复杂度就是O(n)。

如果按均摊复杂度分析,比如一开始数组容量为4,那么进行4次插入操作消耗了 4 个时间。当插入第5个数时,数组扩容消耗了 4+1 个时间。也就是说,5次插入操作消耗了 9 个时间,平均每次操作的时间为 2。当数组容量为n时,n+1次插入操作触发扩容,总共消耗 2n+1 个时间。

2n+1 / n+1 平均每次操作消耗两个时间。
均摊计算后,时间复杂度为O(1),它的耗时与数据量没有关系。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值