编程的哪些方面对数学知识有帮助?

时间:2009-12-09 19:45:31

标签: math

例如,数学逻辑,图论。

周围的每个人都告诉我,程序员需要数学。我看到很多线程,人们说他们使用线性代数和其他一些数学,但没有人描述使用它时的具体情况。

我知道有类似的线程,但我看不到任何关于这种情况的描述。

38 个答案:

答案 0 :(得分:40)

Computer graphics

它是所有矩阵乘法,向量空间,仿射空间,投影等等。很多很多代数。

有关详细信息,请参阅Wikipedia article on projection以及more specific case of 3D projection及其各种matricesOpenGL是一个常见的计算机图形库,它是将仿射矩阵运算应用于transform并将对象投影到计算机屏幕上的示例。

答案 1 :(得分:13)

我认为很多程序员使用的数学比他们认为的要多。只是它对他们来说非常直观,他们甚至都没有想到它。例如,每次编写if语句时,您是否使用了离散数学知识?

答案 2 :(得分:11)

在图形世界中,你需要进行大量的转换 在密码学中,你需要几何和数论 在AI中,你需要代数 和金融环境中的统计数据 计算机理论需要数学理论:实际上几乎所有的创始人都来自数学。

答案 3 :(得分:7)

给出纬度和经度的位置列表,按照从最近到最远的特定位置的顺序对列表进行排序。

所有涉及金钱的应用程序都需要数学。

我想不出我编写过的单个应用程序在某些时候不需要数学。

答案 4 :(得分:5)

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

  • 用于处理大型系统中的依赖关系的图论(例如,Makefile是一种有向图)
  • 分析性能瓶颈中的统计和线性回归
  • 协调地理空间应用程序中的转换
  • 在科学计算中,项目要求通常以代数形式陈述,特别是对于计算密集型代码

而这只是我的头脑。

当然,任何涉及“纯粹”计算机科学(算法,计算复杂性,lambda演算)的事物往往越来越像数学,你会越深入。

答案 5 :(得分:5)

在回答这个image-comparison-algorithm问题时,我吸取了大量的数学知识,其中一些来自其他答案和网络搜索(我必须运用自己的知识来过滤信息),还有一些来自我的自己的工程培训和冗长的编程背景。

答案 6 :(得分:5)

几年前,我有一个DSP项目,必须在给定时间内计算出大小为N的实数基2 FFT。供应商提供的实际基数-2 FFT不会在分配的时间内运行,但它们的大小为N / 2的复数FFT会。很容易将实际数据馈入复杂的FFT。之后得出答案并不容易:它被称为后编织,或后编织或未编织。从FFT和复数理论中推导出未编织方程并不好玩。从那里到严格优化的DSP代码同样不好玩。

当然,我测量的信号与FFT样本大小不匹配,这会导致伪像。标准修复是应用汉宁窗口。这会导致其他瑕疵。作为理解(和测试)代码的一部分,我必须理解Hanning窗口引起的工件,因此我可以解释结果并确定代码是否正常工作。

答案 7 :(得分:5)

一般思维形式

解决问题 - 一种独立于区域的基本数学方法是将未知问题转换为已知问题。即使你没有同样的问题,你也需要相同的技能。在数学中,就像编程一样,几乎所有东西都有不同的表现形式。了解表面上完全不同的算法,问题或解决方案之间的等效性有助于避免困难部分。

(类似的事情发生在物理学中:为了解决运动学问题,坐标系的选择通常是一到十页满的公式之间的差异,即使问题和解决方案是相同的。)

语言/逻辑推理的精确度 - 数学有一种非常简洁而又精确的语言。学会处理这个问题会让你为计算机做你所说的而不是你的意思做好准备。此外,如果规范足够,则需要相同的精度,如果它涵盖所有可能的情况,则需要检查一段代码等。

美丽与优雅 - 这可能是最难掌握的论点。我发现代码中的“美”概念与数学中的“美”非常接近。一个漂亮的证明是一个其想法立即令人信服的证明,证明本身只是执行一系列执行下一个明显的步骤。

优雅的实施也是如此。

(我遇到过的大多数数学家都会把“Aha!” - 放在最后而不是开始时效果。就像大多数精英极客一样。)

当然,你可以在没有一门数学课的情况下学习这些技能。但数学已经完善了几个世纪。

应用技巧

实施例:    - 无需运行calc.exe即可快速估算内存要求    - 一些基本的统计数据,用于在黑暗中拍摄有效的性能测量值    - 推导一系列值的公式,而不是硬编码    - 了解c * O(N log N)的含义。    - 递归与电感证明相同

(如果我积极地观察自己一天的物品,这个清单可能会继续下去。这部分肯定比我想象的更难。欢迎进一步的建议;)

我在哪里使用

我工作的公司进行了大量的数据采集,我们声名鹊起(与我们的竞争对手合作)是从数据中提取有用的东西的大脑。虽然我对此并不关心,但我得到了足够的数学能力。在此之前,我已经为统计应用实现并验证了随机数生成器,实现了微分方程求解器,为选定的物理定律编写了模拟。可能更多。

答案 8 :(得分:5)

在编写商业应用时,我使用了很多代数。

简单示例

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

答案 9 :(得分:5)

实施高级加密标准(AES)算法需要对有限域数学有一些基本的了解。有关详细信息,请参阅my blog post on it的第4步(包含代码示例)。

答案 10 :(得分:5)

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

答案 11 :(得分:4)

机器学习:我们一直使用Bayesian(和其他概率)模型,我们使用Support Vector Machines形式的二次规划,更不用说全部各种kernel functions的各种数学变换。微积分(衍生物)因素进入感知器学习。更不用说确定机器学习分类器准确性的整个理论。

人工智能:约束满足,逻辑非常重。

答案 12 :(得分:4)

我写了一些哈希函数,用于将航空公司代码和航班号高效地映射到数量有限的数据槽中。

在找到与我的数据配合得很好的数字之前,我经历了相当数量的素数。测试需要一些统计和概率估计。

答案 13 :(得分:3)

机器视觉计算机视觉需要全面了解概率和统计数据。物体检测/识别和许多监督分割技术基于贝叶斯推断。线性代数也很重。

答案 14 :(得分:3)

我使用Combinatorials将20位数据填充到14位空间中。

答案 15 :(得分:3)

-Graphics(矩阵,平移,着色器,积分近似,曲线等等,...无限点)
- 算法复杂度计算(特别是在业务应用程序中)
-Pointer Arithmetics
- 在野外算术等领域.- -GIS(三角形,正方形算法,如delone,边界框和许多其他等)
- 性能监视器计数器及其描述的功能
- 功能编程(简单地说,不是说更多:)) -......

答案 16 :(得分:3)

我正在使用坐标几何来解决查找窗口堆栈的可见部分的问题,而不是彼此完全重叠。

还有很多其他情况,但这是我从头脑中得到的情况。我们所做的所有操作本质上都是数学,或者至少取决于数学/与数学相关。

这就是为什么知道数学要更清楚地理解事物的重要性。)

事实上,在某些情况下,很多数学已经进入了我们的常识,我们没有注意到我们正在使用数学来解决特定的问题,因为我们已经使用了这么久了!

由于

答案 17 :(得分:2)

作为一名电子商务开发人员,我每天都必须使用数学进行编程。至少,基本代数。

我还需要为基于矢量的图像生成编写其他应用程序,这些应用程序需要对几何,微积分和三角函数有很强的了解。

然后有位屏蔽......

将十六进制转换为十分之一......

估算应用程序的负载潜力......

是的,如果有人对数学不好,他们可能不是一个非常优秀的程序员。

答案 18 :(得分:2)

游戏和模拟需要大量的数学 - 流体动力学,尤其是火焰,雾和烟等物质。

答案 19 :(得分:2)

作为一名工程师,当我需要数学时,我正在努力想到一个实例。当我还是一名研究生时,同样的故事。当然,我不是程序员,但我经常使用电脑。

答案 20 :(得分:2)

我从这些回复中看到的反复出现的主题是,这显然是依赖于上下文

如果您正在编写 3D图形引擎,那么建议您使用矢量和矩阵。如果您正在撰写简单的电子商务网站,那么您将获得基础代数

因此,根据您想要做的事情,您可能不需要比发布问题(!)更多的数学,或者您可能需要博士(即您想为涡轮机编写自定义几何内核)风扇叶片设计)。

答案 21 :(得分:2)

我个人编码的例子:

  • 写了一个简单的视频游戏,其中一艘宇宙飞船在另一艘船上射击激光。为了知道船是否在激光路径中,我使用基本代数y = mx + b来计算路径是否相交。 (当我这样做时我还是个孩子,并且非常惊讶于黑板(代数)上教的东西可以应用于计算机编程。)
  • 以对数计算抵押余额和还款时间表
  • 通过计算组合学来分析消费者的购买选择
  • 三角学模拟相机镜头行为
  • 傅里叶变换分析数字音乐文件(WAV文件)
  • 股票市场分析与统计(线性回归)
  • 使用对数来理解二进制搜索遍历,并在将打包信息用于位字段时节省磁盘空间。 (我不计算实际代码中的对数,但是我在“设计”中找出它们,看看是否可以打扰它。)

我的所有项目(目前为止)都没有必要的主题,如微积分,微分方程或矩阵。我没有在学校学习数学,但如果一个项目需要数学,我只是参考我的数学书籍,如果我被困,我会搜索谷歌。

编辑补充:我认为对某些人来说,编程挑战会激发对特定数学科目的学习更为现实。对于其他人来说,他们为了自己的利益而享受数学,并且可以提前学习它以应用于未来的编程问题。我是第一种类型。例如,我在高中学习了对数,但在我开始编程之前并不了解它们的力量,突然之间,它们似乎突然出现在那里。

答案 22 :(得分:2)

如果没有数学,现代通信将彻底崩溃。如果你想让你的头部爆炸,请查看Galois字段,纠错码和数据压缩。然后是符号星座,带限插值函数(我说的是sinc和升余弦函数,而不是简单的线性和双三次函数),傅立叶变换,时钟恢复,最小模糊符号训练序列,瑞利和/或Ricean衰落和卡尔曼滤波。所有这些都涉及数学让我头疼得厉害,我获得了电气工程硕士学位。从我的无线通信课程开始,这只是我的头脑。

使手机工作所需的数学量巨大。使互联网接入的3G手机变得惊人。为了充分肯定地证明算法适用于大多数情况,有时需要人们的职业生涯。

但是...... 如果你只是把这些东西当作从图书馆进口的黑盒子(真的是他们的怜悯),那么,你可能只是知道了足够的代数来调试不匹配的括号。这些工作比硬工作更多......但与此同时,艰苦的工作更难找到替代品。

答案 23 :(得分:1)

如果你了解自己的数学知识,你就可以在很多地方使用它,甚至是高级数学。

故事:几年前,我的一个朋友让我写了一个可以创建照片马赛克的应用程序(当时我们找不到任何免费的应用程序,我不确定它们是不是可下载的比)。在Delphi中只花了两天时间,但这只是因为这个想法很容易简化为拓扑问题。 拓扑是数学的一个相当抽象的部分,其中包括 metrics - 定义集合/空间元素之间距离的函数。

快速划分图片,如果我记得,10x6正方形,并测量每个图片的平均亮度,我得到,简化了一点,像[0,4,5,2,...]这样的数组可以像矢量一样对待。当你想到照片马赛克时,你希望小图片的矢量尽可能接近图片部分的矢量。唯一的问题是找到一个不错的度量 - 一个很好的函数,可以告诉两个图片确实看起来真的相似。但是整个算法写下来不到一个小时,之后它主要是使用度量函数。

答案 24 :(得分:1)

有一次我为Commodore 64写了一些东西(我忘记了,我一定已经6岁了),我想把一些文字水平放在屏幕上。

我使用数学和反复试验的组合计算出公式;几年后,我会用实际的代数解决这些问题。

答案 25 :(得分:1)

在多年的webapp开发中,我对Math API并不十分需要。据我所知,我曾经只使用Math API的Math#min()Math#max()

例如

if (i < 0) {
    i = 0;
}
if (i > 10) {
    i = 10;
}

可以

完成
i = Math.max(0, Math.min(i, 10));

答案 26 :(得分:1)

或多或少与寻找最佳布局,优化或对象关系有关的任何事情都是图论。您可能不会立即想到它,但无论如何 - 您正在使用数学!

一个明确的例子:我编写了一个基于节点的着色器编辑器和优化器,它使用了一组链接节点并将它们转换为着色器代码。找到输出代码的正确顺序,使得某个节点的所有输入在该节点需要之前可用,这涉及图论。

和其他人一样,任何与图形有关的东西都需要知道线性代数,坐标空间变换以及许多其他数学子主题。看一下最近的图形白皮书,特别是那些涉及照明的白皮书。积分?无限系列?!图论?节点遍历优化?是的,所有这些都常用于图形。

另请注意,仅仅因为你在认识时,你正在编写或设计软件时使用某种数学,并不意味着你不是,实际上理解如何为什么算法和数据结构以他们的方式工作的数学背后的数学通常可以帮助您找到解决非平凡问题的优雅解决方案。

答案 27 :(得分:1)

成为优秀程序员的一部分是熟悉您编程的域。如果您正在为Fidelity Mutual开发软件,您可能需要了解工程经济学。如果您正在为Gallup开发软件,您可能需要了解统计数据。 LucasArts ......可能是线性代数。 NASA ......微分方程。

关于软件工程的事情是你几乎总是要戴上很多帽子。

答案 28 :(得分:1)

我主要开发与决策分析和财务预测有关的应用程序。在那个框架中,数学是我大部分开发工作的关键组成部分。没有特别的顺序,在我的头上:

  • 运行模拟项目的可能结果,生成累积分布并分析分布(概率,统计,模拟)
  • 计算市场上随时间推移的最佳供需分配(代数,优化)
  • 根据属性模型和调查结果,对医生的处方决策进行建模,以确定新产品的采用(代数,微观经济学)
  • 模拟病人通过疾病的演变(图,马尔可夫链)

一般来说,我使用的是我在数学/定量方法中学到的一小部分。通常简单的代数,偶尔使用概率就足够了 - 特别是如果你的应用主要是关于记录处理......  另一方面,我发现了解各种各样的数学技巧或想法可以帮助您更好地思考问题,查看联系,相似点和不同点,或者更好地了解要查找的内容。

答案 29 :(得分:1)

在我制作的这个小二维视频游戏中绘制,移动和引导导弹和枪支,激光和重力炸弹等等:wordwarvi

很多使用正弦/余弦和它们的反转,(通过查找表......我老了,好吗?)

答案 30 :(得分:1)

这主要是一个问题,其答案取决于问题域。有些问题需要大量数学,有些问题只需要加法和减法。现在,我有一个宠物项目可能需要图论,而不是数学,以获得我脑子里的基本词汇和概念。

如果您正在进行飞行模拟和任何3D,请向四元数问好!如果您正在进行电气工程,那么您将使用触发和复数。如果您正在进行抵押贷款计算器,您将进行离散数学计算。如果您正在进行优化问题,那么您尝试从小部件工厂获得最大利润,那么您将进行所谓的线性编程。如果你正在做一些涉及网络地址的操作,欢迎使用随之而来的那种以比特为中心的数学运算。这只适用于高级语言。

如果您正在深入研究高度优化的数据结构并自己实现它们,那么您可能会比仅仅抓取一个库时做更多的数学运算。

答案 31 :(得分:1)

任何基于地理位置的网站/应用都需要数学。一个简单的例子就是在网站上“在我10英里范围内向我展示所有Bob的比萨饼”功能。你需要数学来返回半径10英里范围内的纬度/经度。

答案 32 :(得分:0)

我工作的时候会出现统计数据,例如有多少网站访问者使用IE7或Firefox等。有时候我还需要获取原始数据和计算总和,平均值或其他聚合函数。

布尔代数常用于我认为具体情况的条件中。

答案 33 :(得分:0)

多普勒频移是对数的。推广数学教育或教科书。或任何杠杆,比率或高级项目。逻辑还有其他定义。市场行业标准和领导团队程序员与设计师。我会选择有数学家的团队程序员。

答案 34 :(得分:0)

当解决一些深度优先搜索问题(例如,数独游戏)时,我利用了Knuth的Dancing Links算法,该算法属于图论和逻辑演绎类别。

答案 35 :(得分:0)

短名单: ..报告生成的销售数据的统计分析 ..客户区域内的销售趋势 ..来自数据库日志的用户利用率报告

答案 36 :(得分:0)

我正在为保险数据库制定费率计算程序。有一些相当复杂的统计建模涉及。大部分繁重的工作已经为我完成了,但是为了准确地将公式转换为代码,仍然有助于理解基础数学。

答案 37 :(得分:0)

我主要开发执行财务计算和预测的应用程序。无法避免数学。