<
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))
空间复杂度涉及的空间类型有:
- 输入空间: 存储输入数据所需的空间大小;
- 暂存空间: 算法运行过程中,存储所有中间变量和对象等数据所需的空间大小;
- 输出空间: 算法运行返回时,存储输出数据所需的空间大小;
💻总结
以上就是对数据结构与算法中算法的一些介绍和理论知识,算法的时间复杂度和空间复杂度是评判一个程序设计是否高效合理的一种方式,在往后的数据结构中,对数据的操作都要考虑到该算法的时间复杂度和空间复杂度。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
结构中,对数据的操作都要考虑到该算法的时间复杂度和空间复杂度。
[外链图片转存中…(img-LL6aaEaR-1714777757995)]
[外链图片转存中…(img-K5hVz6wJ-1714777757995)]
[外链图片转存中…(img-BRZ4RPMB-1714777757996)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新