网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
通常一个好的算法有以下要求:
1.正确性,算法应该能够正确地解决求解问题
2.可读性,算法主要是为了让人阅读和交流,其次才是机器执行。可读性好有助于人对算法的理解;晦涩难懂的程序易于隐藏较多的错误,难以调试和修改。
3.健壮性,当输入非法时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果
4.高效率与低存储量需求,效率指的是算法执行的时间,对于同一个问题如果有多个算法可以解决,执行时间短的算法效率高。存储量需求指算法执行过程中所需要的最大存储空间。效率与低存储量需求这两者都与问题的规模有关
📌注:算法是可以用伪代码描述
🚀算法效率的度量
算法执行的时间需要通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。度量一个程序的执行时间通常有两种方法
🚢事后统计法
因为很多计算机内部都有计时功能,有的甚至可精确到毫秒级,不同算法的程序可通过一组或若干组相同的统计数据以分辨优劣,但这种方法有两个缺陷:一个是必须先运行依据算法编制的程序;另一个是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣
🚢事前分析估算法
📌一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:
- 依据的算法选用何种策略
- 问题的规模
- 书写程序的语言,对于同一个算法,实现语言的级别越高,执行效率就越低
- 编译程序所产生的机器代码的质量
- 机器执行指令的速度
所以说,同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不 同计算机上运行时,效率均不相同。
一个算法是由 控制结构(顺序、分支和循环三种)和原操作(指固有的数据类型的操作) 构成的,则算法时间取决于两者的综合效果。为了便于比较同一问题的不同算法,通常做法是,从算法中选取一种对于研究的问题(或是算法类型)来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量度
👻时间复杂度
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作:
📌
T
(
n
)
=
O
(
f
(
n
)
)
T(n) = O(f(n))
T(n)=O(f(n))
它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度
所以说,被称为问题的基本操作的元操作应是其重复执行次数和算法的执行时间成正比的原操作,多数情况下它是最深层循环内的语句中的原操作。它的执行次数和包含语句的频度相同。
📌注:语句的频度指的是该语句重复执行的次数
根据输入数据的特点,时间复杂度具有最差、平均、最佳三种情况,一般我们考虑的时间复杂度都是最坏的那种情况,最坏时间复杂度是包含于最好、和平均两种情况的。
常见种类:
根据从大到小,常见的算法时间复杂度主要有:
📌
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
(
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
📌
T
(
[外链图片转存中…(img-rCOTwJwg-1714888151186)]
[外链图片转存中…(img-u38RW4XI-1714888151187)]
[外链图片转存中…(img-DJ0IzKA5-1714888151187)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新