CS70: Discrete Mathematics and Probability Theory
- 开设学校:UC Berkeley
- 课程页面:eecs70.org
介绍
首先,CS70是一门关于数学的课程,主要讲了离散数学(集合论,图论,数论,数理逻辑)和概率论,但北大的离散开了三学期,国内离散也普遍开两学期,而且概率论(和数理统计)可以作为一门课单独的拎出来,可想而知,课程内容能做到如此广阔,70这门课程一定做了相当程度的化简。 这是一门帮你快速入门的课,能帮你大致的过一遍计算机需要用到的数学。
大致内容如下
- 基本逻辑,证明(直接、矛盾、反证)
- 归纳,稳定匹配,图论(超立方体、欧拉路径、哈密顿路径)
- 模算术(欧几里得算法、扩展欧几里得算法)
- 双射、RSA、费马小定理
- 有限域上的多项式(秘密共享、纠错码、Berlekamp-Welsh)
- 可数性和可计算性(停机问题)
- 计数和组合参数
- 离散概率, 条件概率, 概率推断(贝叶斯规则), 独立
- 概率:期望和方差(具有哈希表的应用进程)
- 大数定律、置信区间、线性回归
- 分布(离散、连续)
- 边界(马尔可夫、切比雪夫、中心极限定理)
- 线性回归
- 条件期望
- 马尔可夫链
在reddit里曾经有UCB的老哥抱怨过CS70自己学了900个小时,虽然说的很夸张,但是也或多或少表现了CS70这门课程的特点。即,CS70讲的每一个话题都上限极高,深挖下去基本都是时间黑洞,比如stable matching problem 足足出了一本书,这个问题挖下去挖出了个诺贝尔奖。
因此强调一下,70的内容有些学下去真的非常难(但是有趣),而且真的是个无底洞,所以你出现“这是什么。”的情况是非常常见的,不要自闭。我个人其实非常鼓励稍微挖一下70的内容,和现实联系一下,不仅方便你装逼,而且确实是能帮你学习相关的知识。
为什么要学习70,或者说为什么要学习数学,70的作用
首先,四大都开了有关离散数学的课程,光是这点就已经说明一些东西。
但是说实话,其实,可能,80%的工作都用不到数学有关的东西,70从工作的意义上而言,是给喜欢计算机的艺术家学的,找工作真得选培训班。(不过密码学这些专业的就老老实实学数学这些东西吧)
就我个人而言,70的作用有两个:
一个是学习离散和概率论,明白了一些东西的数学原理,数学真的还是很有趣的。
还有一个,也是我认为同样重要的一个东西就是,我练习了英语。
70的note是需要花大量时间去阅读的,经常出现,一天下来,发现自己就看了一节note的情况。这个过程是痛苦的,尤其是对于一个不适应长篇英语阅读的人而言(比如我),但是,我觉得这是一个非常好的练习机会,学完70以后,降低了很多英语阅读的痛感吧,以前看note是十分痛苦,现在大概是六分痛苦。(还是很痛)
但是话说回来,离散也许确实不是那么重要,英语阅读也许不是我们需要为之努力的点。可就我个人而言,我觉得还是值的。如果你特别着急的话,可以选择把70欠着。以后有空再回来补。(顺便一提CS170是有CS70前置的。)
学习建议
- 保持乐观的心态,你并不参加UCB的考试,所以错的越多,你赚的越多。
- 如果note看起来非常困难的话,你可以看MIT6.042J的网课帮你理解一遍相关内容。
- 数学是需要多练习的,不要忽略练习。
(分享某天自己写的东西。) 给同学讲70的某个note,从halting problem讲到,不存在完美的程序,讲到不存在可数不可数的bijection,接着讲到数学的不完备,然后再讲到现代集合理论的构建。70真是太伟大了。第一次发现自己那么能讲。
学的时候感觉自己每天没学多少,但是一个多月下来,和别人吹b的时候,发现自己真的学了好多。讲的时候感觉自己太帅了,知识体系一下子有机的结合在了一起,简直是天神下凡。这种体验也许是我一生中最好最爽的几个体验之一。
也许数学对于工作而言不是那么的重要,对于大部分人也看不到什么应用到现实的机会,但是对于那个时候的我而言,我觉得很棒。 希望你也能有这样的体验。