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


      上一篇博客已经给大家介绍了一些算法题,明天刚好是中秋了,这里祝大家中秋快乐。刚好赶上数学建模了,今天就先介绍与衡量算法水平的重要指标时间复杂度吧。在时间充裕情况下会更新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)

  • 相关阅读:
    OK335x mksd.sh hacking
    Qt jsoncpp 对象拷贝、删除、函数调用 demo
    OK335xS 256M 512M nand flash make ubifs hacking
    Qt QScrollArea and layout in code
    JsonCpp Documentation
    Qt 4.8.5 jsoncpp lib
    Oracle数据库生成UUID
    freemarker得到数组的长度
    FreeMarker中if标签内的判断条件
    freemarker语法
  • 原文地址:https://www.cnblogs.com/ITXiaoAng/p/11515699.html
Copyright © 2020-2023  润新知