zoukankan      html  css  js  c++  java
  • 高效算法之时间复杂度介绍

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

  • 相关阅读:
    JAVA BigDecimal 小数点处理
    对 Element UI table中数据进行二次处理
    Kettle-User Defined Java Class使用-大写转换
    多线程-同步函数
    多线程-银行分批存款
    多线程-并发卖票
    多线程-控制两个线程交替打印
    ztree-可拖拽可编辑的树
    ztree-编辑节点(树节点添加,删除,修改)
    ztree-拖拽(排序树)
  • 原文地址:https://www.cnblogs.com/ITXiaoAng/p/11515699.html
Copyright © 2011-2022 走看看