时间复杂度和空间复杂度
前言:
你是否有被面试官问到:常用的算法有哪些?也许你能答上来些。但如果追问:那你了解他们时间复杂度么?时间复杂度的计算规则是…以下文章做了大致讲述,本人觉得不错,转载了,以下是正文
算法设计的要求:正确性,可读性,健壮性和效率与低存储量需求.
为了比较同一问题的不同算法,通常的做法是,从算法中选取一种,对于所研究的问题来说,是基本操作的原操作,以该操作的重复执行次数,作为算法的时间量度。
例如:
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
sum=i*j;
}}
在代码中,乘法是该循环的基本操作,整个算法的执行与该基本操作重复的次数n^2
成正比,记作T(n)=O(n^2 )。
1.时间复杂度:
T(n)=O(f(n))
他表示随规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称为算法的渐进时间复杂度,简称时间复杂度.
如何使用时间复杂度描述?
首先我们需要确定一个基本操作n,根据这个基本操作的重复次数来表示O(f(n)).
例如:
常量阶O(1),线性阶O(n),平方阶O(n^k),对数阶O(logN),指数阶O( 2^n)
等等.
看样子回头又得补高数了…
补充:
由于算法的时间复杂度,考虑的只是,对于问题规模n的增长率,则在难以精确计算,基本操作执行次数的情况下,只需求出它,关于n的增长率,或阶即可
补充:
for(i=1;i<=n;i++){a++};
for(i=1;i<=n;i++){for(j=1;j<=n;j++){a++;}
第一个for循环时间复杂度是
- O(n)
第二个是
- O(n^2 )
那么整个就是
- O(n+n^2)
一般来说,只要算法中不存在循环语句,时间复杂度就为
- O(1)
2.空间复杂度
通常来说,只要算法不涉及到动态分配的空间,以及递归、栈所需的空间,空间复杂度通常为O(1);
一般的递归算法空间复杂度为O(n^2),
原作者:八斗东流
链接:https://www.jianshu.com/p/dba2164935f2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。