• 数据结构与算法之美04


    空间复杂度分析

    时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。类比一下,空间复杂度全称就是渐进空间复杂度( asymptotic space complexity ),表示算法的存储空间与数据规模之间的增长关系。

    1void print(int n) {
    2  int i = 0;
    3  int[] a = new int[n];
    4  for (i; i <n; ++i) {
    5    a[i] = i * i;
    6  }
    7  for (i = n-1; i >= 0; --i) {
    8    print out a[i]
    9  }
    10}

    跟时间复杂度分析一样,我们可以看到,第 2 行代码中,我们申请了一个空间存储变量 i ,但是它是 常量阶的,跟数据规模 n 没有关系,所以我们可以忽略。第 3 行申请了一个大小为 n 的 int 类型数 组,除此之外,剩下的代码都没有占用更多的空间,所以整段代码的空间复杂度就是 O(n)。

    常见空间复杂度: O(1) 、 O(n)、 O(n^2)

    小结:

    复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的 增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。

    复杂度分析法则

    1 )单段代码看高频:比如循环。

    2 )多段代码取最大:比如一段代码中有单循环和多重循环,那么取多重循环的复杂度。

    3 )嵌套代码求乘积:比如递归、多重循环等

    4 )多个规模求加法:比如方法有两个参数控制两个循环的次数,那么这时就取二者复杂度相加。

    常用的复杂度级别?

    多项式阶:随着数据规模的增长,算法的执行时间和空间占用,按照多项式的比例增长。包括, O(1) (常数阶)、 O(logn) (对数阶)、 O(n) (线性阶)、 O(nlogn) (线性对数阶)、 O(n^2) (平 方阶)、 O(n^3) (立方阶)

    非多项式阶:随着数据规模的增长,算法的执行时间和空间占用暴增,这类算法性能极差。包括, O(2^n) (指数阶)、 O(n!)

  • 相关阅读:
    FPGA开发全攻略——FPGA选型
    FPGA开发全攻略——FPGA开发基本流程
    希尔伯特变换的物理意义
    无线通信方式
    FPGA DDR3调试
    FPGA调试光纤模块
    FPGA FIFO深度计算
    Xilinx FPGA LVDS应用
    电源设计注意事项
    波特图与零极点
  • 原文地址:https://www.cnblogs.com/fenqinearl/p/10853009.html
Copyright © 2020-2023  润新知