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,空间复杂度(待更)

    可以直接留言交流问题或想法,每天都会看
  • 相关阅读:
    期货结算 期货算法公式
    c# websocket 服务端,客户端 兼容低版本IE,支持超长数据传输 附源码
    翻译API translate api 翻译文档api 百度翻译
    asp.net c# 网页 导出excel 多表格 多个sheet
    创建单线程单元 asp.net下使用WebBrowser
    c++ 修改内存
    c++ int to byte
    webservice 第一节 .net SoapHeader验证
    myeclipse maven编译出错
    java用正则表达式获取domain
  • 原文地址:https://www.cnblogs.com/shitianfang/p/12390122.html
Copyright © 2011-2022 走看看