zoukankan      html  css  js  c++  java
  • 数据结构与算法(一):时间与空间复杂度

    1,渐进时间复杂度

    T(n)=O(F(n)) 

    F(n)表示解决问题的函数,T(n)表示函数F(n)的增长率

    表示随问题规模n的增加,算法执行时间增长率与F(n)的增长率相同

    2,时间算法类型

    多项式时间算法:O(1)<O(logn)<O(n)<O(nlogn)<O(n²)

    指数时间算法:O(2ⁿ)<O(n!)<O(nⁿ)

    3,时间复杂度具体分析

    假定每条语句执行时间为单位时间,时间复杂度是所有语句重复执行次数之和

    eg:

    def complexity(n,a,b,c):
        #这里执行代码时间复杂度为O(1)
    for i in range(n):#这行代码时间复杂度为O(n+1)
    #这里执行代码时间复杂度为O(n)
    for j in range(n):#这行代码时间复杂度为O(n*(n+1))
    #这里执行代码时间复杂度为O(n*n) a[i][j]=0
    for k in range(n):#这行代码时间复杂度为O(n*n*(n+1))
    #这里执行代码时间复杂度为O(n*n*n) a[i][j]=b[i][j]*c[i][j]

    加和得:T(n)=2n*n*n+3n*n+2n+1

    但实际分析中并不考虑这么复杂,只考虑最内层嵌套循环的时间复杂度也就是O(n*n*n)

    4,时间复杂度的乘法规则

    T(n,m)=T1(n)*T2(m)=O(f(n)*g(m))

    eg.

    for i in range(n):
        for j in range(i,n):
            if a[i]>a[j]:
                a[j],a[i]=a[i],a[j]

    第二层for循环共执行n次,每次其内部时间复杂度各不相同,全部加和如下:

    (n)+(n-1)+(n-2)+(n-3)+...+2+1=(n+1)/2*n

    时间复杂度为O(n²)

    5,时间复杂度的加法规则

    T(n,m)=T1(n)+T2(m)=O(max(f(n),g(m)))

    就是两个并列函数(同一层级)选取一个最耗费性能的作为时间复杂度

    6,二分查找时间复杂度见 数据结构与算法(二)

    7,空间复杂度(待更)

    可以直接留言交流问题或想法,每天都会看
  • 相关阅读:
    centos 7安装gitlab及使用
    jenkins配置自动执行sql脚本
    zabbix监控mysql主从同步
    linux服务器通过mailx邮件发送附件到指定邮箱
    监控pos收银机
    elk安装与配置
    zabbix实时监控mysql业务数据
    Build Eclipse plug-in for Hadoop
    io 一不小心 关闭不住的偶
    hdu 1059二进制优化背包问题
  • 原文地址:https://www.cnblogs.com/shitianfang/p/12390122.html
Copyright © 2011-2022 走看看