数据结构历年考研真题对应知识点(算法和算法评价)

目录

1.2算法和算法评价

1.2.2算法效率的度量

【命题追踪——(算法题)分析时空复杂度(2010-2013、2015、2016、2018-2021)】

【命题追踪——分析算法的时间复杂度(2011-2014、2017、2019、2022)】

1.时间复杂度

2.空间复杂度

归纳总结

1.循环主体中的变量参与循环条件的判断

2.循环主体中的变量与循环条件无关


1.2算法和算法评价

1.2.2算法效率的度量

命题追踪——(算法题)分析时空复杂度(2010-2013、2015、2016、2018-2021)】

算法效率的度量是通过时间复杂度和空间复杂度来描述的。

命题追踪——分析算法的时间复杂度(2011-2014、2017、2019、2022)】

1.时间复杂度

一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中基本运算最深层循环中的语句)的频度与T(n)同数量级,因此通常将算法中基本运算的执行次数的数量级作为该算法的时间复杂度。于是,算法的时间复杂度记为

T(n)=O(f(n))

式中,O的含义是T(n)的数量级,其严格的数学定义是:若T(n)和 fn)是定义在正整数集合上的两个函数,则存在正常数C和n,使得当n≥n时,都满足0≤T(n)≤Cf(n)。

算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入数据的性质(如输入数据元素的初始状态)。例如,在数组A [ 0...n- 1]中,查找给定值k的算法大致如下:

i=n-l;
while (i>=0&&(A[i]!=k))
i--;
return i;

该算法中语句3(基本运算)的频度不仅与问题规模n有关,而且与下列因素有关:

①若A中没有与k相等的元素,则语句3的频度f(n)=n。
②若A的最后一个元素等于k,则语句3的频度f(n)是常数0。

最坏时间复杂度是指在最坏情况下,算法的时间复杂度。

平均时间复杂度是指所有可能输入实例在等概率出现的情况下,算法的期望运行时间。

最好时间复杂度是指在最好情况下,算法的时间复杂度。

一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。在分析一个程序的时间复杂性时,有以下两条规则:

1)加法规则:T(n)=T₁(n)+T₂(n)=O(f(n))+O(g(n))) = O(max(f(n), g(n)))

2)乘法规则: T(n)=T₁(n)×T₂(n)=O(f(n))×O(g(n))=O(f(n)×g(n))

例如,设 a{ }、b{ }、c{ }三个语句块的时间复杂度分别为 O(1)、O(n)、O(n²),则

①    a{
        b{}
        c{}
    }        //时间复杂度为O(n²),满足加法规则
②    a{
        b{
            c{}
        }
    }        //时间复杂度为O(n³),满足乘法规则

常见的渐近时间复杂度为
O(1)< O(log₂n)< O(n)< O(nlog₂n)< O(n²)< О(n³)< O(2ⁿ) < O(n!) < O(nⁿ )

2.空间复杂度

算法的空间复杂度S(n)定义为该算法所需的存储空间,它是问题规模n的函数,记为

S(n)=O(g(n))

一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输入数据所占空间只取决于问题本身,和算法无关,则只需分析除输入和程序之外的额外空间。例如,若算法中新建了几个与输入数据规模n相同的辅助数组,则空间复杂度为O(n)。

算法原地工作是指算法所需的辅助空间为常量,即O(1)。

 

归纳总结

本章的重点是分析程序的时间复杂度。一定要掌握分析时间复杂度的方法和步骤,很多读者在做题时一眼就能看出程序的时间复杂度,但就是无法规范地表述其推导过程。为此,编者查阅众多资料,总结出了此类题型的两种形式,供大家参考。

1.循环主体中的变量参与循环条件的判断

在用于递推实现的算法中,首先找出基本运算的执行次数x与问题规模n之间的关系式,解得x=f(n),f(n)的最高次幂为k,则算法的时间复杂度为O(n^{k})。例如,

 例1:

int i=1;
while(i<=n)
i=i*2;

例2:

int y=5;
while((y+1)*(y+1)<n)
y=y+1;

在例1中,设基本运算i=i*2的执行次数为t,则 2^{t}\leqslant n,解得t\leqslant \log_{2}n,故 T(n)=O(\log_{2}n)

在例2中,设基本运算y=y+1的执行次数为t,则 t=y-5,且(t+5+1)(t+5+1)<n,解得t<√n-6,即 T(n)= O( √n )。

2.循环主体中的变量与循环条件无关

此类题可采用数学归纳法或直接累计循环次数。多层循环时从内到外分析,忽略单步语句、条件判断语句,只关注主体语句的执行次数。

此类问题又可分为递归程序和非递归程序:

(1)递归程序一般使用公式进行递推。时间复杂度的分析如下:
        T(n)=1+T(n-1)=1+1+T(n-2)=…=n-1+ T(1)
        即T(n)=O(n)

(2)非递归程序的分析比较简单,可以直接累计次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心碎烤肠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值