【问题标题】:Expanding Programming Capabilities with Better Math用更好的数学扩展编程能力
【发布时间】:2011-07-12 09:40:11
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

  • 如果你在谈论编程,你也需要看看设计模式......最好的办法是查看大学任何数学课程的课程描述,去书店并开始购买与这些课程相关的书籍。
  • 设计模式与数学无关。
  • 那是爱尔兰郡的“Cavan”吗?
  • @duffymo 标题包含“扩展编程能力”......所以正如我所说,您可以将设计模式添加到此列表中。即使它更多地是关于编程而不是数学。
  • "...With Better Math" - 阅读整个标题。不,它专门与数学有关。查看列表中的主题并告诉我设计模式属于那里。没有意义。不妨按照您的标准添加“强力牙线”。

标签: algorithm math programming-languages discrete-mathematics


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 为了借鉴 tkuzzy 的出色答案,我想说 Schaum 的大纲是学习和复习上述几个主题的绝佳工具。
【解决方案2】:

虽然这是一个高度主观的问题,无法正确评估答案的正确性,但这里有几点建议:

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

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

    • 感谢 duffymo 的回答,我不想成为专家,我只是想了解这些主题的工作知识,但我想你是对的,因为这是一项艰巨的任务.我想这不会像拿起一本傻瓜书周末阅读。
    • 概率和统计将比微积分有用得多。阅读“编程集体智能”,了解我的意思。
    • 感谢您的建议,我已经 30 岁了,我认为我有余生来学习这些科目,我只是想变得足够好,以便有一天能够将其作为我的职业。我现在正在尽我所能来擅长 Web 应用程序编程,只是为了获得经验,我正在免费工作。再次感谢您的建议。
    • 每个人都需要一些概率+统计数据。也完全同意微积分的用处很小。它从根本上讲是关于实数,这是计算机无法很好地建模的东西。离散数学将涵盖整数上的等效内容
    • 我不会说“很少使用”,而且微积分不仅仅是关于实数。 (离散数学同样需要实数 - 尝试在没有实数的情况下计算三个选择的概率。)微积分是关于动态系统的,如果你不为这类问题建模,你就不需要微积分。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      可以在 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 学生都需要这些材料。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-24
        • 2015-01-07
        • 1970-01-01
        • 2014-08-08
        • 1970-01-01
        • 2018-08-16
        相关资源
        最近更新 更多