数据结构第二章:算法(下)

 

1、常数阶:

       (1)首先要知道,高斯算法的时间复杂度不是O(3),而是O(1)。根据我们推导大O阶的方法,第一步就是把常数项3改为1。而且没有最高阶项。所以这个算法的时间复杂度为O(1)。

               如:

                                            int sum=0,n=100;

                                              sum=(1+n)*n/2;

                                             printf("%d",sum);

 

       答:代码只是3次,4 次......执行的差异,这种与问题的大小(n的值)无关,执行恒定时间的算法,称之为具有O(1)的时间复杂度,又叫常数阶

注意:不管常数是多少,我们都记作O(1)。

 

    (2)对于分支结构而言,无论是真是假,执行的次数都是恒定的,不受n的影响,所以单纯的分支结构(不包含在循环结构中),其时间复杂度也是O(1)。

 

 

2、线性阶:

        确定某个算法的阶次,我们常常需要确定某个特定语句某个语句集运行的次数。因此,我们要分析算法的复杂度,关键就是要分析循环结构的运行情况

          如:

                              int i;

                              for(i=0;i<n;i++)

                              {

                                   /*时间复杂度为O(1)的程序步骤序列*/

                              }

 

        答:它的循环的时间复杂度为O(n),因为循环体中的代码要执行n次。

 

 

3、对数阶:

             如:

                                     int count=1;

                                     {

                                          count =count*2;

                                          /*时间复杂度为O(1)的程序步骤序列*/

                                     }

 

          答: 有多少个2相乘后大于n,则会退出循环。则2^x=n,所以这个循环的时间复杂度为O(logn)。

 

 

4、平方阶:

          简单来说就是循环中带有循环。

 

  比如:第一层循环要执行n次第二层循环要执行n次,所以它的时间复杂度为O(n*n)。

               第一层循环执行了n次第二层循环只想了m次,所以它的时间复杂度为O(n*m)。

 

总之,计算时间复杂度就先将代码执行的次数相加,再用大O推导来进行计算。

 

 

5、常见的时间复杂度

    O(1) O(logn) <O(n)<  O(nlogn)< O(n^2)<O(n^3) <O(2^n) <  O(n!) <O(n^n)

  常数阶      对数阶   线性阶    nlogn阶   平方阶       立方阶       指数阶   阶乘阶    n^n阶

 

 

6、最坏情况与平均情况:

      (1) 最坏情况运行时间是一种保证,就是运行时间不会再坏了。在应用中,这是一种最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏的运行时间

 

      (2)平均运行时间是所有情况中最有意义的,因为它是期望的运行时间

 

      (3)对算法的分析,一种方法是计算所有情况的平均值,这种时间复杂度的计算方法称为平均时间复杂度。另一种方法是计算最坏情况下的时间复杂度,这种方法称为最坏时间复杂度 一般没有特殊说明的情况下,都是指最坏时间复杂度。

 

 

7、算法空间复杂度:

      (1) 算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n))其中n为问题的规模,f(n)为语句关于n所占存储空间的函数

 

      (2)一般情况下,一个程序在计算机上执行时,除了需要存储程序本身的指令、常数、变量和输入数据外,还需要存储对数据操作的存储单元

        a、若输入数据所占空间只取决于问题本身和算法无关。这样只需要分析该算法在实现时所需的辅助单元即可。

        b、若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称次算法为原地工作,空间复杂度为O(1)

 

                  使用“时间复杂度”来指运行时间的需求,使用“空间复杂度”来指空间需求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值