计算机数学基础的参考

作者:徐咪咪
链接:https://www.zhihu.com/question/22539111/answer/21728449
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作为联合数学计算机专业(Joint CS/Math)的学生,我明白你是什么意思。这些数学术语看起来很高端很前沿,其实就是逗你玩,让计算机本科生觉得数学家好伟大的一个东西。也就是说,不用学那么多数学,paper也可以看懂。

最基础所以也是最重要的的当然是离散数学(Discrete Math) ,其内容包括很基础的排列组合、图论、数论等。第一层要求就是知道术语,这样看paper就不会那么恶心了。第二层是明白定义想得出来基础证明和了解应用方向,作为计算机专业,这个你肯定听得多了。第三层是能自行计算,延伸等。这是个很像高中奥林匹克数学的大学计算机基础课。假如你都知道就当我没说。假如你很多东西都不知道的话就去上一门Discrete Math的课吧。Coursera有,MIT OpenCourseWare 也有(MIT OCW不用等:Mathematics for Computer Science)。

万一看不下去paper总得有学术之外的事情做吧。计算机专业的话,我假设你的数据结构(Data Structures)跟算法(Algorithms)都说的过去,不然找不到工作。其中算法与数学关系较大。尽管离散数学不好算法怎么学得好我也不知道。。。学术方面,算法跟图论有很多重叠,但我还是假设你的离散数学还可以,所以你只要是看CLRS(算法导论/Introduction To Algorithms)到证明NP-Completeness就可以了。

之后便是运筹/线性最优化 (Operations Research/Linear Programming),组合优化的一个重要部分。我估计你在看跟这个有点关系的paper。此学科听起来很恶心,但是学起来很容易很容易,只需要线性代数的基础,连eigenvalue什么的都一般不需要。普通的linear programming你应该在学算法的时候接触过,没接触过的话请复习CLRS。要想学些这方面的应用数学,Coursera有Linear & Discrete Optimization 还有 Linear & Integer Programming。选一个老师长得比较顺眼的,六个礼拜应该可以搞定。

概率论和随机过程其实算是两节课,但是概率论比较简单(假设离散数学没有问题的话),所以学完线性最优化之后就应该是Stochastic Optimization/Methods/Processes。这个找大学教材就可以了,很完善的一堂课,应用数学啊工程啊都会去上。其实要是只为了读懂这个paper,查一下用的模型就可以了。

代数对于你过于抽象,离CS应用比较遥远,除非你在做化学有关的课题。我在数学系学到表示论(Representation Theory)跟侧重数学的傅立叶分析(Princeton Lectures: Fourier Analysis by Stein)等虐死人的课才能深刻理解DFT,FFT等本科工程师整天用结果的东西,那时才了解到大多人要研究很多很多年才能提取出这个CS-Algebra相关的抽象。再说跟你想看的paper的关系也很小,所以暂时不必要。

数学分析很有用,但是也不是什么外行喜欢看的学科,跟你的paper有关系的概率十分地小,假如有关系的话也很可能是你半年学分析还没学到的,是个得不偿失的选择。


加: machine learning 和 data mining 这种超级火的东西,我还没有review过很多教材,所以不能说我什么都很知道。但从我看到过的,线性代数都会被用到。我知道feature extraction总是要用些signal processing,spectral theory的东西的。所以线性代数还是要学到深一些为好。但线代本身其实是学不完的,所以我想最基础的也应该学到change of basis, eigen啥啥,最好能明白pseudo-inverse。
原文地址:https://www.cnblogs.com/feng9exe/p/10608780.html