zoukankan      html  css  js  c++  java
  • 时间复杂度和空间复杂度简述

      定义:一个算法中的语句执行次数称为 语句频度 或 时间频度;

      约定:检验算法的效率,主要考虑 最坏时间复杂度平均时间复杂度 一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度

    1、时间复杂度

      一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。

      在时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但是它的变化是有规律的,所以引入时间复杂度这个概念。一般情况下,算法中的基本操作重复次数的是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

      计算时间复杂度

      (1) 如果算法的执行时间不随着问题的规模n的增长而增长,即使算法中有上千条语句,执行时间也只是一个比较大的常数。此类算法的时间复杂度为O(1);

       按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),..., k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

    1 i = 100000;
    2 while(i--) {
    3   printf("hello");
    4 }

      解答:

      这个算法循环100000次,虽然它运行次数非常多,但是主要执行的第三行的执行时间是常数值,所以他的时间复杂度为常数阶O(1);

      (2) 当有多个循环嵌套时,算法的时间复杂度是由嵌套层数最多的循环语句的语句频度决定的

    1 x=0; 
    2 for(i=1;i<=n;i++) 
    3     for(j=1;j<=i;j++)
    4        for(k=1;k<=j;k++)
    5           x++; 

      这个算法中主要执行的是第5行,它的执行时间是常数值,但是它上面有三层循环,每层每次分别执行是(从最外层到内) [(n-1) ],[(n-1)+(n-2) ....],[(n-1-1)+(n-2-1) ....] 次,所以该算法的时间复杂度为O(n3+ 剩余低次项) ≈O(n3);

      PS: 简单的计算方式(只能参考): 一个循环为n,一个嵌套是n+1,并列时是+n,最后结果取最大项;

    2、空间复杂度

      一个程序的空间复杂度是指运行完一个程序所需内存的大小。

      (1) 固定部分。这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
      (2) 可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。
      一个算法所需的存储空间用f(n)表示。S(n)=O(f(n)) 其中n为问题的规模,S(n)表示空间复杂度。
  • 相关阅读:
    Chapter 03Using SingleRow Functions to Customize Output(03)
    Chapter 03Using SingleRow Functions to Customize Output(01)
    Chapter 04Using Conversion Functions and Conditional ExpressionsNesting Functions
    Chapter 04Using Conversion Functions and Conditional ExpressionsGeneral Functions
    Chapter 11Creating Other Schema Objects Index
    传奇程序员John Carmack 访谈实录 (zz.is2120)
    保持简单纪念丹尼斯里奇(Dennis Ritchie) (zz.is2120.BG57IV3)
    王江民:传奇一生 (zz.is2120)
    2011台湾游日月潭
    2011台湾游星云大师的佛光寺
  • 原文地址:https://www.cnblogs.com/xiong233/p/6704846.html
Copyright © 2011-2022 走看看