Skip to content

如何自学知识点

持续一学期的课程,对“数据结构与算法”的知识点做不到完全覆盖,未来的学习、备考、科研、工作等场合,大家很可能还要自学一些课上没出现的算法与数据结构知识点。

这篇文档给出一种方法,对于一个课上未涉及的数据结构与算法知识点,可以通过一系列自学步骤,达到接近在课上讲解和练习的学习效果。

基本步骤包括“理论学习”和“代码实现”两个步骤。

  • 理论学习:通过理论学习材料,掌握算法/数据结构的动机、原理、时空复杂度等。
  • 代码实现:通过代码练习题,掌握算法的实现细节。

理论学习材料包括:讲解算法的书籍、算法和数据结构相关的网课、关于这个知识点的博客、论文(首次提出这种算法/数据结构的论文)。如果按照从简明到详尽的顺序排列,顺序是:博客、书籍、网课、论文。

通过搜索引擎查找“知识点名称 网课” “知识点名称 讲解” “知识点名称 论文” 一类关键词,容易找到一批理论学习材料,选择其中通俗易懂的进行学习。

代码实现主要通过算法题目在线做题网站(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