算法基础-函数渐近

前往我的主页以获得更好的阅读体验算法基础-函数渐近 - DearXuan的主页icon-default.png?t=M276https://blog.dearxuan.com/2022/01/24/%E7%AE%97%E6%B3%95%E5%9F%BA%E7%A1%80-%E5%87%BD%E6%95%B0%E6%B8%90%E8%BF%91/

渐近等价

考虑函数: f(x)=x²+4x

当x→∞时,该函数可以看作x平方与它的高阶无穷小o(x²)之和,即

于是我们称f(x)和x²是渐近等价的,设g(x)=x²,那么我们可以用下面的符号表示渐进等价

 更一般地,如果存在两个函数f(x)和g(x),使得下面式子成立

就称f(x)和g(x)渐进等价

你也可以用极限的方法来判断两个函数是否渐近等价

我们可以轻而易举地得到一个结论:f(x)总是跟自己渐近等价 

渐近上界

若对于函数 f(n),g(n),存在c和k,使得

即从k开始,f(n)永远无法超过cg(n),则称g(n)为f(n)的渐近上界,写作

注意O(g(n))表示的是一个集合,它代表了所有以g(n)为渐近上界的函数,此处的等于号是用于指出f(n)是所有以g(n)为渐近上界的函数里的一元

下面的图片可以帮助你更好的理解f(n)与g(n)的关系

若选取 c=5 ,则当x>1时,f(n)<5g(n)

同样的,我们也可以轻易得到一个结论,f(x)总是自己的渐近上界

渐近时间复杂度

设有下面一段函数

for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){
        swap(i,j);
    }
}

外循环共执行了n次,内循环共执行了i次,所以总共执行次数为

如果我们把代码改成如下所示

for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){
        execute1(i,j);
        execute2(i,j);
        execute3(i,j);
        execute4(i,j);
    }
}

那么此时算法执行命令的总次数就翻了4倍

随着n的逐渐增大,这两个算法所用时间的增长规模是相似的,并且我们并不需要特别高的精度

因此我们可以用算法执行时间 t(n) 的渐近上界 f(n) 来表示一个算法的效率

在渐近时间复杂度中,我们只关心执行时间的增长规模,而不关心具体数字,显然以下两个函数的规模是一致的

因此我们需要对渐近时间复杂度进行化简

函数推导

f(n)=O(g(n))Λg(n)=O(h(n))→f(n)=O(h(n))

根据定义,我们得到

合并,得到

命题得证

f(x)~g(x)→O(f(x))=O(g(x))

我们设 h(x) = O(f(x)),由渐近等价得定义得

由无穷小定义可得,对于任意 ε>0,总存在N,使得下列不等式成立

 取 ε=1,便得到

替换掉f(x),得到

命题得证

其它结论

通过上面两个结论,再利用其它高等数学知识,我们便可以推出下面的结论

因此,在计算渐近时间复杂度时,若出现多项式,我们可以遵守以下准则

  1. 只保留最高阶的项
  2. 最高阶的项系数为1

例如: O(4n³+2n²+9)=O(n³) 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
渐近复杂度(big-Θ)是一种用于描述算法运行时间或空间复杂度的记号。它表示算法在最坏情况下的上界和下界,即它给出了算法的上限和下限。 假设有一个函数 f(n),其中 n 是输入大小。如果存在两个正常数 c1 和 c2,以及一个正整数 n0,使得对于大于等于 n0 的所有 n,都有 c1*g(n) ≤ f(n) ≤ c2*g(n),其中 g(n) 是另一个函数。那么我们可以说 f(n) 的渐近复杂度为 Θ(g(n))。 简而言之,渐近复杂度描述了算法的运行时间或空间需求与输入大小的关系。渐近复杂度大致分为三种情况:最好情况、平均情况和最坏情况。最好情况表示在最理想的输入情况下算法的运行时间;平均情况表示在平均输入情况下算法的运行时间;最坏情况表示在最糟糕的输入情况下算法的运行时间。 常见的渐近复杂度包括: - 常数复杂度(O(1)):算法的运行时间不随输入大小而变化。 - 线性复杂度(O(n)):算法的运行时间与输入大小成线性关系。 - 对数复杂度(O(log n)):算法的运行时间与输入大小的对数关系。 - 线性对数复杂度(O(n log n)):算法的运行时间与输入大小的对数关系乘以线性因子。 - 平方复杂度(O(n^2)):算法的运行时间与输入大小的平方成正比。 - 指数复杂度(O(2^n)):算法的运行时间与输入大小的指数关系。 渐近复杂度分析可以帮助我们评估算法的效率和可行性,并选择适合问题规模的算法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dear_Xuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值