前言:
作为一个程序员,我认为算法和数据结构是每一个程序员必须要掌握的技能。工作中和和面试中一般都是必问题目,尤其是一些大厂对于算法和数据结构的要求就更高了。意识到算法和数据结构的重要性,我决定重新学习数据结构和算法。因此我在拉钩上学习了《重学数据结构与算法》由公瑾老师 中科院博士,资深算法专家主讲的课程。现在我也在同步的跟进学习,学完以后觉得很多不清楚的概念和思想都豁然开朗,公瑾老师由概念到实际的案列循环渐进的讲解让我收获良多。也建议大家可以学习下,哈哈,首先我自己肯定不是托,只是觉得确实还是对自己有帮助的。因此决定自己把每一章学习的内容自己写一个“学后感”把,把学习到的知识记录总结下来,加上自己的一些理解,如有不对的地方欢迎指正大家交流分享。
算法和数据结构的重要性
为什么要学习算法和数据结构,在实际的工作当中我们遇到各种各样的复杂业务场景。因此选择适合的算法和数据结构能够大大提升代码的运行效率。而如何衡量一段java代码的运行的效率呢?这里引出两个关键词,“时间复杂度”和"空间复杂度",通过判定这两个维度即可知道一段代码的运行的效率。那么什么是时间复杂度?什么是空间复杂度呢?这里聚了一个列子,大家可以闭上眼睛想象以下,一个红绿灯十字路口,每辆车子以此通行,红灯停,绿灯行这里每辆车子都会消耗一定的时间,那么我理解可以把它认为这其实就是代码中就是“时间复杂度”。那么有没有什么更好的办法让车子更快通行呢,答案当然是有的,在十字路口建立一个横向的立交桥,这样横向的车子就减少了通行时间,这就是“空间复杂度”。
举一个实际的例子:
一个登录系统,通过登录id进行匹配登录。现在有一个可行的办法是每条记录去匹配ID是否一致,然而更高效的解决办法就是采用二分查找,提前在数据库中按照某个字母条件进行排序,这样就可以从中间查找,通过二分查找不断缩小查找范围。加入数据库有16条数据,那么无无非就是16次匹配与log₂16 = 4次匹配的区别。但是数据库用户一旦起来多达1000万条是可就是1000万次匹配24次的区别了(log₂10000000 = 23.25)。这里的log底数是2
因此可见数据结构和算法的重要性,已经成为大厂面试的必问题。而对于工作中遇到复杂的系统,大的数据量时,好的算法和数据结构直接影响系统的系统和用户的体验。(持续更新)