算法与数据结构的复杂度分析方法-时间、空间复杂度分析方法

本文探讨了复杂度分析的重要性,特别是在大数据环境下,解释了大O时间复杂度分析法的基本原理和常见时间复杂度等级,包括O(1), O(logn), O(n), O(nlogn)等。通过实例展示了如何使用大O表示法评估算法效率,并介绍了复杂度分析的法则。
摘要由CSDN通过智能技术生成

1、为什么要有复杂度分析方法?

        我们可以通过运行代码,对代码的运行时间、空间占用情况进行监控统计,从而得出代码的运行效率,这样看来复杂度分析似乎是没有必要的,事实上这个观点在特定条件是这样的,这是统计学上的时候统计方法,它有着很大的局限性,它受到测试环境的直接影响比较大, 不够客观,并且当数据量巨大的情况下就不可能再采用这个方法来进行评判算法效率,所以我们需要有一套不运行代码也能够对我们写出的算法效率进行预估评判的方法,也是就时间、空间复杂度分析方法。

2、大O时间复杂度分析法

        算法的执行效率粗略讲就是算法的运行时间的多少。那么我们怎么用肉眼来估算一段的代码的执行时间呢,充满智慧的前人给了我们一个很好办法,我们虽然不知道cpu执行一句代码需要花费的具体时间,但是可以知道的是cpu执行一句代码的时间是有限且短暂的,那么我们可以假设cpu执行每一句代码的时间都是固定的一个单位时间unit_time,通过对执行代码的数量进行统计就能大概估算出算法的执行时间,就能进行粗略的评估了。那么具体怎么做呢?请看以下代码:

int f1(int n) {  
     int sum = 0;  
     int i = 1;   
    for (; i <= n; ++i) {   
      sum = sum + i;   
    }  
     return sum; 
}

        第二、三行代码各执行1次,总计执行了2*unit_time,第四、五行各执行了n次,总计执行了2n*unit_time,所以上面的代码就执行时间为(2n+2)*unit_time。代码的执行时间T(n)与每一行的代码执行次数Of(n)成正比。

        按照这种思路,前人总结出了一个公式:T(n)=Of(n)

         T(n)表示代码执行时间,f(n)表示每行代码执行次数的综合,O表示代码执行时间T(n)与代码执行次数f(n)成正比关系。这就是大O时间复杂度表示法。

        大O时间复杂度其实并不具体表示代码的执行时间,只是表示代码执行时间随代码规模增长的变化趋势,所以也叫做渐进时间复杂度,简称时间复杂度。

        当n很大的时候,常量、低阶和系数对增长趋势影响可以忽略,所以通常只需要记录一个最大量级就可以了,所以前面的算法复杂度T(n)=Of(2n+2)记作T(n)=O(n)。

        复杂度分析遵循三个法则:只需要关注执行次数最多的一段代码、加法法则:总复杂度等于量级最大的那段代码的复杂度、乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积。

3、几种常见的时间复杂度(按数量级递增,通常越往后,效率越低):

        O(1)、O(logn)、O(n)、O(nlogn)、O(n^{2})...O(n^{k})、O(2^{n})、O(n!)

   

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值