• 高效算法之时间复杂度介绍


      上一篇博客已经给大家介绍了一些算法题,明天刚好是中秋了,这里祝大家中秋快乐。刚好赶上数学建模了,今天就先介绍与衡量算法水平的重要指标时间复杂度吧。在时间充裕情况下会更新5+2。之后还会介绍空间复杂度以及python内置函数的时间复杂度。

    1.简介

    先看一下什么是时间复杂度:

      衡量代码的好坏,包括两个非常重要的指标:

      运行时间占用空间

      代码的绝对执行时间是无法估计的,但可以预估代码的基本执行次数。

    2.程序中最常见的四种执行方式有

    (1)T(n) = kn,执行次数是线性的。

      可以理解为有一个任务,完成全部要达到n,每k个时间完成任务的1/n,则完成全部任务所需要的时间为kn个时间。

    (2)T(n) = klog(a)(N),执行次数是对数的。

      可以理解为有一个任务,完成全部要达到n,每k个时间完成任务的1/a,然后下一个时间完成剩下任务的1/a,依次循环,则完成全部任务所需要的时间为kloa(a)N个时间。

    (3)T(n) = k,执行次数是常量的。

      可以理解为有一个任务,完成全部要达到n,则k个时间完成任务的n,也就是需要k个时间完成所有任务,这个是可以得到代码的绝对执行时间的,则完成全部任务所需要的时间为k个时间。

    (4)T(n) = 0.5n^2 + 0.5n,执行次数是一个多项式。

      可以理解为有一个任务,完成全部要达到n,完成第一个1要1个时间,完成第二个1要2个时间,就是不断相加,这里简化了,则完成全部任务所需要的时间为0.5n^2 + 0.5n个时间。

    (5)时间复杂度

    但是上面的不同情况的由于算法不同无法比较,而且有时候根据n的取值比较结果也不同。这时候就有了渐进时间复杂度的概念:

    若存在函数 f(n),使得当n趋近于无穷大时,T(n)/ f(n)的极限值为不等于零的常数,则称 f(n)是T(n)的同数量级函数。

    记作 T(n)= O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度,也被称为大O表示法

    (6)时间复杂度的规则

      如果运行时间是常数量级,用常数1表示;

      只保留时间函数中的最高阶项

      如果最高阶项存在,则省去最高阶项前面的系数

      就是当运行时间不是常数时,省去前面的k系数。

      一般常见的时间复杂度的比较为:O(1)< O(logn)< O(n)< O(n^2)

  • 相关阅读:
    PLSQL学习笔记 wm_concat
    Oracle ERP 公司间往来的解决方案(转载)
    Excel单元格设成只读
    PLSQL笔记 存在性检查
    PL/SQL编程技巧
    查看Oracle EBS克隆Clone时间
    用wm_concat合并行及merge into更新
    商务英语900句
    外企公司常用英文缩写
    ASP.NET 2.0 XML 系列(5):用XmlReader读取XML文档
  • 原文地址:https://www.cnblogs.com/ITXiaoAng/p/11515699.html
Copyright © 2020-2023  润新知