zoukankan      html  css  js  c++  java
  • 大话数据结构之算法 时间复杂度

    佛说:欠下的债,早晚会还的。哎,大学没好好学数据结构,现在恶补吧。还债啦!!!

    时间复杂度用O()来体现,我们称之为大O记法。记做:T(n)=O(f(n))

    一般情况下随着n的增大,Tn)增长最慢的算法为最优算法。

    O1)叫常数阶 On)叫线性阶 On2)叫平方阶

     

    推倒大O

    1.       用常数1取代运行时间中的所有加法常数

    2.       在修改后的运行次数函数中,只保留最高阶项。

    3.       如果最高阶项存在且不是1,则去除与这个项相乘的常数。

    得到的结果就是大O阶。

     

    对于高斯算法而言,这个算法的运行次数函数是f(n)=3,根据我们推导大O阶的方法,第一步就是把常数项3改为1。在保留最高阶项时发现,它根本没有最高阶项,所以这个算法的时间复杂度为O(1)

     

    对于分支结构而言,无论是真,还是假,执行的次数都是恒定的,不会随着n的变大而发生变化,所以单纯的分支结构(不包含在循环结构中),其时间复杂度也是O1)。

     

    线性阶:

    Int I;

    For(i=0;i<n;i++)

    {

     

    }

    因为循环体中的代码要执行N次,所以它的循环的时间复杂度为O(n)

     

    对数阶:

    Int count=1;

    While (count<n)

    {

       Count=count*2;

    }

    由于每次count乘以2以后,就距离n更近了一分。也就是,有多少个2相乘以后大于n,则会退出循环。由 2x=n 得到x=log2n。所以这个循环的时间复杂度为O(logn)

     

     

    最坏情况运行时间是一种保证,那就是运行时间将不会再坏了。在应用中,这是一种最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间。

     

     

    算法空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记做:S(n)=O(f(n)),其中n为问题的规模,f(n)为语句关于n所占存储空间的函数。

    常见的时间复杂度所耗时间的大小排列

    O(1)<O(logn)<O(n)<O(nlogn)<O(n2)

  • 相关阅读:
    Angular 双向数据绑定
    Angular 过滤器
    Angular 自定义指令传参
    润滑油 标号
    Oracle concat
    sqlldr load UTF8 error
    linux中shell变量$#,$@,$0,$1,$2的含义解释
    shell 执行结果赋给变量
    linux 如何显示一个文件的某几行(中间几行)
    linux shell date 用当天时间做备份文件名
  • 原文地址:https://www.cnblogs.com/danyingjie/p/2252466.html
Copyright © 2011-2022 走看看