起因:今天花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.递归的深度
如果是有递归的话,空间复杂度则是递归的深度
如果既有数组,又有递归,则是它们的最大值
理解空间复杂度,对于数据的存储方式选择有很大的帮助。
好的,第一课的内容大概是这样了,主定理的具体内容还没查看,知乎上有个关于算法学习的回答也可以参考。群里的活跃度蛮高的,大家都在积极输出。
之前在朋友圈看到学长分享了他和同学关于机器学习的讨论,我觉得这个解释太好了,当时就存图了。也获得许可在这里贴出来,码了学长的头像。
上面举了高考的例子,明天就是2020届考生上考场的日子啦,希望列表的学弟学妹都收获理想的成绩,能去一个心仪的大学。
生命就在每天的生活里,一切执念都是虚妄,和身边的人愉快相处,认真安排好每一天的活动,用心感受每一天的心境,就是生活的意义本身。
往期精彩 有哪些道理是你慢慢才知道的? 张婷学妹,这是大家给你的祝福 新浪的高瞻远瞩 你好,兰州~你好,甘旨·蘭~你好,马玫学姐 一个云南人遇到了一个甘肃人 转载/投稿/合作 请联系:wrnbs-12345 备注来意 都是心意,点个再看就很好