数据结构与算法之二(入门篇)

整个算法中占比最大的就是复杂度分析,每个算法都与复杂度挂钩,你只有先掌握复杂度分析才能对算法更好地学习

为什么要有复杂度分析

也许有人会说通过统计、监控就能得到算法的执行时间和占用内存大小即事后统计法。通过跑一遍代码就能得到程序的执行时间,而且更为准确,但为什么还要有复杂度分析呢?
1.这种方法非常依赖测试环境
2. 所测试结果受数据规模影响大

而时间复杂度和空间复杂度可以不通过测试具体数据来粗略计算算法的效率

大O复杂度算法

算法的执行效率粗略的讲就是代码的执行时间
大O复杂度的公式:
T(n)=O(f(n))
T(n)代表所有的代码执行时间,n代表数据规模,f(n)表示每行代码执行次数总合,O代表代码的执行时间 T(n) 与 f(n) 表达式成正比
大O时间复杂度并不表示代码的真正执行时间而是表示代码的执行时间随数据规模增长的变化趋势,也称为渐进时间复杂度,即时间复杂度。公式中的低阶常量系数都不随数据规模增长而变化,因此可以忽略。

时间复杂度分析
  1. 只关注执行最多的一段代码比如循环的条件
  2. 加法法则:总复杂度等于量级最大的那段代码的复杂度
    当你遇到多个循环时可以选择复杂度更高的,比如O(n)+O(n^2)可以看成后者
  3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
    通俗来讲就是一个循环语句嵌套着一个循环语句T1(n) = O(n),T2(n) = O(n^2),则 T1(n) * T2(n) = O(n^3)
常见时间复杂度

复杂度量级
在这里插入图片描述
对于复杂度量级,我们可以粗略地分为两类,多项式量级和非多项式量级。其中,非多项式量级只有两个:O(2^n) 和 O(n!)

  1. O(1)没有循环,递归等复杂语句,多个简单代码或一行代码

  2. O(logn)、O(nlogn)

  3. O(m+n)、O(m*n)
    代码的复杂度由两个数据的规模来决定

空间复杂度

空间复杂度全称就是渐进空间复杂度,表示算法的存储空间与数据规模之间的增长关系

最好、最坏情况时间复杂度

最好情况时间复杂度就是,在最理想的情况下,执行代码的时间复杂度
最坏情况时间复杂度就是,在最糟糕的情况下,执行代码的时间复杂度

平均情况时间复杂度

要查找的变量 x 在数组中的位置,有 n+1 种情况:在数组的 0~n-1 位置中和不在数组中。我们把每种情况下,查找需要遍历的元素个数累加起来,然后再除以 n+1,就可以得到需要遍历的元素个数的平均值
在这里插入图片描述

均摊时间复杂度

简单来说就是一种特殊的平均时间复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值