6

我已经意识到迟早我会想要构建更复杂的应用程序,这些应用程序将做出更好的决策,而不仅仅是简单的 if/else 语句。

我现在的数学背景是基础三角学,我想获得能够创建和理解算法所需的技能。

根据我的研究,我需要了解和学习以下主题:

  1. 高级代数
  2. 结石
  3. 离散数学

这是我得出的结论。另外我想知道是否有一个网站可以让您练习这种类型的数学并跟踪您的进度。

谢谢。

4

5 回答 5

5

让我列出几个领域以及为什么要学习它们:

代数/数论:有许多有用的数论算法,在某些时候您可能需要使用/修改现有的算法。了解它们为什么工作背后的理论可以大大更容易记住它们(如果你碰巧忘记了,可以重新提取它们;))。这种算法的经典将是欧几里得算法,用于找到两个数的最大公约数。更高级的算法,如二次筛等,在密码学中有很多用途。

图论:我希望我不需要解释太多。图用于解决计算机科学中的许多许多不同的问题。它们用于表示网络、对象之间的关系,以及大量的 ad-hoc 用途。算法包括最短路径、网络流、着色等。

线性代数:同样,线性代数有许多科学用途。我想我可以肯定地说,线性代数的主要用途是求解方程组。使用线性代数求解复杂的微分方程。知道如何乘以巨大的矩阵和求解巨大的线性方程组是许多计算机模拟的核心。与日常计算更密切相关的是,计算机图形(尤其是 3D 图形)都是基于线性代数的。

微积分:这也应该是不言自明的。如果不了解微积分,您在做任何与数学和科学相关的事情时都不会走得太远。虽然是大学生的祸根,但它在现代科学中确实无处不在。

概率:有许多概率算法依靠概率来完成它们的脏活。模拟也可以使用随机性和概率来获得良好的结果。学习概率的基础知识并不难,这正是你真正需要的。

统计:无论您是编写计算统计数据和进行统计测试的程序,还是自己使用统计数据,它都是破译和解释信息的非常有用的工具。真的任何人,不仅仅是数学家和科学家,至少应该掌握基本的统计知识。

数值分析:这是一种包罗万象的方法。这就是将数学和计算机科学联系在一起的原因。数学在纸面上效果很好,但是当你开始对实数进行离散化和定界时,你会遇到问题。这就是数值分析的用途。它描述了您在运行这些数学算法时可能面临的不同数值问题,以及您可以用来避免/修复它们的数学/计算机科学技巧。

于 2011-07-12T12:11:51.283 回答
3

您已将一些重要的事项从您的清单中删除:

  1. 可能性
  2. 统计数据
  3. 线性代数

你不能太富有,不能太瘦,也不能太懂数学,但我怀疑你是否有必要走这条路。您可以在不使用微积分或线性代数的情况下完成许多相对复杂且有益的编程工作;它只是不包括皮克斯的科学计算或图形。

我还质疑通过自学完成如此严格的事情的可能性有多大。在完成正规教育后,您将是一个罕见的自学微积分的人。数学通常是一扇单向门——如果你不早点通过,以后就很难回去了。

于 2011-07-12T09:53:05.440 回答
3

尽管这是一个高度主观的问题,无法正确评估答案的正确性,但这里有一些提示:

  • 大多数算法只需要一个数学分支。如果您希望在某个问题域中构建算法,您可能不需要学习所有这些分支。(如果你只是想为此而改进,答案会变得更加困难,因为显然你学到的一切都是有价值的。)

  • 查看算法竞赛网站。其中一些,比如 Project Euler,主要关注数学问题。其他的,(TopCoder、ACM ICPC、spoj、...)专注于各种算法。

于 2011-07-12T09:50:10.867 回答
2

可以在 MIT 的 OpenCourseWare 上找到对计算机科学有用的主题的一个很好的概述。通过查看课程 6.042(计算机科学数学)的教学大纲,您可以了解哪些主题是有用的:http: //ocw.mit.edu/courses/electrical-engineering-and-computer-science/6 -042j-mathematics-for-computer-science-fall-2010/readings/

该链接指向课程的在线课程笔记,这是一个很好的教学工具。课程考试和答案也可在 OCW 上获得。我肯定会从学习这些材料开始,因为麻省理工学院的所有 CS 学生都需要这些材料。

于 2011-07-12T12:19:10.033 回答
2

我发现数学归纳法对设计和理解各种各样的算法很有帮助。有一本很好的书把这个想法带到了很远的地方:http: //www.amazon.com/Introduction-Algorithms-Creative-Udi-Manber/dp/0201120372

于 2011-07-12T09:51:49.230 回答