zoukankan      html  css  js  c++  java
  • 时间复杂度

    复杂度分析:衡量一个算法的优劣
    时间:
    大O时间复杂度分析法:
    如何一眼看上去就能知道一段代码的复杂度
    一个算法和一段代码的执行时间和代码行数成正比
    n--代码行数
    O--表示代码对函数f(n)成正向趋势
    T(n)=O(f(n));
    分析方法:
    1.只需要关注循环量最多的一点代码

    2.加法原则:总复杂度等于量级最高的代码复杂度(代码中出现多段循环体)

    3.乘法法则:嵌套代码复杂度等于嵌套内部代码复杂度乘积(循环体出现嵌套时)

    常见都时间复杂度:
    分为两类,一个叫***多项式时间复杂度***:O(1),O(n),O(n^k), n的k次方阶 O(logn) 对数阶 ,O(nlogn) 线性对数阶
    O(m+n) !=O(n),无法确定m和n谁打谁小
    最好,最坏,平均时间复杂度
    最好:一段代码在最有情况下的时间复杂度,一段代码在最差情况下的时间复杂度,O(1),O(n),平均时间复杂度一般与最坏持平,在特殊场景下分析(最好最坏都一样),一般用不到平均时间复杂度


    非多项式时间复杂度:O(2^n),O(n!),当n越来越大的时候,这两者的时间复杂度会急剧增长,因此算法复杂度是以上两者之一
    的算法时效率很低


    空间:算法运行时占用的空间大小
    S(n)=O(f(n)), ( O(1),O(n) 包括几乎所有空间复杂度的情况)
    O(n):关注最大开辟的空间,譬如一次new来开辟新的数组,数组里一个元素,n个元素,取O(n)

     

  • 相关阅读:
    工厂模式
    装饰器模式
    策略模式
    代理模式
    建造者模式
    单例模式
    观察者模式
    JVM运行时数据区
    Export to excel
    C#网络编程(同步传输字符串) Part.2 [转自JimmyZhang博客]
  • 原文地址:https://www.cnblogs.com/hetaoyuan/p/10578570.html
Copyright © 2011-2022 走看看