前言:
如今小伙伴们对“时间复杂度考研题”大体比较注意,我们都想要学习一些“时间复杂度考研题”的相关知识。那么小编在网上搜集了一些有关“时间复杂度考研题””的相关知识,希望我们能喜欢,看官们快快来学习一下吧!文 彦 考 研
让丨梦想丨有迹可循
这是20届川大计算机 第 3 篇文章
零师姐 2017届以初试353分,复试第2的成绩考入四川大学计算机科学与技术专业。现于文彦考研担任专业课导师,辅导川大874计算机综合考研专业课。多次参与与IT公司的合作项目中,熟悉计算机专业的考研动态与就业形势。时间复杂度专场
学习数据结构,那么时间复杂度就是一个逃不过的话题。今天我们就来仔细看看它是什么?怎么计算时间复杂度?它怎么考?这三个问题。
我们把 算法需要执行的运算次数 用 输入大小n 的函数 表示,即 T(n) 。
此时为了 估算算法需要的运行时间 和 简化算法分析,我们引入时间复杂度的概念。
定义:存在常数 c 和函数 f(N),使得当 N >= c 时 T(N) <= f(N),表示为 T(n) = O(f(n)) 。
如图:
算法的时间复杂度,用来度量算法的运行时间,记作: T(n) = O(f(n))。它表示随着 输入大小n 的增大,算法执行需要的时间的增长速度可以用 f(n) 来描述。
显然如果 T(n) = n^2,那么 T(n) = O(n^2),T(n) = O(n^3),T(n) = O(n^4) 都是成立的,但是因为第一个 f(n) 的增长速度与 T(n) 是最接近的,所以第一个是最好的选择,所以我们说这个算法的复杂度是 O(n^2) 。
那么当我们拿到算法的执行次数函数 T(n) 之后怎么得到算法的时间复杂度呢?
1、我们知道常数项对函数的增长速度影响并不大,所以当 T(n) = c,c 为一个常数的时候,我们说这个算法的时间复杂度为 O(1);如果 T(n) 不等于一个常数项时,直接将常数项省略。
2、我们知道高次项对于函数的增长速度的影响是最大的。n^3 的增长速度是远超 n^2 的,同时 n^2 的增长速度是远超 n 的。 同时因为要求的精度不高,所以我们直接忽略低此项。
3、因为函数的阶数对函数的增长速度的影响是最显著的,所以我们忽略与最高阶相乘的常数。
综合起来:如果一个算法的执行次数是 T(n),那么只保留最高次项,同时忽略最高项的系数后得到函数 f(n),此时算法的时间复杂度就是 O(f(n))。为了方便描述,下文称此为 大O推导法。
由此可见,由执行次数 T(n) 得到时间复杂度并不困难,很多时候困难的是从算法通过分析和数学运算得到 T(n)。对此,提供下列四个便利的法则,这些法则都是可以简单推导出来的,总结出来以便提高效率。
1、对于一个循环,假设循环体的时间复杂度为 O(n),循环次数为 m,则这个
循环的时间复杂度为 O(n×m)。
2、对于多个循环,假设循环体的时间复杂度为 O(n),各个循环的循环次数分别是a, b, c...,则这个循环的时间复杂度为 O(n×a×b×c...)。分析的时候应该由里向外分析这些循环。
3、对于顺序执行的语句或者算法,总的时间复杂度等于其中最大的时间复杂度。
4、对于条件判断语句,总的时间复杂度等于其中 时间复杂度最大的路径 的时间复杂度。
时间复杂度分析的基本策略是:从内向外分析,从最深层开始分析。如果遇到函数调用,要深入函数进行分析。
时间复杂度其实并不难,通过这次我为你们准备的这几道逐步“升级”的题目,再消化一下上述的知识点,相信你们应该已经有把握了。至于一些整理得更全面的干货我也会全部在我的课上分享给你们的,你们放心吧。
就到暑假了,黄金复习时间同学们一定要好好把握,有疑问的地方不要自己愣着想,可以直接在群里问我,毕竟学习的时间那么宝贵,将疑问都抛给零师姐吧
扫码入群~
获取更多干货~
加小彦微信
一对一咨询~
标签: #时间复杂度考研题