如何理解O(n)中的O和n

理解

先看两个数学公式

f(n) = 4n + 1000
g(n) = 2n^2 + 5

如果使用O来表示f函数,则为o(4n + 1000);再近一步隐藏细节到小o中,变成O(n);
如果使用O来表示g函数,则为o(2n2 + 5);再近一步隐藏细节到小o中,变成O(n2);
从上面的过程可以看出,大O是一个线性函数。小n是样本的个数。括号内除了小n,保留的是非线性趋势。
我们在比较算法的时间复杂度的时候实际上比较的是括号内的内容是n,logn还是n^2等。
到这里有人可能会想那为什么不能直接用n,logn,n^2来表示时间复杂度呢?
n,logn,n^2只能算作一种趋势,实际上大多数时候我们关心的就是趋势而已,我们并不关心具体的公式是什么,
所以我们把不关心也难以得知的线性部分用大O来表示,把我们关心的部分写到括号内。
这样时间复杂度的表达就兼顾了严谨简约

实际使用

在这里插入图片描述
如图是三种函数的图像,当n足够小的时候,n^2的算法时间复杂度也可能小于n,甚至logn的时间复杂度也可能大于n,这取决于O中隐含的斜率和偏移量。
所以时间复杂度只能作为一种泛化的参考,在实际选择算法时不能光看时间复杂度,要结合样本数,样本特点,并进行实验对比等(如果你的系统真的有必要做算法优化的话)。

本文灵感来自Big O, little n
数学绘制网站desmos

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值