算法时间复杂度的计算

算法时间复杂度的计算一、算法时间复杂度定义在进行算法分析时候,语句总的执行次数T(n)是关于问题规模n的函数,进而分型T(n)随着n的变化情况并确定T(n)的数量级.算法的时间复杂度,也就是算法的时间度量记作:T(n)=O(f(n)).它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度.其中f(n)是问题规模n的某个函数.简单来说T…

大家好,又见面了,我是你们的朋友全栈君。

一、算法时间复杂度定义

        在进行算法分析时候,语句总的执行次数T(n)是关于问题规模n的函数,进而分型T(n)随着n的变化情况并确定T(n)的数量级.算法的时间复杂度,也就是算法的时间度量记作:T(n)=O(f(n)).它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度.其中f(n)是问题规模n的某个函数.

简单来说T(n)代表时间频度:一个算法中语句执行次数称为时间频度

时间复杂度就是:算法的时间复杂度描述的是T(n)的变化规律,计作:T(n) = O(f(n))。

这里用大写的O( )来体现算法时间复杂度的记法,我们称之为大O记法.

二、推导大O阶方法(游戏秘籍三部曲)

  1. 用常数1取代运行时间中的所有加法常数。
  2. 在修改后的运行次数函数中,只保留最高阶项。
  3. 如果最高阶项存在且不是1,则去除与这个项乘积的常数。

三、常数阶

let sum = 0, n = 100  //执行一次
sum = (1 + n) * n / 2  //执行一次
return sum //执行一次

这个算法的运行次数是f(n)=3,与n的大小无关
根据推导大O阶的方法,常数项3改为1,即时间复杂度为O(1)
对于分支结构(不含循环结构),无论真或假,执行的次数都是恒定的
不会随着n的变大而发生变化,其时间复杂度也是O(1)

四、线性阶

for(let i=0;i<n;i++){
   
   /* 这里是时间复杂度为O(1)的程序步骤序列*/

}

关键就是要分析循环结构的运行情况
上面这是一个for循环,那么它的时间复杂度又是多少呢?首先循环体就是一个执行一次的循环体,总共执行了n次,那么执行次数就是f(n) =n,启动我们的游戏攻略三部曲知道,时间复杂度就是为O(n).

五、对数阶

let count=1;
while(count<n){
    count=count*2
}

对数阶不是很好理解
每次count都会乘以一个2,他会距离n更近一步
这里详细解释一下
count=1时 1<n count=2 2的一次方
count=2时 2<n count=4    2的二次方
count=4时 4<n count=8    2的三次方

到2的x次方大于n的时候 循环就结束了
由2的x次方等于n –> x = logn,时间复杂度为O(logn)
常见的二分查找就是以上思路,时间复杂度为O(logn).

六、平方阶

for(let i=0;i<n;i++){
    for(let j=i+1;j<n;j++){
        
     /* 这里是时间复杂度为O(1)的程序步骤序列*/

    }
}

由于当i = 0时,内循环执行n此,当n = 1时, 执行了 n – 1 次, …当 i = n-1 时, 执行了1次,所以总的执行次数为:
n + (n -1) +( n -2 ) +… +1 = n(n +1)/2 = n^2/2 + n/2

根据我们的游戏秘籍的三部曲(保留最高阶,去除最高阶不是1的常数项),我们可以分析出来,时间复杂度为 O( n^2 ).

七、常见算法时间复杂度

算法时间复杂度的计算

 

笔者最近看《大话数据结构》,总结了一点,最后一张图网上找的。需要《大话数据结构》pdf高清电子版的铁汁留言,我在评论区发你!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146697.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月14日 下午5:20
下一篇 2022年5月14日 下午5:20


相关推荐

  • PHP实现微信退款的分析与源码实现

    PHP实现微信退款的分析与源码实现

    2021年10月31日
    46
  • 企业局域网的组建步骤和方法

    企业局域网的组建步骤和方法什么是局域网?所谓的局域网(LocalAreaNetwork,简称LAN),用于将有限范围内(例如一个实验室、一层办公楼或者校园)的各种计算机、终端与外部设备互联成网。企业局域网怎么建立?首先来了

    2022年7月4日
    20
  • Android中ListView下拉刷新的实现

    Android中ListView下拉刷新的实现ListView 中的下拉刷新是非常常见的 也是经常使用的 看到有很多同学想要 那我就整理一下 供大家参考 那我就不解释 直接上代码了 这里需要自己重写一下 ListView 重写代码如下 packagenet loonggg listview importjava util Date importandroi content Context importandroi u

    2026年3月18日
    1
  • Pytorch版本、CUDA版本与显卡驱动版本的对应关系

    Pytorch版本、CUDA版本与显卡驱动版本的对应关系参考链接:INSTALLINGPREVIOUSVERSIONSOFPYTORCH解决PyTorch与CUDA版本不匹配1.CUDA驱动和CUDAToolkit对应版本注:驱动是向下兼容的,其决定了可安装的CUDA和CUDAToolkit的最高版本。2.CUDA及其可用PyTorch对应版本(参考官网,欢迎评论区补充)注:虽然有的卡CUDA版本可更新至新版本,且PyTorch也可对应更新至新版本。但有的对应安装包无法使用,有可能是由于卡太旧的原因。3.安装指导(1)指定安装PyTor

    2022年6月16日
    365
  • Python报错:pandas.errors.ParserError: Error tokenizing data. C error: Expected 3……

    Python报错:pandas.errors.ParserError: Error tokenizing data. C error: Expected 3……报错信息用Python做数据处理时,报如下错误:pandas.errors.ParserError:Errortokenizingdata.Cerror:Expected3fieldsinline28,saw4错误原因首先我们先看一下报错:pandas.errors.ParserError:Errortokenizingdata.Ce…

    2022年6月30日
    97
  • kali-linux中安装Nessus详细教程「建议收藏」

    kali-linux中安装Nessus详细教程「建议收藏」一、下载NessusNessus是工业界使用较为广泛的产品。登录官网,下载对应版本的nessus框架安装包https://www.tenable.com/downloads/nessus?loginAttempted=true(建议直接在kali中利用firefox浏览器下载,否则需要从真实机拖进虚拟机中(需要安装VMtools,安装VMtools过程不再赘述))二、明确自己压缩包的位置比如我的Nessus-8.10.0-debian6_amd64.deb安装包位于/home/go.

    2022年10月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号