zoukankan      html  css  js  c++  java
  • 复杂度分析

    大 O 复杂度表示法

    从CPU的角度来看,每一段代码都执行着类似的操作:读数据-运算-写数据

    所有代码的执行时间T(n)与每行代码的执行次数n成正比

    • 表示代码执行的时间
    • n 表示数据规模的大小
    • 表示每行代码执行的次数总和
    • 公式中的 O,表示代码的执行时间 表达式成正比

    这里注意大 O 时间复杂度表示法,不代表具体代码真正的执行时间

    而是代表代码执行时间随数据规模增长的变化趋势

    所以,也被叫做 (asymptotic time complexity)渐进时间复杂度

    简称时间复杂度

    时间复杂度分析

    1. 只关注循环执行次数最多的一段代码

    注意大O这种复杂度表示方法只是表示一种变化趋势

    1. 加法法则:总复杂度等于量级最大的那段代码的复杂度

    2. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

    几种常见时间复杂度实例分析

    image.png

    O(1)

    • 一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是O(1)

    O(logn)、O(nlong)

    • 对数阶时间复杂度非常常见,也是最难分析的

    例:

    i=1;
    while (i <= n) {
      i = i * 2;
    }
    

    这里既是 所以 这段代码的时间复杂度就是O(logn)

    O(m+n)、O(m*n)

    • 这里表示复杂度由两个数据的规模来决定

    空间复杂度

    时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系

    空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),

    表示算法的存储空间与数据规模之间的增长关系

    时间复杂度分析

    • 最好情况时间复杂度(best case time complexity)
    • 最坏情况时间复杂度(worst case time complexity)
    • 平均情况时间复杂度(average case time complexity)
    • 均摊时间复杂度(amortized time complexity)-就是一种特殊的平均时间复杂度
  • 相关阅读:
    【bzoj1010】[HNOI2008]玩具装箱toy
    bzoj 3173
    bzoj 1179
    bzoj 2427
    bzoj 1051
    bzoj 1877
    bzoj 1066
    bzoj 2127
    bzoj 1412
    bzoj 3438
  • 原文地址:https://www.cnblogs.com/custer/p/11650682.html
Copyright © 2011-2022 走看看