怎么才算真正掌握了一个数据结构或算法?

关注微信公众号“小争哥”,回复PDF获取Google工程师的算法学习和面试经验

很多人学算法都是死记硬背代码实现,对于一些简单的数据结构和算法,背起来还不复杂,但是,对于比较复杂的,比如红黑树、字符串匹配中的BM、KMP算法、AC自动机,看懂都难,更别说背下来一直不忘了。事实上,在我们学习数据结构和算法的时候,真的需要背诵原理、代码实现,还追求一直不忘吗?

要搞清楚这个问题,我们需要知道,怎么才算是真正掌握了一个数据结构和算法?这个问题要一分为二的看。我们可以将数据结构和算法,简单的分为基础部分和高级部分。

那哪些属于基础的部分呢?

比如链表、数组、队列、栈、二叉树、堆、图的定义等这些算是基础的结构,排序、二分查找、二叉树的遍历、图的广度、深度优先搜索、字符串朴素匹配算法,这些算是基础的算法,还有递归、分治、贪心、回溯、动态规划,这些算是基础的算法思想。

那哪些属于高级的部分呢?

比如我们开头提到的红黑树、BM算法、KMP算法,还有AC自动机等,还有图的一些算法,这些都属于一些高级的数据结构和算法部分。

实际上,不管是基础数据结构和算法,还是高级数据结构和算法,我们更侧重掌握它的特点、时间空间复杂度、能解决的问题、应用场景。毕竟掌握了这些之后,我们就可以在实际的开发中,遇到相应的问题或者场景,能快速的反映出,可以用哪种数据结构和算法解决。对原理或者代码实现,即便你可能已经记忆不清楚了,但也可以通过重温一遍,快速的掌握。实话讲,你让我再讲一讲红黑树的原理、BM、KMP算法的处理流程,我也说不出来,但这并不影响我可以灵活的应用他们。

不过,对于前面提到的基础数据结构和算法,我们可能要掌握的东西更多一些。除了特点、复杂度、能解决的问题、应用场景之外,我们还要牢固掌握原理,并能轻松代码实现。因为,毕竟这些基础的数据结构和算法,原理和实现并不复杂,而且很多都是其他高级数据结构和算法的基础。

但是对于前面提到的高级数据结构和算法,我们就不需要背诵原理和实现了。大部分情况下,像红黑树、BM、KMP算法之类的复杂数据结构和算法,我们只需要当下能看懂,能对照原理,一步一步将代码实现,就可以了,不必强迫要求自己合上书之后,还能把原理默背出来、代码莫写出来。

你可能还会纠结于说,虽然当下能看懂,但过不几天又忘了,算是掌握了吗?

实际上,我们回归到学数据结构和算法的本质上,实际上,它更多的是锻炼一种逻辑思维能力。而你能看懂一个复杂的算法,本身就需要花费很多的时间、脑力去思考,这本身就是一种逻辑思维能力的锻炼。我们要重视过程,而不要太重视结果。毕竟学习算法不是为了考试,不要被应试教育所束缚。

你可能还会说,原理我能看懂,但代码实现不了,咋办?

实际上,代码实现能力是一种综合能力,切不可过于着急。如果你平时都是写些逻辑并不是很复杂、不是很烧脑的CRUD业务代码,那逻辑思维能力锻炼、复杂算法编码翻译能力的锻炼,实际上是很欠缺的,想要一下子就能实现像BM、KMP这样的复杂算法,实际上是不现实的。所以,你需要从实现简单的算法、数据结构开始,慢慢锻炼自己的逻辑思维能力,复杂逻辑的代码翻译能力。

你可能还会说,记不住红黑树、BM算法、KMP算法的原理和实现,面试的时候被问到,咋办?

实际上,几乎没有面试官会问你这些问题的。这些都是纯记忆性的文科问题,即便你能写出红黑树,也只能说你背诵能力不错,并不能考察到什么逻辑思维能力、算法能力。不过,我也听过确实有面试官拿红黑树的左右旋的调整来考察候选人。对于这种情况,面试官本身可能就是不靠谱的,我们直接无视就好,换家公司再面试。

总之,学一个东西,我们要知道学什么?学习的侧重点,掌握到什么程度算是ok了,这样我们才能有的放矢,事半功倍!

关注微信公众号“小争哥”,回复PDF获取Google工程师的算法学习和面试经验

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值