毕业6年左右, 在工作中真真不需要使用到算法, 只是不断地谈业务需求, 实现业务功能, 产品上线, 自己是积累了一定的业务能力和一些管理经验. 但是有时静下心来, 对于一个程序媛来讲, 不由得觉得心虚. 于是决定还是要提升自己的代码能力和逻辑思维能力. 看到极客大学举办的数据结构与算法课程, 毫不犹豫就报了名, 作为重拾算法的起点吧.
一个多月的算法学习, 基本历程如下:
首先, 阅读王争老师的<<数据结构与算法之美>>专栏, 该专栏对数据结构和算法的讲解确实很细致, 既简易清晰, 又不乏有深度. 对于数据结构与算法基础为0或相关基础比较薄弱的初学者, 确实是首选, 学习起来也不会枯燥乏味. 每每了解一种数据结构和算法之后, 就忍不住自己也推算一遍, 并用自己熟悉的编程语言(java)实现一遍. 然后再对照专栏中代码样例, 找出自己代码的漏洞, 再进行思考总结, 比如边界条件考虑不周; 或者是思维方式, 解题思路需要转变, 比如动态规划解决0-1背包问题, 用二维数组来记录每层达到的不同状态, 那么用一维数组是否也可以解决问题呢, 这样还可以提高内存使用率…等等.每每需要修改的时候, 却也是收获满满的时候, 也体会到数据结构与算法之美呀.
在学习数据结构与算法过程中, 也会去思考一些工业实现, 去琢磨其中使用到的数据结构与算法, 比如Java库中的HashMap, jdk8之前,内部实现是由数组+链表来实现; 在jdk8中的实现,当链表长度超过8时, 链表将转换为红黑树; 再比如Arrays.sort的底层实现, 对于基本数据类型, 采用双轴快速排序… 而对于对象数据类型, 会根据排序个数, 又采用不同的排序方式, 比如小于47个对象数据的排序, 采用插入排序…大于等于47但小于286个对象数据…采用快速排序, 大于等于286个对象数据, 采用归并排序. 当然我了解的也只是冰山一角, 但数据结构与算法确实是了