• 时间复杂度的简单理解版本,非专业~~


    一.引入时间复杂度

    通俗易懂的来说,时间复杂度是这样的

    时间复杂度 = 基本运算步骤数量  ×  每步运行所需要的时间


    那么,基本运算步骤数量是什么呢??本噹来举一个简单的例子哈:

    1 for i in range(n):
    2     print(n)

    上述代码我们得循环n遍,此处的n指的就是基本运算步骤的数量;

    其次,每步运行所需要的时间又是什么??

    这个我们依据物理机的不同,参考度不同,一般情况下通常会忽略每步所需运行的时间。

    经过上述分析,此时的时间复杂度长这样:

    时间复杂度 = 基本运算步骤数量

    时间复杂度可以分为:最优时间复杂度,最坏时间复杂度,平均时间复杂度。

    二.时间复杂度O(n)的概念

    相信大家都接触过高阶无穷小的概念,在这简单说一下哈

    定义:当x->x0时,f(x) = 0,g(x)=0,如果当x->0时,f(x)/g(x)=0,那么称f(x)g(x)的高阶无穷小,表示为O(g(x))

     

    O(n)这个大O表示的是最坏情况下的时间复杂度(最坏时间复杂度)

    举个例子:一共n^3次乘法和n^3次加法,那么加起来就是2×n^3。如果有一个表达式f(n),使得n趋于无穷大的时候,

    lim(2×n^3)/f(n) = 常数c

         那么就可以用O(f(n))表示。此处的f(n) 可以是n^3,即O(n^3)

    三.时间复杂度的基本规则

    1.基本操作:即只有常数项,认为其时间复杂度为O(1)

    2.顺序结构:时间复杂度依加法原则进行计算(1+1+1)

     

    1 print(a)
    2 print(b)
    3 print(c)

     

    3.循环结构:时间复杂度依乘法原则进行计算(O(n*m))

     

    1 for i in range(n):
    2     for j in range(m):
    3         print(100)

     

    4.分支结构:时间复杂度取最大值(O(max(n,m))

    1 if i > 0:
    2     for j in range(n):
    3         print(j)
    4 else:
    5     for z in range(m):
    6         print(m)

    5.判断一个算法的效率时,往往只需关注操作数量的最高次项,其它次要项和常数项均可忽略

    执行次数函数举例 非正式术语
    12 O(1) 常数阶
    2n+3 O(n) 线性阶
    3n2+2n+1
    O(n2) 平方阶
    6log2n+23 O(logn) 对数阶
    4n+3nlog2n+13 O(nlogn) nlogn阶
    6n3+2n2+3n+1 O(n3) 立方阶
    2n
    O(2n) 指数阶

     6.常见时间复杂度之间的关系

    所消耗的时间从小到大:

    O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)

  • 相关阅读:
    16_基于FPGA的DA_TLC5615驱动输出
    17_IIC协议与FPGA驱动AT24C04
    14_基于FPGA的DSS与嵌入式逻辑分析仪的调用
    11_基于FPGA的按键计数器
    08_基于FPGA的测頻计的设计
    15_基于FPGA的AD_TLC549采集模拟信号
    13_基于FPGA的液晶1602显示
    09_基于FPGA驱动蜂鸣器唱歌
    HTML 综合案例简陋的相亲网站界面
    go 语言里面的 & 和 *
  • 原文地址:https://www.cnblogs.com/xiaodangdang/p/12068604.html
Copyright © 2020-2023  润新知