网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
根据输入数据的特点,时间复杂度具有最差、平均、最佳三种情况,一般我们考虑的时间复杂度都是最坏的那种情况,最坏时间复杂度是包含于最好、和平均两种情况的。
常见种类:
根据从大到小,常见的算法时间复杂度主要有:
📌
O
(
1
)
<
O
(
l
o
g
₂
n
)
<
O
(
n
)
<
O
(
n
l
o
g
₂
n
)
<
O
(
n
²
)
<
O
(
n
³
)
<
O
(
2
ⁿ
)
<
O
(
n
!
)
<
O
(
n
ⁿ
)
O(1)<O(log₂n)<O(n)<O(nlog₂n)<O(n²)<O(n³)<O(2ⁿ)<O(n!)<O(nⁿ)
O(1)<O(log₂n)<O(n)<O(nlog₂n)<O(n²)<O(n³)<O(2ⁿ)<O(n!)<O(nⁿ)
实例一:
void speaker(int n){
int i = 1;
while(i<=n){
i = i\* 2; //每次翻倍
printf("我真的会谢 %d\n", i);
}
printf("我是真的栓Q %d\n", n);
}
时间复杂度:
📌
T
(
n
)
=
O
(
x
)
=
O
(
l
o
g
₂
n
)
T(n) = O(x) = O(log₂n)
T(n)=O(x)=O(log₂n)
实例二:
void speaker(int flag[], int n){ //n为问题规模
printf("你今天好吗? \n");
for(int i=0; i<n; i++){ //从第一个元素查找
if(flag[i]==n){ //找到元素n
printf("我很好 %d\n", n);
break;
}
}
}
//flag数组中乱序存放了1~n这些数
int flag[n] = {1.......n};
speaker(flag, n)
时间复杂度:
- 最好情况:元素n在第一个位置(T(n) = O(1))
- 最坏情况:元素n在最后一个位置(T(n) = O(n))
- 平均情况:假设元素n在任意一个位置的概率相同为1/n(T(n) = O(n))
由于算法的时间复杂度考虑的只是对于问题规模n的增长率,则在难以精确计算基本操作执行次数(或语句频度)的情况下,只需求出它关于n的增长率或阶即可
👻空间复杂度
类似于算法的时间复杂度,我们还需要掌握的是算法的空间复杂度
,其中n为问题的规模(或大小)
📌
S
(
n
)
=
O
(
f
(
n
)
)
S(n) = O(f(n))
S(n)=O(f(n))
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
)
S(n) = O(f(n))
S(n)=O(f(n))
[外链图片转存中…(img-JejfJBxS-1715806461088)]
[外链图片转存中…(img-cWC7PNlY-1715806461088)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!