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

    一、算法引入

    import time
    start_time = time.time()
    for a in range(0, 1001):
        for b in range(0, 1001):
            for c in range(0, 1001):
                if a**2 + b**2 == c**2 and a+b+c == 1000:
                    print("a, b, c: %d, %d, %d" % (a, b, c))
    end_time = time.time()
    print("elapsed: %f" % (end_time - start_time))
    print("complete!")
    
    a, b, c: 0, 500, 500
    a, b, c: 200, 375, 425
    a, b, c: 375, 200, 425
    a, b, c: 500, 0, 500
    elapsed: 214.583347
    complete!
    
    依据三个变量之间的关系,减少一个变量,降低维度
    
    import time
    start_time = time.time()
    for a in range(0, 1001):
        for b in range(0, 1001):
            c = 1000-a-b
            if a**2 + b**2 == c**2:
                print("a, b, c:%d, %d, %d" % (a, b, c))
    end_time = time.time()
    print("times:%d" % (end_time - start_time))
    
    a, b, c:0, 500, 500
    a, b, c:200, 375, 425
    a, b, c:375, 200, 425
    a, b, c:500, 0, 500
    times:1
    

    二、时间复杂度

    1、为什么需要复杂度

    事后统计法:把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。
    
    • 测试结果非常依赖测试环境
    • 测试结果受数据规模的影响很大
      需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。

    2、大O复杂度表示法

    所有代码的执行时间T(n)与每行代码的执行次数n成正比。
    大O时间复杂度表示代码执行时间随数据规模增长的变化趋势,也叫渐进时间复杂度,简称时间复杂度。
    
    • 时间复杂度分析
      只关注循环次数最多的一段代码
      加法法则:总复杂度等于量级最大的那段代码的复杂度
      乘法法则:嵌套代码的复杂度等于嵌套内外代码的复杂度

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

    • O(1)
      一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是O(1)。
    • O(logn)、O(nlogn)
      在采用大O标记复杂度的时候,可以忽略系数,即O(Cf(n))=O(f(n))
    • O(m+n)、O(m*n)
      代码复杂度由两个数据的规模来决定

    4、空间复杂度分析

    渐进空间复杂度:表示算法的存储空间与数据规模之间的增长关系。
    

    5、时间复杂度的可能:

    算法完成工作最少需要多少基本操作,即最优时间复杂度
    算法完成工作最多需要多少基本操作,即最坏时间复杂度
    算法完成工作平均需要多少基本操作,即平均时间复杂度
  • 相关阅读:
    Python——装饰器
    黑马Python——学习之前
    遇到的问题及解决办法——待完善
    springboot @Slf4j log 日志配置 控制台输出彩色日志并过滤DEBUG日志
    常用linux指令
    Spring Security内置 Filter 全解析
    jquery attr与prop区别。
    instanceof不能跨框架判定数组类型,必须用Array.isArray方法,实例
    font-size:em单位
    通过简单的css样式让按钮居中显示
  • 原文地址:https://www.cnblogs.com/linyk/p/11581486.html
Copyright © 2011-2022 走看看