zoukankan      html  css  js  c++  java
  • 时间复杂度的简单理解版本,非专业~~

    一.引入时间复杂度

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

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


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

    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)

  • 相关阅读:
    除去String字符串里面指定的字符串
    JSON总结(java篇)
    关于tomcat文件下载配置
    在多行列表中id同名的<a>标签点击事件处理方法
    java Properties异常:Malformed uxxxx encoding.
    关于An association from the table refers to an unmapped class
    Java实现Mysql数据库自动备份
    Could not publish server configuration for Tomcat v6.0 Server at localhost.
    MySQL备份命令mysqldump参数说明与示例
    图解 | 原来这就是网络
  • 原文地址:https://www.cnblogs.com/xiaodangdang/p/12068604.html
Copyright © 2011-2022 走看看