如何自学知识点
持续一学期的课程,对“数据结构与算法”的知识点做不到完全覆盖,未来的学习、备考、科研、工作等场合,大家很可能还要自学一些课上没出现的算法与数据结构知识点。
这篇文档给出一种方法,对于一个课上未涉及的数据结构与算法知识点,可以通过一系列自学步骤,达到接近在课上讲解和练习的学习效果。
基本步骤包括“理论学习”和“代码实现”两个步骤。
- 理论学习:通过理论学习材料,掌握算法/数据结构的动机、原理、时空复杂度等。
- 代码实现:通过代码练习题,掌握算法的实现细节。
理论学习材料包括:讲解算法的书籍、算法和数据结构相关的网课、关于这个知识点的博客、论文(首次提出这种算法/数据结构的论文)。如果按照从简明到详尽的顺序排列,顺序是:博客、书籍、网课、论文。
另外,你也可以尝试利用AIGC工具对知识点做大致的了解,但要小心,它的回答不一定对。(上述其他学习资料也可能出错,一样要小心)。
通过搜索引擎查找“知识点名称 网课” “知识点名称 讲解” “知识点名称 论文” 一类关键词,容易找到一批理论学习材料,选择其中通俗易懂的进行学习。
代码实现主要通过算法题目在线做题网站(Online Judge)进行。例如在leetcode、poj等大规模的算法习题网站上,完成3至5道难度不等的习题。
我们也尝试对课上的一些知识点整理了额外的题目,供练习使用。
通过搜索引擎查找“知识点名称 做题网站名称”,例如“线段树 poj”,就可以找到一系列的相关题目。
在自学过程中如果遇到疑问,可以多方求助,例如在stack overflow上提问、或在做题网站的社区提问。
部分网站链接
在学堂在线搜索“数据结构”可以免费学习邓老师制作的慕课。
LeetCode: LeetCode(力扣)是一个在准备算法面试中受认可程度较高的做题网站,有较为丰富的社区分享。
POJ: PKU Online Judge, 由北京大学ICPC队伍维护的算法竞赛做题网站,有比较丰富的题库。
Stack Overflow: Stack Overflow是一个程序设计领域的问答网站,主要使用英文。提问前可以先尝试用英文搜索有没有类似的问题。
Stanford的几门算法和数据结构相关课程的主页,有一些课件可供下载(这些课程主页的网址可能会变动,可以通过搜索引擎搜索最新的课程主页)
- CS161算法设计与分析 https://stanford-cs161.github.io/
- CS166 数据结构 http://web.stanford.edu/class/cs166/
- CS361高级数据结构与算法 http://theory.stanford.edu/~rajeev/cs361.html