数据结构考研时间复杂度分析学习
来源:互联网 发布:linux shell 编程入门 编辑:程序博客网 时间:2024/05/17 00:01
几种排序算法的思想很容易掌握,就是对应的时间复杂度,究其原因就是对时间复杂度是什么,如何定义计算还不知道,那么时间复杂度是如何计算的呢?请看下文。
在说时间复杂度之前要说一下算法,算法是为解决某问题而采取的具体的,有限的操作步骤,既然算法是操作步骤,那么步骤占用计算机资源的多少就决定了算法的效率。而计算机资源中有时间资源(处理器)和空间资源(存储器),因此时间复杂度是描述算法效率的标准中的一种。
什么是时间复杂度
算法中,操作重复执行的次数为算法的时间度量。
设f(n)为描述一个算法重复执行次数的函数,这个算法的时间复杂度即为O(f(n))。这里只需求的函数(f(n))的增长率。
例题1:
f(n)=n^3+3n O(f(n))=n^3
f(n)=2 O(f(n))=1
f(n)=logn+n O(f(n))=logn
如何求解
现在如果给定我们一个算法的函数,我们肯定可以特别轻松的写出时间复杂度,但是,函数往往不直接给我们,给我们的是一段代码,我们是否很容易的求出时间复杂度呢?
如下:
例题2.1:
分析: 1)第一个for循环重复的次数为n
2)第二个for重复的次数也为n
3)两个for是嵌套的,程序总的重复次数为n^2
4)时间复杂度即为n^2
例题2.2:
分析:1)设重复的次数为m
2)i=1 循环一次i的值都乘以2, m次循环后i的值就不满足小于等于n了,得函数i*(2^m)>n (i=1)
3)求得重复次数m=log2(n/i),即得时间复杂度
说明:上题中i如果不为1时,时间复杂度还是log2(n/i),原因是求的是函数的增长率。
好了,现在我们知道了如何去求时间复杂度的函数及时间复杂度,单个的函数能求出来,那么多个函数在一块呢?就好比我们会算加法、减法和乘法,那么混合运算怎么算呢? 复合的程序中就能写出多个时间复杂度的函数,整个函数的时间复杂度如何计算就好比混合运算的优先级,是有规则的,请继续看:
时间复杂度的表示法则
加法法则:
乘法法则:
特例:若其中有一个为常数c
f(n1)=c O(f(n1))*O(f(n2))=O( c*f(n2) ) = O( f(n2) )
例3:
分析: 1)嵌套的两个for循环,用乘法法则得:O(m*n)
2)第三个for循环,时间复杂度为O(m)
3)利用加法法则得:时间复杂度为O( max(O(m*n),O(m)) )
- 数据结构考研时间复杂度分析学习
- 【数据结构】算法时间复杂度分析
- 数据结构笔记-算法时间复杂度分析
- 数据结构之时间.空间复杂度分析
- 数据结构回顾——时间复杂度分析
- 数据结构和算法--时间复杂度学习总结
- 数据结构和算法学习02-时间复杂度和空间复杂度
- 数据结构 时间复杂度
- 数据结构时间复杂度
- 数据结构时间复杂度计算
- 数据结构时间复杂度
- 数据结构-时间复杂度
- 数据结构时间复杂度
- 数据结构:时间复杂度
- 数据结构-算法-时间复杂度
- 数据结构之时间复杂度
- 数据结构与时间复杂度
- 数据结构--时间复杂度
- ViewPagerIndicator导航栏
- 1030 完美数列
- 14. Longest Common Prefix
- How Hypernetes Brings Multi-tenancy to Microservice Architectures
- 《Matlab算法》 part1 误差分析
- 数据结构考研时间复杂度分析学习
- PHP运行模式(cgi,fast-cgi,cli,web模块模式)
- Mysql学习总结(34)——Mysql 彻底解决中文乱码的问题
- 带你读开源—ASP.NET_MVC(二)
- 1031 查验身份证
- Struts2入门
- C#学习日记-字符与字符串
- Adapter
- (零)ELK学习之ELK安装配置