通过更好的数学扩展编程能力

发布于 2024-11-19 08:57:49 字数 244 浏览 4 评论 0 原文

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

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

根据我的研究,我需要理解和学习以下科目:

  1. 高级代数微积分
  2. 离散
  3. 数学

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

谢谢。

I have come to the realization that sooner or later I'm going to want to build more complex applications that will make better decisions rather just simple if/else statements.

My math background right now is at basic trigonometry, I would like to gain the skills needed to be able to create and understand algorithms.

From what I have researched I would need to understand and learn the following subjects:

  1. Advanced Algebra
  2. Calculus
  3. Discrete Mathematics

This is the conclusion I have come to. Also I was wondering if there is a site where you can practice this type of Mathematics and track your progress.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

套路撩心 2024-11-26 08:57:49

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

代数/数论:有许多有用的数字理论算法,在某些时候您可能需要使用/修改现有的算法一。了解它们背​​后的原理可以让记忆它们变得更加容易(如果你碰巧忘记了,还可以重新推导它们;))。这种算法的经典是用于查找两个数字的最大公约数的欧几里得算法。更先进的算法,如二次筛等,在密码学中有很多用途。

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

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

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

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

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

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

Let me list off a few areas and why you should learn them:

Algebra/Number Theory: There are a number of number useful theoretic algorithms out there and at some point you may need to use/modify an existing one. Knowing the theory behind why they work makes it significantly easier to memorize them (and rederive them if you happen to forget ;)). The classic of such an algorithm would be the Euclidean algorithm for finding the greatest common divisor of two numbers. More advanced algorithms like quadratic sieve, etc have many uses in cryptography.

Graph Theory: I hope I don't need to explain this one too much. Graphs are used to solve a many many many different problems in computer science. They are used to represent networks, relationships between objects, as well as a huge class of ad-hoc uses. Algorithms include shortest path, network flow, coloring, etc.

Linear Algebra: Again, there are many scientific uses of linear algebra. I think I can safely say that the primary use of linear algebra is to solve systems of equations. Complicated differential equations are solved using linear algebra. Knowing how to multiply huge matrices and solve huge systems of linear equations are at the heart of many computer simulations. More closely related to everyday computing, computer graphics (especially 3D graphics) are all based on linear algebra.

Calculus: This should also be self-explanatory. You won't get very far in doing anything related to math and science without knowing calculus. While the bane of college students, it really is everywhere in modern science.

Probability: There are a number of probabalistic algorithms that rely on probability to do their dirty work. Also simulations may also use randomness and probability to achieve good results. It's not terribly hard to learn the fundamentals of probability which is all you really need.

Statistics: Whether you're writing a program which calculates statistics and does statistical tests or you're using statistics yourself, it is an immensely helpful tool to decipher and interpret information. Really anyone, not just mathematicians and scientists, should at least have a basic handle of statistics.

Numerical Analysis: This is kind of a catch-all. This is what ties the math and the computer science together. Math works well and good on paper, but when you start discretizing and bounding real numbers, you will run into problems. This is what numerical analysis is for. It describes the different numerical problems you may face in running these mathematical algorithms as well as mathematical/computer science tricks you can use to avoid/fix them.

失眠症患者 2024-11-26 08:57:49

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

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

  • 检查算法竞赛网站。其中一些,例如欧拉计划,主要关注数学问题。其他的(TopCoder、ACM ICPC、spoj...)专注于各种算法。

Although it's a highly subjective question, for which an answer's correctness cannot properly be evaluated, here are a few pointers:

  • Most algorithms require only one branch of mathematics. If you're looking to build algorithms in a certain problem domain, you may not need to learn all these branches. (If you just want to improve for the sake of it, an answer becomes even harder as obviously everything you learn is valuable.)

  • Check the algorithm competition sites. Some of them, like Project Euler, focus mostly on mathematical problems. Others, (TopCoder, ACM ICPC, spoj,...) focus on all kinds of algorithms.

ヤ经典坏疍 2024-11-26 08:57:49

你遗漏了一些重要的内容:

  1. 概率
  2. 统计
  3. 线性代数

你不能太富有,太瘦,或者知道太多数学,但我怀疑你是否有必要走这条路。无需使用微积分或线性代数即可完成大量相对复杂且有益的编程工作;它只是不包括皮克斯的科学计算或图形。

我还想问,像这样严格的事情通过自学完成的可能性有多大。你是一个罕见的在完成正规学校教育后自己掌握微积分的人。数学通常是一扇单向门——如果你不早点通过它,以后就很难再回去。

You've left a few important ones off your list:

  1. probability
  2. statistics
  3. linear algebra

You can't be too rich, too thin, or know too much math, but I'd question whether it's necessary for you to take this path. You can do a lot of relatively complex and rewarding programming work without using calculus or linear algegra; it just won't include scientific computing or graphics at Pixar.

I'd also question how likely it is that something as rigorous as this could be done by self-study. You'd be a rare individual who mastered calculus on their own after completing formal schooling. Math is usually a one-way door - if you don't get through it early, it's hard to go back later on.

_畞蕅 2024-11-26 08:57:49

我发现数学归纳法对于设计和理解各种算法非常有帮助。有一本好书很好地诠释了这个想法: http://www.amazon.com /简介-算法-Creative-Udi-Manber/dp/0201120372

I found that mathematical induction can be very helpful designing and understanding a large variety of algorithms. There's a nice book that takes this idea pretty far: http://www.amazon.com/Introduction-Algorithms-Creative-Udi-Manber/dp/0201120372

青萝楚歌 2024-11-26 08:57:49

在麻省理工学院的开放课程中可以找到对计算机科学有用的主题的详细概述。通过查看 6.042 课程(计算机科学数学)的教学大纲,您可以了解哪些主题有用:http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/readings/

该链接指向该课程的在线课程笔记,这是一个很好的教学工具。课程考试和答案也可以在 OCW 上找到。我肯定会先学习其中的一些材料,因为麻省理工学院的所有计算机科学学生都需要它。

A good overview of topics useful for computer science can be found on MIT's OpenCourseWare. By looking at the syllabus for the class 6.042 (Mathematics for Computer Science), you can gain an idea of what topics are useful: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/readings/

That link leads to the online course notes for the class, which are a great teaching tool. The course examinations and answers are also available on OCW. I would definitely start by working through some of this material, as it is required for all CS students at MIT.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文