常见问题时间复杂度的计算过程

原创 2015年10月13日 23:18:06

        算法是用系统的方法解决实际问题的策略机制,算法的质量将影响到程序的效率,而时间复杂度则是评判时间复杂度的标准,时间复杂度越小,算法越好,程序执行效率越高,反之,效率越差。

【表示方法】

       大O表示法:

       当且仅当存在正常数c和n0,使得

           T(n)<=cf(n)

       对所有的n>n0成立。T(n)=O(f(n))称为算法的渐进时间复杂度,简称时间复杂度。(f(n)是问题规模n的某个函数)。例如:T(n)= n^2+4n+1,则可以用数学助记符号O(n^2)表示时间复杂度。

     

       分析:(1)f(n)是n足够大时,对T(n)起支配作用的表达式。

                  (2)时间复杂度跟f(n)前面的系数关系不大。 

       

                                                   图1  n的二次方与一次方对比图                                                                            图2  一次方与log2X的对比图


        由图1可明显看出,n^2与n做对比,始终会存在一个点A,前者超过后者,因此起决定作用的是n^2;由图2可以看出,x对比log2x,x起决定作用。

【常见算法复杂度】

        常见的算法设计分为5大类: 

                   

       经典排序算法:

                                                

         算法时间复杂度与算法的构成是紧密结合的,并不是准确的比较或者交换次数,而是一个概数,且在不同的条件下比较或者交换次数是不同的,可分为最坏时间复杂度,最好时间复杂度,平均时间复杂度,默认情况下算的是最坏复杂度。

      1.  归并排序复杂度

                                

      归并排序体现的是分组思想,现采用上面16个数的排序(体现特殊情况)对应一般情况的分析方法:

                 

         根据上面16个数排序的特殊情况来归纳一般情况(n):

           (1)计算每次分组比较+交换次数:n

           (2)共进行了几次分组:

                          

        由上图可以得出,组的个数都是在原来的基础上/2得到的,到1为止,因此,共进行几次分组,即n可以进行几次二分运算,为log2(n).

            (3)总复杂度为:O(n*log2(n))

      2.  0-1背包问题复杂度

        0-1背包问题的实现时嵌套在两个循环里的,具体实现请看上篇博文《动态规划算法》。

        其分两步循环实现:第一步,内层嵌套先判断能不能物品能不能放进包内,共要比较允许的最大重量W次;第二步,外层循环确定共有几个物品,执行n次循环。
   
       因此时间复杂度很清楚为:T(n)=n*w=O(nw)

    3. 快速选择算法复杂度

        复杂比较次数是不确定的,指定的默认值不同,比较次数也不同,复杂度也就不同,如下实例:共分组次数为4,比较次数为:5+3+2+1=11
                                             
                                                 
                                                        
                                                                                                          
          上面是一种复杂的情况,下面举例说明平均复杂度与最坏时间复杂度:
           (1)平均时间复杂度,每次指定的值都会排序到本组中间的情况:

                               
         假设n足够大时,n要远远大于比较的次数,此时,每次分组比较次数(n-2*m-1)就可以看做是n了(m为第几次比较)。n每次取中间值,相当于二分法可以分log2n次,所以平均时间复杂度可以理解为O(nlog2n)。

       (2)最坏时间复杂度, 每次指定的值都排在末尾
                                         
   
       由上图可以得到,比较次数为1+2+3+...n-1=n*(n-1)/2,所以最坏情况下的时间复杂度为O(n^2)。

 【总结】

        时间复杂度的计算过程是由特殊到一般的过程,使用特殊的数值得到普遍的规律,而结果却是一个概数,但这种结果已经足够让我们作为依据评论一个算法的优劣。
       
        同时也让我们明白,算法的执行次数尽管复杂多变,我们只要取平均或最差情况,就能实现自己的目的,只有理解这些模糊数据的存在,才能真正理解算法复杂度。

  研究文档下载地址:http://wenku.baidu.com/view/eb65c8f3a98271fe900ef90e



      


版权声明:本文为博主原创文章,未经博主允许不得转载。

通过一个实例学会时间复杂度的计算

时间复杂度的定义      一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常...
  • zhangliangzi
  • zhangliangzi
  • 2016年02月17日 15:42
  • 4946

如何计算时间复杂度

一、概念 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) 比如:一般总运算次数表达式类似于这样: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a ! =...
  • firefly_2002
  • firefly_2002
  • 2012年09月23日 09:14
  • 205529

有点复杂的数列

题目描述 acndy喜欢做数学题,学了数论以后更是一发不可收拾,他发现一个数列: 给出n,a,b,c的值,他想算出fn模p后的值。 输入 第一行一个数T,为测试数据组数, 每组数据一行,...
  • Coldfresh
  • Coldfresh
  • 2018年02月21日 00:35
  • 6

算法时间复杂度计算方法

一、概念: 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) 比如:一般总运算次数表达式类似于这样: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a...
  • u013372487
  • u013372487
  • 2016年05月30日 15:09
  • 5228

关于计算时间复杂度和空间复杂度

相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。        常用的算法的时间复杂度和空间复杂度 一,求解算法的时间复杂度,其具体步骤是:   ⑴ 找出算法...
  • yangwei282367751
  • yangwei282367751
  • 2016年09月04日 00:09
  • 15470

时间复杂度和空间复杂度详解

没有挤公交来上班过,就不知道生活的压力有多大。 算法的时间复杂度和空间复杂度合称为算法的复杂度。 1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试...
  • booirror
  • booirror
  • 2012年07月02日 00:32
  • 164650

算法的时间复杂度和空间复杂度-总结

算法的时间复杂度和空间复杂度 1、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法...
  • zolalad
  • zolalad
  • 2013年09月20日 16:01
  • 97967

面试题7-2:时间复杂度为O(n)的排序

问题:请实现一个排序算法,要求排序一个公司几万名员工的年龄,要求时间复杂度为O(n)。 思路:要排序的序列元素个数比较大,不适合用传统的排序方法,但问题的要求是排序员工的年龄,也就是说,每个元素都在一...
  • u012724503
  • u012724503
  • 2017年02月09日 00:38
  • 386

时间复杂度题目分析

for(i=1;i
  • huxiaokang1234
  • huxiaokang1234
  • 2016年10月26日 01:01
  • 910

如何计算一个算法的时间复杂度

     学习算法的同学,如果不知道计算一个算法的时间复杂度该如何计算,其实是一件很丢脸的事情。最近选修了高级算法这门课,由于时间紧张,原本就想混过去算了,但是不料考试的时候有40%的题目是计算时间复...
  • xingqisan
  • xingqisan
  • 2008年11月02日 10:27
  • 33289
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:常见问题时间复杂度的计算过程
举报原因:
原因补充:

(最多只允许输入30个字)