考研中的算法时间复杂度求解
来源:互联网 发布:软件外包网站 编辑:程序博客网 时间:2024/05/16 15:47
考研中的算法时间复杂度求解
今天刚刚开始复习了考研的数据结构,结果在第一篇绪论就遇到问题了,哈哈哈,就是求解算法的时间复杂度问题,刚一开始有点蒙,不知道怎么做,相信很多考研的小伙伴一开始都会遇到这个问题吧,这里总结了一点个人心得,分享给要考研的小伙伴。
对于一些基本概念这里主要介绍一些最重要的,不关紧要的就不说啦~
- 求解步骤
1、找到基本语句: 就是程序中出现次数最多的那句代码啦,比如一层for循环就是循环中那句代码,多层循环就是**最内层循环的那句代码** 2、计算基本语句的执行次数的数量级: 其实在做题的时候基本就等同于求出基本语句执行次数,至于数量级是什么意思呢,就比如我现在求出来一个基本语句的执行次数是(n+3*n^2),那么这个基本语句的实行次数数量级就是n^2,即我们只需要关心**幂次最高的那一项**,并且这一项前面的系数也可忽略。 3、用大Ο记号表示算法的时间性能: 就是把我们在第2步求出的基本语句执行次数的数量级放在O()的括号中。
常见算法时间复杂度及其大小比较
- 来看看例题吧
1.
void fun(int n){ int i=1; while(i<=n) i=i*2;}
我们先来看一下这道题,我们按照上面讲的步骤,首先找到基本语句,就是循环最内层的语句,即i=i*2; 接下来我们来计算这个语句的执行次数,其实我们可以看出这个语句就是很多个2 相乘,但是很多是多少呢,千万不要误以为是n,我第一次做的时候就以为是n,然后就做错了,既然不知道我们就假设是t个2相乘,即i=i*2执行了t次,也就是最后的结果为i=2^t=n;可以得出t=log2 (n); 第三步就是把log2 (n)用O()括起来就行了。
2.
x=2;while(x<n/2)x=x*2;
这个题和上面做法一样,设2^t=n\2;得t=log2(n)-1;得到最后时间复杂度为O(log2(n))。
3.
cnt=0;for(k=1;k<=n;k*=2)for(j=1;j<=n;j++) cnt++;
刚才上面的两道题都是一层循环,现在我们来看看多层循环的题目。对于这道题,我们呀偏向计算基本语句cnt++;的执行次数只需计算外层循环和内层循环的乘积即可。对于外层循环的循环次数有上面两个题的方法可求出为log2(n) ,内层循环的次数为n,所以该算法的时间复杂度为O(nlog2(n))。
0 0
- 考研中的算法时间复杂度求解
- 求解算法的时间复杂度
- 求解算法的时间复杂度
- 递归算法的时间复杂度求解
- 简单求解算法的时间复杂度
- 使用递归式求解算法时间复杂度
- 递归算法时间复杂度求解方法
- Master公式求解递归算法时间复杂度
- 算法的时间复杂度和空间复杂度的求解方法
- 算法中的时间复杂度和空间复杂度
- 算法导论------递归算法的时间复杂度求解
- 求解时间复杂度
- 递归树求解递归算法的时间复杂度
- 算法导论中求解时间复杂度的三种方法
- 递归树求解递归算法的时间复杂度
- 递归树求解递归算法的时间复杂度
- 递归树求解递归算法的时间复杂度
- 《算法导论》学习笔记——求解时间复杂度
- [二分答案 单调队列] BZOJ 3316 JC loves Mkk
- iOS开发小记:关于环信Demo3.0的使用总结以及昵称和头像问题的研究与解决
- 字符串转换为整数
- The test lifecycle
- 【bzoj4084】[Sdoi2015]bigyration hash
- 考研中的算法时间复杂度求解
- bootstrap左侧栏样式
- Win Server 系统远程桌面连接失败解决办法
- JS获取节点的兄弟,父级,子级元素
- 关于CocoaPods的安装总结
- phpMyAdmin配置文件config.inc.php详解
- libevent入门小例子
- 第七周项目1——成员函数、友元函数和一般函数的区别
- java学习之实验三