计算机科学数学


66

我已经阅读了有关该主题的几个答案,但仍然有疑问。.有很多数学课程,但我不知道该选哪个课程。每个计算机科学家都应该参加哪些数学课程?哪个班应该是第一班,为什么?

Answers:


89

非常重要的问题!对数学的良好理解对于每位计算机科学家都是必不可少的,并且数学要求开始变得越来越多样化。

  • 离散数学是计算机科学中最重要和最基础的课程,因此,它通常在CS部门而不是数学部门中提供。本课程将为您的算法入门打下基础,并讲授如何数学证明事物,并为您提供分析数据结构和算法的基础。
  • 微积分虽然不是直接在入门级计算机科学课程中使用的,但通常是大学提供的一系列旨在增强您的数学技能的课程。但是,当您开始接触数值编程和机器学习之类的东西时,它将被证明非常有用。这也是高级概率/统计课程的要求。
  • 概率通常在离散数学课程中有所涵盖,但是您可能想在数学和统计系学习关于连续概率分布和统计推断的课程。这将使您更好地理解如何进行数值计算和仿真,这对于机器学习是必不可少的(计算机科学最重要的应用之一。
  • 线性代数是一门您将主要对机器学习和(高级)算法类有用的类,但是它在计算机视觉,计算机图形学,机器学习和其他定量子学科中的重要性至关重要。

也就是说,如果有机器学习课程的入门课程,它们可能会涵盖足够的线性代数和其他您可以通过基本概率课程获得的知识。但是,对于计算机科学的研究生学习来说,对以上所有数学领域的充分理解是必不可少的。

除本科数学外,高级数学课程还对计算机科学的某些理论领域(例如与经济相交的算法博弈论)有用,尤其是在超越机器学习从业者的范围内开发新算法。这些课程包括:

  • 真正的分析,包括测度理论,您将发现,如果您对概率和微积分的研究时间足够长,它们将再次收敛。通常,在开始使用涉及数字的算法时,要了解分析是很有用的。

  • 优化包括线性优化凸优化梯度下降等。在许多情况下,“学习”机器学习模型基本上可以归结为优化目标函数,并且该函数的属性(例如是否凸)会对优化的难易程度产生很大影响。

  • 数值方法:某些人本质上不会认为这是数学课,但是在将算法和理论转换为不完美的浮点数学表示法时,有许多实际问题需要解决。例如,log-sum-exp技巧

  • 对于那些将要进入“数据科学”和相关领域的人来说,高级统计尤其是因果推理非常重要。有很多事情要知道,主要是因为可以访问很多数据,对于初学者来说很容易引起这个问题


我应该参加这些课程以便您列出它们吗?
LoLzMan

在典型的四年制大学中,您将在第一年开始微积分课程,然后在满足CS课程中的一些基本要求后立即上离散数学。然后,如果您进入计算机科学的更多定量子领域,则可以参加更高级的概率/统计课程和线性代数。
安德鲁·毛

1
我已经认真编程35年了。当我在Dice上发帖时,我在几天之内有多个6个数字的报价。我可以从经验中告诉您,数学与认真的编程几乎没有关系。有例外吗?当然可以,但是我要说的是,一个擅长数学的人可能是一个糟糕的程序员。
pat capozzi

2
@patcapozzi编程只是计算机科学的一小部分:)
Andrew Mao

3
@patcapozzi您绝对正确。编程几乎与数学无关。但关键是,编程不是计算机科学。计算机科学涉及建模,系统设计和体系结构,开发算法,解决问题等。实际上,编程只是实现的一部分,这是最后一个阶段。
无限

9

2
这些都与99%的编程无关。如果数学是如此重要,那么数学课在哪里?
pat capozzi

3
我一直在应用:组合数学,离散数学,概率,数学逻辑和线性代数直接用于编程,它们都与算法有关。
dud3

1
我认为计算机科学和程序设计通常是等同的,但是它们是不同的学科。由于大多数复杂的概念通常都封装在编程语言或库中,因此即使没有CS学位也可以学习编程,而实际上仅具有基本数学知识。但是,这些概念的基础扎根于CS,需要一定的数学知识才能理解,尤其是在算法设计/优化方面。
verboze

6

由于您指定了“计算机科学家”,因此我们将采用以下艰难的路线:

  1. 算法分析依赖于微积分,微分方程和离散数学。(许多观点认为算法是计算机科学和软件工程程序之间的主要区别)。
  2. 计算机图形学/科学可视化需要某种工程分析背景:数值方法,线性代数等。
  3. 计算几何
  4. 函数近似
  5. 集合论,逻辑/一阶微积分
  6. 概率/统计
  7. 清单继续:)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.