• 时间复杂度和空间复杂度


    时间复杂度和空间复杂度

    • 时间复杂度:是指执行当前算法所消耗的时间。

    • 空间复杂度:是指执行当前算法需要占用多少内存空间。

    作用:

    ​ 衡量一个算法的优劣性,有些时候需要在二者之间权衡,进行取舍,寻找二者的平衡点。

    时间复杂度计算:

    ​ 大O表示法:T(n) = O(f(n)) ,其中f(n) 表示每行代码执行次数之和 。

    eg:

    events = pygame.event.get()   #执行一次
    for event in events: #执行一次
    if event.type in (QUIT,KEYDOWN):  #执行N次
           sys.exit()

    ​ 执行的总次数f(n)=n+2 n逐渐变大后,n+2就近似于n, 所以T(n) = O(f(n))=O(n)

    时间复杂度量级 :

    ​ 从上到下复杂度逐渐变大

    • 常数阶O(1)

    • 对数阶O(logN)

    • 线性阶O(n)

    • 线性对数阶O(nlogN)

    • 平方阶O(n²)

    • 立方阶O(n³)

    • K次方阶O(n^k)【n的k次方,符号不会敲】

    • 指数阶(2^n)

    常数阶O(1)

    ​ 代码只要是没有循环等复杂结构,那这个代码的时间复杂度就都是O(1)

    对数阶O(logN)

    i=1
    while i<n:  #执行x次后,i>n,结束循环,i=(i*2)^x,i初始为1,所以i=2^x,我们将最终的i近似于n,就有 x=log2n[公式敲不出来]
       i*=2  
    线性对数阶O(nlogN)

    ​ 将对数阶O(logN)执行n遍,就是线性对数阶O(nlogN)

    平方阶O(n²)

    ​ 果把 O(n) 的代码再嵌套循环一遍,它的时间复杂度就是 O(n²) 了。

    空间复杂度

    ​ 对一个算法在运行过程中临时占用存储空间大小的一个量度 。

    ​ 空间复杂度比较常用的有:O(1)、O(n)、O(n²)

    ​ 算法执行所需要的临时空间不随着某个变量n的大小而变化 ,空间复杂度 S(n) = O(1)

    空间复杂度其实在这里更多的是说一下这个概念,因为当今硬件的存储量级比较大,一般不会为了稍微减少一点儿空间复杂度而大动干戈,更多的是去想怎么优化算法的时间复杂度。

    所以我们在日常写代码的时候就衍生出了用「空间换时间」的做法,并且成为常态

  • 相关阅读:
    【Linux开发】Linux下jpeglib库的安装详解
    【Linux开发】Linux下jpeglib库的安装详解
    【Linux开发】jpeglib使用指南
    【Linux开发】jpeglib使用指南
    【Linux开发】为qt-embedded添加jpeg库的交叉编译方法for arm
    【Linux开发】为qt-embedded添加jpeg库的交叉编译方法for arm
    Windows 7 64bit上安装Oracle Database 12c [INS-30131] 错误的解决方法
    Log4j 日志记录
    如何根据Ip获取地址信息--Java----待整理完善!!!
    Struts如何获取客户端ip地址
  • 原文地址:https://www.cnblogs.com/robot-python/p/11763177.html
Copyright © 2020-2023  润新知