文章目录

今天,我想聊聊在数据结构与算法学习路上的一些小感想。2018 年 8 月左右,开始有计划、有目的性地学习这门知识。当然,这期间也会有怠慢的时候。不过,在这断断续续的 21 个月里,对于学习数据结构与算法这件事儿有了一个更新层次的认识与思考。下面,从两个方面聊聊:学到了什么?为什么而学?

学到了什么?

数据结构与算法。不不不,这只是问题在字面意识上的答案。我想讲的是,通过数据结构与算法这门课程,到底学到了什么,或者说我学会了什么?

在之前,买过那些正规传统的教科书似的书籍,比如严蔚敏的《数据结构》。当然,像《算法导论》这样的神书是不会错过的。作为一个初学者来说,这两本书在学习上带来了很大的帮助。不管怎么说,这个阶段是一直在学习那些经典的、成熟的数据结构与算法。然后,会到 LeetCode 上做一些算法题目。我们知道,LeetCode 上的题目是那种面向面试的问题,可以说几乎每个题目都是用一些非常明确的算法或者数据结构去解决的。总体来说,就是学习一些固有的知识 —— 经典的数据结构与算法,然后通过在 LeetCode 上解题,能够让知识固化在头脑中,不至于忘掉了,即用固有的知识解决明确的问题

在这一阶段的学习中,通过不断地摸索,发现需要掌握的知识点基本上都可以在李煜东所著的这本《算法竞赛进阶指南》一书中找到。所以,这本书也是我目前学习的主要工具书之一。

然而,最近通过参加了一些更有难度的算法竞赛之后,比如 AtcoderCodeforces和 Google 的 Code Jam,产生了一些新的认知。

可以看出来,这些竞赛题目的描述相对于 LeetCode 更加的冗长,更加的现实化,生活化,不会那么的直接了当。这往往需要参赛者去了解问题,分析问题进而设计独有的算法去解决问题。通常来说,一些题目的算法并没有用到一些固有的经典算法,而是需要对具体问题进行具体分析,设计独特的算法才能解决。从这个层面上来说,考察的重点从固有知识的掌握转移到了对问题的分析与解决能力上。

有人会问,你学习算法有用么?当然有用。无论是实际工作中遇到的工程问题,还是在算法竞赛中的算法问题,在解决的过程中都是有其共同之处 —— 分析问题、提出方案与解决问题,即所谓的解决问题的能力problem solving skill)。所以,通过上一个阶段不断地摸索与学习之后,学习方向慢慢地转向了对解决问题能力的提升上面来。

有了这样的思考之后,又到了图书馆翻阅了几本书籍。这次寻找的方向不再是那些正统的算法书籍,而是从问题出发,对问题进行分析与理解,设计算法并解决问题。因为,算法的本质就是先有问题,再对问题进行分析,最终形成一种高效的,合理的,符合特定场景的执行步骤。那么,从这个角度来入手,对于算法兴趣的激发,感受算法的神奇之处都有很大的正向作用。所以,最近会翻阅一下《算法的乐趣 – 王晓华》这本书。

为什么而学?

在之前的阶段中,学习数据结构与算法的目可以说是为了证明自己。比如,为了能够更快地解决竞赛的问题,拿到更好的名次;为了能够在工作中,展现更加扎实的基本功;甚至为了能够显出自己的与众不同之处。虽然,这些想法也是非常正常不过的,但的确少了一份坦然。

樊登在读书节目中讲到,如果学习一项知识的过程中,内心总是有一杆秤,暗暗地去攀比,以便证明自己的能力,那么这是一种固定型心态。这种心态的人,往往做某件事情时是为了证明自己。与之相反的是成长型心态,这种类型的人能够沉浸在学习的过程中,并从中感受到乐趣。

当然,我并没有认为哪种心态的人更好或者更坏。但是,既然将数据结构与算法作为自己的研究兴趣,那么选择成长型心态,会给自己带来多一份的乐趣,丢掉多一份的焦虑。这也是为什么说,在之前的学习阶段中并没有那么的坦然所在。希望能够在接下来的阶段,为了学习而学习,在学习的过程中感受其中的乐趣,并且丰富自己成长起来

综上,就是在走过这一阶段的数据结构与算法学习之路的一些心得,继续加油!

胡小旭
2020 年 04 月 15 日 于北京


原文链接:数据结构与算法,我到底为什么而学?

Share:

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.