3.算法的渐进分析

本文介绍了算法分析中的渐进时间复杂度和大O表示法,探讨了如何通过分析程序执行频度来评估算法效率。通过实例解释了大O表示法在计算算法执行时间和空间复杂度中的应用,强调了在比较算法时关注数量级的重要性。
摘要由CSDN通过智能技术生成

算法的渐进分析(asuymptotic algorithm analysis)
简称算法分析。算法分析直接与它所求解的问题的规模n有关,因此,通常将问题规模作为分析的参数,求算法的时间和空间开销与问题规模n的关系。

渐进的时间复杂度

计算程序执行频度的目的是相比较两个或多个完成相同功能的程序的时间复杂度,并估计但问题规模变化时,程序的运行时间如何随之变化。

要想确定一个程序的准确的执行频度有时是非常困难的,而且也不是很必要。因为程序执行频度这个概念本身就不是一个精确的概念。如赋值语句x=a和x=a+b*(c-d)-e/f居然有相同的执行频度。

由于执行频度不能确切地反映运行时间,所以用精确的程序执行频度来比较两个程序,其结果不一定有价值。

如程序1-20所示递归求和算法的执行频度为2n+2,如果把它改成非递归程序,其语句执行频度反而是2n+3,比递归程序的运行时间还要多,这是不合理的。

因此,只要给出算法的执行频度的数量级,从n增长过程中分析算法执行次数增大的数量级,即可达到分析的目的。

大O表示

在多数情况下,只要得到一个估计值就足够了。若没有问题的规模为n,程序的时间复杂度为T(n),当n增大时,T(n)也随之变大。可是T(n)将如何精确地变化,需要分析程序内部结构,使用大O表示法描述该程序时间复杂度的估计值。

大O表示法的一般提法是:当且仅当存在正整数c和n0,使得T(n)≤cf(n)对所有n≥n0成立,则称该算法的时间增长率在O(f(n))中,记为T(n)=O(f(n))。

就是说,随着问题规模n逐步增大,算法的时间复杂度也在增加。从数量级大小考虑,算法的程序语句的执行次数(是n的函数)是最坏情况下存在一个增长的上限,即cf(n),即算法的增长率的上限为O(f(n)。

[例 1-21] 考察f(n)=3n+2。当n≥2时,3n+2≤3n+n=4n,所以f(n)=O(n),f(n)是一个变化的函数。

[例 1-22] 考察f(n)=10n²+4n+2.当n≥2时,有10n²+4n+2≤10n²+5n,当n≥5时,有5n≤n²,因此,对于n≥5,f(n)≤10n²+n²=11²,f(n)=O(n²)。

[例 1-23] 考察f(n)=6×2^n+n²。当n≥4,有n²≤2 ^n,所以对于n≥4,有f(n)≤6×2 ^n+2 ^n=7×2 ^n,因此f(n)=O(2 ^n).

[例 1-24] 考察f(n)h=9。当n0-0,c=9,即可得到f(n)=O(1)。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值