Skip to content

关于算法训练营 | 极客大学

GeekUniversity edited this page Apr 3, 2019 · 4 revisions

1. 我们的教学理念

  • 让优秀的人一起学习
  • 师傅领进门,修行靠个人

2. 学习安排

以下内容包括课前预习内容、线下大课内容、线上学习内容及提交作业、助教答疑、直播答疑的详细安排,请仔细阅读。

2.1 课前预习

4月1日-4月12日 算法训练营“热身运动”

2.2 线下大课

地点:北京中关村软件园国际会议中心 地址:东北旺西路8号中关村软件园四号楼AB座

课程内容 课程描述
4月13日 周六 9:30-18:30 主讲:王争
复杂度、数组、链表、栈、队列、递归 从算法基础开始讲起,结合案例介绍基础的数据结构和算法
排序与二分查找 讲解几种常见的排序算法、以及经典二分查找算法
动态数据结构 讲解各种支持动态增删改查的数据结构:跳表、散列表、二叉树、堆
字符串匹配算法 讲解BF、RK、BM、KMP、Trie树、AC自动机等常见的字符串匹配算法
图及相关算法 讲解深度、广度优先搜索、最短路径、A*算法等相关图算法
四种算法思想精讲 讲解贪心算法、分治算法、回溯、动态规划四种常用的算法思想
4月14日 周日 9:30-18:30 主讲:陈皓
算法题解题思路总结 数组(一维二维)、链表(单向、双向、跳表)、二叉树(遍历、搜索)、哈希表,以及数据结构的混合(如LRU),其中包括5-8个算法题
算法题解题思路总结 深度优先、回溯法、分治法、动态规划,其中包括3-4个算法题
深度优先+回溯法 深入讲解DFS和Backtracing的原理和思路,3-5个相关算法题讲解
分治法 + 动态规划 深入讲解分治法和动态规划,3-5个相关算法题讲解
动态规划 深入动态规划的经典解法,3-5个相关算法题讲解
面试的注意事项 面试算法时需要注意的事项,包括各公司算法题的难度分析,以及临场发挥和应变能力。

2.3 线上学习

线上学习的主要内容是王争老师在极客时间的《数据结构与算法之美》专栏。很多同学已经学习过专栏了,在训练营再次学习专栏,希望你能够做到思辨、践行、总结、归纳,有更多收获。

此外,训练营会把线下大课的视频上传至极客时间App内,并将阅码给到你,兑换阅码后,你就可以随时在线观看了。

每周学习内容和作业题目会发布在GitHub上,你需要完成至少两道算法题、提交一篇学习总结文章、Review并点评至少5名同学的作业。

如果你在学习期间遇到问题,可以在GitHub上留言,训练营的助教会进行回答。你也可以在社群中跟同学们互动讨论。

线上学习课程表:

时间 学习内容 作业
4月15日 - 4月21日 复杂度、数组、链表、栈、队列、 递归、排序、二分查找 2道算法题、1篇学习总结文章 Review并点评至少5位同学作业
4月22日 - 4月28日 跳表、散列表、哈希算法、二叉树、 红黑树 2道算法题、1篇学习总结文章 Review并点评至少5位同学作业
4月27日 直播:GitHub高频问题答疑
4月29日 - 5月5日 递归树、堆和排序、图、深度和广度优先搜索、字符串匹配 2道算法题、1篇学习总结文章 Review并点评至少5位同学作业
5月6日 - 5月12日 Trie树、AC自动机、贪心算法、 分治算法、回溯算法、动态规划 2道算法题、1篇学习总结文章 Review并点评至少5位同学作业
5月10日 直播:GitHub高频问题答疑
5月13日 - 5月19日 毕业考试:线上答题、全模块学习总结文章

(开课前我会在学习手册中更新“如何Review及点评同学的作业”)

以下,是几个重要时间点:

  • 学习任务发布:周五下午
  • 作业提交:截止到周六晚
  • 助教答疑:日常浏览GitHub并进行答疑

整体安排

开营周 4月8日-4月14日
4月12日 周五 发布 Week 1 学习任务、作业题目,成立班级社群,召开第一次班会
4月13日-14日 周六-周日 线下大课(地点:北京中关村软件园国际会议中心)
线上Week 1 4月15日-4月21日
4月19日 周五 发布 Week 2 学习任务、作业题目
4月20日 周六 Deadline:提交 Week 1 作业
线上Week 2 4月21日-4月28日
4月26日 周五 发布 Week 3 学习任务、作业题目
4月27日 周六 Deadline:提交 Week 2 作业,直播:GitHub高频问题答疑
线上Week 3 4月29日-5月5日
5月3日 周五 发布 Week 4 学习任务、作业题目
5月4日 周六 Deadline:提交 Week 3 作业
线上Week 4 5月6日-5月12日
5月11日 周六 Deadline:提交 Week 4 作业
5月12日 周日 毕业考试试题发布
结业周 5月13日-5月19日
5月14日 周二 直播:GitHub高频问题答疑
5月19日 周日 Deadline:毕业考试试题提交

4. 如何进行有效的提问

以下关于有效提问的建议,根据陈皓老师在《左耳听风》专栏“72 | 程序员练级攻略:程序员修养”中推荐的《提问的智慧(How To Ask Questions The Smart Way)》一文整理而来。这篇文章最早是由 Eric Steven Raymond 所撰写的,详细描述了发问者事前应该做好什么,而什么又是不该做的。作者认为这样能让问题容易令人理解,而且发问者自己也能学到较多东西。

对于很多能够在网上通过搜索、阅读专栏得到的答案,助教将不予回答。原文中也列举出了一些提问的禁忌和“好问题vs坏问题”的对比,强烈建议你阅读原文

提问前

请确信你已尽力尝试自己找到答案,比如说:

  1. 尝试在你准备提问论坛的历史文档中搜索答案
  2. 尝试搜索互联网以找到答案
  3. 尝试阅读手册以找到答案
  4. 尝试阅读“常见问题文档”(FAQ)以找到答案
  5. 尝试自己检查或试验以找到答案
  6. 尝试请教懂行的朋友以找到答案
  7. 如果你是程序员,尝试阅读源代码以找到答案

如果通过以上方式,你都没有找到答案,那么在提问时,也可以告诉被提问者,你已经尝试了什么方法寻求答案。

提问时

  1. 使用简明扼要的主题。使用主题的好惯例是“对象──偏差”(式的描述),“对象”部分指明是哪一个或哪一组东西有问题,在“偏差”部分则描述与期望的行为不一致的地方,这个过程有助于你组织对问题的细致思考。
  2. 用清晰、语法、拼写正确的语句书写。经验告诉我们,粗心与草率的作者通常也粗心与草率地思考和编程(我敢打赌),清楚、良好地表达你的问题非常重要。
  3. 使用易于读取且标准的文件格式发送问题。比如,使用纯文本而不是 HTML;勿滥用“表情符号”......
  4. 描述问题应准确且有内容。比如,仔细、清楚地描述问题的症状;描述提问前做过的研究及其理解;描述提问前为确定问题而采取的诊断步骤等。
  5. 量不在多,精炼则灵。你应该写得精炼且有内容,简单地将一大堆代码或数据罗列在求助消息中达不到目的。
  6. 描述问题症状而不是猜测。确保只是告诉他们问题的原始症状,而不是你的解释和理论,让被提问着来解释和诊断。
  7. 描述目标而不是过程。如果你想弄清楚如何做某事,在开头就描述你的目标,然后才陈述遇到问题的特定步骤。
  8. 提问应明确。漫无边际的问题通常也被视为没有明确限制的时间无底洞。如果你明确了想让回复者做的事(如指点方向、发送代码、检查补丁或其它),你更有可能得到有用的回复。
  9. 关于代码的问题。别要求他人给你出问题的代码排错而不提及应该从何入手。张贴几百行的代码,然后说一声“它不能运行”会让你得不到理睬。只贴几十行代码,然后说一句“在第七行以后,本应该显示,但实际出现的是”非常有可能让你得到回复。

得到回答之后

如果你看不懂回答,不要马上回复一个要求说明的消息,先试试那些最初提问时用过的相同工具(如手册、FAQ、网页、懂行的朋友等)试着搞懂回答。如果还是需要进一步解答,请展现出你已经明白的部分。

5. 学习算法的方法建议

在陈皓老师和王争老师的专栏中,提到了非常多关于“学习”的建议。将这些文章推荐给你:

陈皓 | 左耳听风

王争 | 数据结构与算法之美

6. 推荐书单

  • 基础知识:《算法》《算法图解》
  • 理论加持:《算法导论》
  • 思维改善:《编程珠玑》

如果你想有科班出身的理论基础,那么这些书是必读的:

  • 《数据结构与算法分析》
  • 《数据库系统概念》
  • 《现代操作系统》
  • 《计算机网络》
  • 《计算机程序的构造和解释》
  • 《编译原理》

以上摘自 陈皓 | 左耳听风 74 | 程序员练级攻略:理论学科