谈谈算法中的时间复杂度

本文详细解读了时间复杂度在软件开发中的概念,包括如何通过函数f(n)衡量算法效率,渐近时间复杂度的定义,以及如何化简复杂度表达式。重点介绍了常见复杂度的比较和实际案例分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义及作用

在一般开发中,时间复杂度就是用来估算出程序运行的答题时间。这样我们就能知道哪种方法效率更好,可能对于小样本来说都差不太多,但是数据量一大,如量级变成了千万、亿,消耗的时间差距就非常可怕了。

一般假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。其中,大O用来表示上界的,即当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。还要注意的是,一般我们讨论算法的实现以及性能的时候,要记住数据用例的不一样,时间复杂度也是不同的。比如快排算法,在数据量较小的时候,效率反而还不如一般的排序算法。

判断简单的时间复杂度大小及复杂情况化简

对于简单的情况,复杂度大小如下:

O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n^2)平方阶 < O(n^3)(立方阶) < O(2^n) (指数阶)

 

但很多时候,真实的复杂度并不会如此简单,如:

O(3*n^3 + 20*n + 1000) 

这时候就要开始进行化简 

O(3*n^3 + 20*n) //首先去掉常数项
O(n^3 + n) //然后去掉所有的系数
O(n^3) //在数量级足够大的情况下,可以去掉低次项

所以这里的时间复杂度就是O(n^3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值