计算机科学数学[关闭]
Posted
技术标签:
【中文标题】计算机科学数学[关闭]【英文标题】:Math for computer science [closed] 【发布时间】:2013-01-29 21:07:36 【问题描述】:我已经阅读了关于这个主题的几个答案,但我仍然有问题.. 数学课很多,不知道先学哪一门。 每个计算机科学家都应该参加哪些数学课?什么课程应该是第一个,为什么?
【问题讨论】:
【参考方案1】:非常好的和重要的问题!对数学的良好理解对于每个计算机科学家来说都是必不可少的,而且数学要求也开始变得更加多样化。
Discrete Math 是计算机科学最重要和最基础的课程,因此它通常在 CS 系而不是数学系提供。本课程将巩固您对算法的介绍,并教您如何用数学方法证明事物,并为您提供分析数据结构和算法的基础知识。 Calculus 虽然不直接用于入门级计算机科学课程,但通常是您的大学提供的一系列课程,用于提高您的数学技能。但是,当您开始涉足数值编程和机器学习等领域时,它将证明非常有用。这也是高级概率/统计课程的要求。 Probability 通常在您的离散数学课程中有所涉及,但您可能希望参加关于连续概率分布的课程和 statistical inference,可能在数学和统计系。这将使您更好地了解如何进行数值计算和模拟,这对于 machine learning(计算机科学最重要的应用之一)来说是必不可少的。 Linear Algebra 是一个主要用于机器学习和(高级)算法类的课程,但它在计算机视觉、计算机图形学、机器学习和其他定量子学科中的重要性至关重要。也就是说,如果有机器学习课程的介绍,它们可能会涵盖足够多的线性代数和其他您可以通过基本概率课程学习的内容。但是,对于计算机科学研究生而言,对上述所有数学领域的良好理解至关重要。
除了本科数学之外,高级数学课程对于计算机科学的某些理论领域(例如算法博弈论,它与经济学相交)也很有用,尤其是在超越机器学习从业者的情况下开发新算法方面。这些课程包括:
Real analysis,包括measure theory,你会发现如果你研究概率和微积分足够长的时间,它们会再次收敛。当您开始使用涉及数字的算法时,分析通常是一件有用的事情。
Optimization,包括linear optimization、convex optimization、gradient descent等。在很多情况下,“学习”一个机器学习模型基本上归结为优化一个目标函数,而这个函数的属性,比如它是否是凸的,对优化的难易程度有很大的影响。
Numerical methods:有些人不会认为这是一门数学课本身,但是在将算法和理论转化为浮点数学的不完美表示时,存在许多实际问题待解决。例如,log-sum-exp trick。
对于那些将从事“数据科学”和相关领域的人来说,高级统计,尤其是causal inference 非常重要。有很多事情要知道,主要是因为访问大量数据会吸引 this problem 为外行。
【讨论】:
我应该按照你列出的顺序学习这些课程吗? 在一所典型的四年制大学中,您将从第一年的微积分课程开始,然后在您满足 CS 课程的一些基本要求后立即学习离散数学。然后,如果您进入计算机科学更定量的子领域,您可以学习更高级的概率/统计课程和线性代数。 我认真编程已经 35 年了。当我在 Dice 上发帖时,我会在几天内收到多个 6 位数的报价。我可以从经验告诉你数学与严肃的编程几乎没有任何关系。有例外吗?当然可以,但我什至可以说,一个擅长数学的人可能是一个糟糕的程序员。 @patcapozzi 编程只是计算机科学的一小部分 :) @patcapozzi 你是绝对正确的。编程几乎与数学无关。但关键是,编程不是计算机科学。计算机科学是关于建模、系统设计和架构、开发算法、解决问题等。实际上编程只是实现的一部分,是最后一个阶段。【参考方案2】:Combinatorics,numerical analysis,discrete mathematics,mathematical statistics,probability theory,information theory,linear algebra,lambda calculus,lambda calculus,mathematical logic,category theory,process calculus等p>
【讨论】:
这些都与 99% 的编程无关。如果数学如此重要,那么数学课在哪里? 我一直在应用:组合数学、离散数学、概率、数学逻辑和线性代数直接应用于编程,它们都与算法有关。 我认为计算机科学和编程经常被等同起来,但它们是不同的学科。一个人可以在没有 CS 学位的情况下学习编程,实际上只需要基础数学,因为大多数复杂的概念通常都封装在编程语言或库中。然而,这些概念的基础植根于 CS,并且需要一些不错的数学知识才能理解,尤其是在算法设计/优化方面。【参考方案3】:既然你指定了“计算机科学家”,我们就走硬路线:
-
算法分析依赖于微积分、微分方程和离散数学。 (许多人将算法分析视为计算机科学和软件工程程序之间的主要区别)。
计算机图形/科学可视化需要工程分析背景:数值方法、线性代数等。
计算几何
函数逼近
集合论、逻辑/一阶微积分
概率/统计
名单还在继续:)
【讨论】:
以上是关于计算机科学数学[关闭]的主要内容,如果未能解决你的问题,请参考以下文章