我与《数据结构与算法》相爱相杀

  事情还得从2017年说起,那时候去面试,面试官问我怎样实现一个字典,当时我就懵住了,说了一句“不知道”。面试官笑着说:“你是有几年开发经验的程序员应该知道”,我说:“因为我觉得在实际项目中没有用,所有就没有去了解这块的知识”。面试官还是很善意地笑着说:“还是学习一下好,了解这块,可以做很多优化相关的东西”,然后给了我很多相关方面的建议,这次面试的结果可想而知。从这以后,我就下定决心去学习《数据结构与算法》这个课程,下面说说我一波三折的学习过程。
  首先跟着《数据结构与算法C版》学习了20多天就实在坚持不下去了。虽然里面也有图解,但还是晦涩难懂,对于我这种没有任何这方面知识的小白来说完全不知道在说什么,放弃之后心里痛快多了不像之前那么压抑、不会怀疑不适合当程序员、不会怀疑人生。时间如白驹过隙,一晃半年都过去了,自己在新公司也比较稳定,已经彻底忘记了这件事情,直到这件事情的发生。
  一个同学买了一套Python视频课程,我也想学习一下这个当下比较火的语言,就拷贝了一份,竟然发现里面有《数据结构与算法》的视频,这又勾起了我学习的欲望。跟着视频学习确实比跟着pdf电子书要容易一点,但是感觉老师水平不行,有时候讲着讲着把自己都绕进去了,出的bug自己也解决不了了,最后来了一句“我反正备课代码都没有问题,你们自己下去照着抄一遍就行了”。很多时候老师自己敲代码都不明白啥意思,只是告诉学生要这样敲。我就这样坚持学习了一个月,讲到二叉树那里实在坚持不下去了,太枯燥无味了,太痛苦了。已经第二次了,我有点讨厌了,发誓再也不学习了。
  时针和分针就这样转着转着来到了2019年,当听到MJ要开《恋上数据结构与算法》直播课程,我欣喜若狂,第一时间就在腾讯课堂就报名了。之前就听过MJ的大名,讲课通俗易懂、风趣幽默、激情满满,讲的全都是干货,不会让你觉得人云亦云,让你知其然并知其所以然,看来我要违背誓言了,呵,男人。报名后等待了一个多月,等得花儿都谢了,终于开课了。
  直播第一节课讲的是复杂度。上课时我聚精会神,两个多小时的课程一直跟随着MJ的节奏,生怕一个不留神,MJ号列车就飙的很远了。整堂课下来收获满满,我终于搞明白了大O表示法,终于搞明白了啥叫O(1)、O(logn)、O(n)等等。每次上完课都期待下次课快点到来,听课不仅仅是视觉和听觉的享受,还被MJ的代码思想所折服。
  左手右手一个快动作,右手左手快动作重播,看代码从MJ指间流出,如行云流水,一发不可收拾,就这样上完了链表这节课。自己之前也学习了链表,也能囫囵吞枣把代码写出来,也不明白为啥要用链表。现在终于明白了链表一种链式存储的线性表,所有元素的内存地址不一定是连续的,可以用多少申请多少内存,不会造成内存地址浪费。
  链表之后又学习了栈、队列,只要把链表的知识掌握,栈和队列还是小菜一碟。紧接着来到了紧张又刺激的二叉树课程,上一次就在这里放弃的,俗话说在哪里跌倒就在那里爬起来。MJ肯定费了九牛二虎之力用详尽的图表把晦涩难懂的二叉树表现得淋漓尽致,让学生不懂都难,可见用心良苦,这种一切为了学生,为了学生一切的精神可佩可叹。上完课后,彻底明白了真二叉树、满二叉树、完全二叉树的概念和性质;明白了二叉树的前序、中序、后序、层序遍历;明白了二叉树的反转,有种凤凰涅槃 浴火重生的感觉。
  二叉搜索树、AVL树都能跟上MJ的步伐,等到了红黑树实在是跟不上了,并不是讲的不明白,而是红黑树添加和删除情况太多,初次接触让人感觉很难。 鲁迅都说过"真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血",作为铁粉必须牢记名言并且去执行。上完课很多同学都在群里反应太难了,MJ就在微信群里耐心地指导“要把ppt上面的图都理解了再敲代码就好多了”,并且耐心地解答每一个难点,我就顺着MJ的思路用了一天半时间理解性地把代码敲完了。欲穷千里目,更上一层楼,我们遇到难爬的“树”要迎难而上,越爬越勇,只有爬到“树”顶才能看懂高深的数据结构,才能明白HashMap、字典的底层是怎样封装的,才能以更优的方式解决Top K的问题。
  写这篇文章的时候,按照腾讯课堂上面的课表,课程已经结束了,但是又临时加了两节课。MJ不会为了赶课而跳过一些内容,他必须要把他想传授的知识都讲完,这不印证了唐宋八大家之一的韩愈说过的“师者,所以传道受业解惑也”,MJ一个大写的“师者“,一个有良心的培训老师。期待接下来的两节课程:哈夫曼树和Trie。
  课程学到现在个人觉得有三个分水岭:链表,二叉搜索树,红黑树。理解了链表,那么后面的栈和队列就没有问题,因为栈和队列都在链表的基础上进行适当地修改。理解了二叉搜索树,那么就要思考怎样进行平衡,那么就出现了平衡二叉搜索树的LL、RR、LR、RL四种旋转情况,理解了旋转就能更好的写出AVL树和红黑树的代码。理解了红黑树,HashMap、HashSet都不是问题,都是在红黑树基础上进行改造的。
  喜欢老师的讲课风格,喜欢老师精心打磨每个知识点的精神,喜欢看老师的封装和优化过程,喜欢老师“闲看庭前花开花落”的心态,期待着第二季的到来。

转载于:https://blog.51cto.com/shenlongfuhuo/2401495

你可能感兴趣的:(我与《数据结构与算法》相爱相杀)