编程中哪些领域需要数学知识的帮助?

28
例如,数学逻辑、图论等。
周围的每个人都告诉我编程需要数学。我看到很多帖子说他们使用了线性代数和其他一些数学知识,但没有人描述具体的使用场景。
我知道有类似的帖子,但我没有看到任何关于这种情况的描述。

1
@Kamarey:那应该是一个答案,而不是一个评论。如果你把它发表为答案,我会投反对票。 - Daniel Pryden
5
冒着让喷子得逞的风险,我会回应你的观点:你说得对,你的评论并没有回答问题。但是你所说的数学只在"某些特定领域"才被"需要"的说法最好还是值得怀疑的。数学是计算机科学的基础-确实,每个程序员都依赖于用数学知识实现的工具。因此,你的说法可能是数学知识不是编程的先决条件。从狭义上来定义,这可能是正确的-但是,这种知识在很多情况下都非常有帮助,以至于我认为它是熟练编程的先决条件。 - Daniel Pryden
1
这个问题可能会有帮助:https://dev59.com/n3VC5IYBdhLWcg3w4VRz - Kamarey
"修正你的逻辑。"...这一定很痛苦。 - ChaosPandion
2
听起来像是重复的问题:http://stackoverflow.com/questions/11743/useful-math-for-programmers - gnovice
显示剩余6条评论
38个回答

40

2
我个人在矢量图形中必须使用微积分。 - Ben Lesh
当我制作漂亮的可视化内容时,我肯定会使用大量的向量和矩阵运算,也就是三角学和线性代数。 - mqp
1
为什么不提供一个或两个例子来强化你的回答呢? - ChaosPandion
1
不要只给出漂亮的可视化代码而无法查看它们,但您可以在此处查看其他人的漂亮代码和视频:http://mndl.hu/hackpact - mqp
我不清楚你在帖子中为什么提到我。我相信许多SO用户想要一些具体的例子。 - ChaosPandion
@ChaosPandion:嗯,我觉得通过快速搜索很容易找到例子,特别是因为我列出了一个常用的库来完成这个任务。维基百科文章本身就有许多链接到示例和文档的链接。事实上,有太多的资源可用于我仅仅选择其中一部分并将其粘贴在这里。 - Welbog

13

我认为很多程序员使用的数学比他们想象中的要多。只是因为它对他们来说是如此直观,以至于他们甚至不会考虑这一点。例如,每次编写if语句时,难道你不是在使用离散数学知识吗?


2
这让我想起了一本书《数学本能》......它涉及到本能数学。http://www.amazon.com/exec/obidos/tg/detail/-/1560256729/literatinet - Liran Orevi

11
在图形学世界中,你需要进行很多变换。
在密码学中,你需要几何和数论。
在人工智能领域,你需要代数。
而在金融环境中则需要统计学。
计算机理论需要数学理论:其实几乎所有的创始人都来自数学界。

7

给定一组包含纬度和经度的位置列表,按照距离特定位置从近到远排序。

所有涉及货币的应用程序都需要数学知识。

我想不出我写过的任何一个应用程序在某个时刻不需要数学知识。


2
纯 API 调用应用怎么样? - Dr. Xray
6
“Pure API calls”可以作为一个有趣的应用程序的一种形式,它通过API接口与其他系统或应用程序进行通信。 - Ken Bloom
Dr. Xray:如果那是你真正的意思,为什么不直接说“怎么样做一个不需要它的应用程序?” - Wayne Koorts

5

我在编写商业应用程序时使用了很多代数知识。

简单示例

BMI = weight / (height * height);
compensation = 10 * hours * ((pratio * 2.3) + tratio);

4
那不是代数,只不过比算术稍微复杂一点而已。代数涉及从一组方程式中计算一个或多个未知值。 - duffymo

5

几个月前,我写了一个解析器编译器,其中涉及到了图论。这个编译器只是为了比正则表达式略微更强大一些(允许多个匹配和添加了一些其他功能),但即使是这样一个简单的编译器也需要检测循环、有限状态自动机以及大量的数学知识。


5

5
几年前,我有一个DSP项目,需要在规定的时间内计算大小为N的实数基数2 FFT。供应商提供的真实基数2 FFT无法在分配的时间内运行,但他们的大小为N/2的复杂FFT可以。将实际数据输入到复杂FFT中很容易。之后从中获取答案并不容易:这称为后编织、后解编或解编。从FFT和复数理论中推导出解编方程并不好玩。从那里开始编写紧密优化的DSP代码同样不好玩。
自然地,我测量的信号与FFT采样大小不匹配,这会导致伪影。标准修复方法是应用汉宁窗。这会导致其他伪影。作为理解(和测试)该代码的一部分,我必须了解汉宁窗引起的伪影,以便解释结果并决定代码是否有效。

5

我在各种项目中使用了大量的数学,包括:

  • 图论用于处理大型系统中的依赖关系(例如,Makefile 是一种有向图)
  • 统计学和线性回归在分析性能瓶颈时应用广泛
  • 在地理空间应用中进行坐标变换
  • 在科学计算中,项目要求通常以代数形式陈述,尤其是对于计算密集型代码

这只是我随口提到的一些。

当然,任何涉及“纯”计算机科学(算法、计算复杂度、λ演算)的东西,越深入就越像数学。


而咖喱。谈论lambda时,不能不提到柯里化函数。 - Ben Voigt

5

在回答这个图像比较算法问题时,我运用了很多数学知识,其中一些来自其他答案和网络搜索(我必须应用自己的知识来过滤信息),还有一些来自我的工程培训和长期的编程背景。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接