a*算法的时间复杂度_笔记||算法之时间复杂度与空间复杂度

e4120f942dcbae09ba651384bf823c9a.png

文 | seven 图 | 我、网络 今天聊聊算法 96b0d3e2faaaa05f8dfe78a6e2d8d7b6.png

起因:今天花9.9元买了极客“7天掌握算法面试必考知识点”,初衷是学习运营和算法,最好的学习方式是输出,所以我来记录今天学的第一课:时间复杂度和空间复杂度分析

开篇的学员手册有一句话很有意思也让我很触动——专注于学习那些不变的底层知识。技术发展很快,怎么样快速掌握新的技术,答案就是上面这句话。

授课老师的一位高中同学,姑且叫他老王,老王在Google做前端开发8年,辞职创业做AI方向,半个月的时间学习了机器学习和深度学习,还成为熟练者。在别人调侃老王是不是半个月不吃不喝学习的时候,老王说的是,随着深入地学习发现都是他熟悉的东西,离不开数学、算法、数据结构和计算机组成原理(害,这门课我没听好)

所以,好好学习。那就进入主题吧。

分享今日学到的时间复杂度和空间复杂度分析方法

首先常见的时间复杂度有七种,分别是:

1.O(1) 常数级,可以理解为:如果一种算法的运算次数与数据规模无关,那么它的时间复杂度是常数级别的

举个例子:

int n=1000;

print(you input is: n)

2.O(log n)  对数级  对于循环

for(int i=1;i<=n;i=i*2)

      输出语句

3.O(n)   单次循环

4.O(n^2)   嵌套循环

5.O(n^3)

6.O(2^n) 斐波那契数列

7.O(n!)

循环嵌套,对应的时间复杂度是循环次数的乘积,而并列的两个循环时间复杂度为O(n)

为什么要了解时间复杂度,它用来判断解决问题的程序是否高效

主定理(Master Theorem) 可以用来解决一切递归问题的时间复杂度问题,比如下列几个(由于涉及大量数学证明,此处还是记忆为佳)

1.二分查找  时间复杂度:logn   通常二分查找在有序数列中进行

2.二叉树遍历 :每个节点都访问且仅访问一次,为O(n)

3.二维有序矩阵中的二分查找   O(n)遍历了每个数

4.归并排序时间复杂度  nlogn

思考题:二叉树遍历:前序、中序、后序的时间复杂度如何?

答案:时间复杂度 都为O(n)

理解:按照树的结构,每个节点都被访问,且仅被访问一次

拓展:图的遍历和搜索算法BFS(广度优先)、DFS(深度优先)的时间复杂度如何?

答案:均为O(n)

#空间复杂度#
1.数组的长度
2.递归的深度
如果是有递归的话,空间复杂度则是递归的深度
如果既有数组,又有递归,则是它们的最大值

理解空间复杂度,对于数据的存储方式选择有很大的帮助。

好的,第一课的内容大概是这样了,主定理的具体内容还没查看,知乎上有个关于算法学习的回答也可以参考。群里的活跃度蛮高的,大家都在积极输出。


之前在朋友圈看到学长分享了他和同学关于机器学习的讨论,我觉得这个解释太好了,当时就存图了。也获得许可在这里贴出来,码了学长的头像。

4e36e59ca231f5afe82b03aef3ce3083.png


上面举了高考的例子,明天就是2020届考生上考场的日子啦,希望列表的学弟学妹都收获理想的成绩,能去一个心仪的大学。

生命就在每天的生活里,一切执念都是虚妄,和身边的人愉快相处,认真安排好每一天的活动,用心感受每一天的心境,就是生活的意义本身。

96b0d3e2faaaa05f8dfe78a6e2d8d7b6.png

往期精彩 有哪些道理是你慢慢才知道的? 张婷学妹,这是大家给你的祝福 新浪的高瞻远瞩 你好,兰州~你好,甘旨·蘭~你好,马玫学姐 一个云南人遇到了一个甘肃人 转载/投稿/合作 请联系:wrnbs-12345 备注来意 ceec352664605090e5154e3aed8c3b82.png 都是心意,点个再看就很好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值