用更好的数学扩展编程能力

Cav*_*ggs 6 algorithm math programming-languages discrete-mathematics

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

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

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

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

这是我得出的结论.此外,我想知道是否有一个网站,你可以练习这种类型的数学并跟踪你的进展.

谢谢.

tsk*_*zzy 5

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

代数/数论:有许多许多有用的理论算法存在,并且在某些时候,你可能需要使用/修改现有的一个.了解它们工作原理背后的理论使得记忆它们变得更加容易(如果你碰巧忘记它们就会重新获得它们;)).这种算法的经典之作是用于找到两个数的最大公约数的欧几里德算法.诸如二次筛等更高级的算法在密码学中有许多用途.

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

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

微积分:这也应该是不言自明的.在不懂微积分的情况下,你不会在做任何与数学和科学相关的事情上走得太远.虽然是大学生的祸根,但它在现代科学中无处不在.

概率:有许多概率算法依赖于概率来完成他们的肮脏工作.此外,模拟也可以使用随机性和概率来获得良好的结果.要了解所有你真正需要的概率基础并不是非常困难.

统计:无论您是编写计算统计数据并进行统计测试的程序,还是自己使用统计数据,它都是解密和解释信息的极其有用的工具.真正的任何人,不仅仅是数学家和科学家,至少应该有一个基本的统计数据.

数值分析:这是一种全能的方式.这就是将数学和计算机科学联系在一起的原因.数学在纸上工作得很好,但是当你开始离散和绑定实数时,你会遇到问题.这就是数值分析的目的.它描述了您在运行这些数学算法时可能遇到的不同数值问题,以及您可以用来避免/修复它们的数学/计算机科学技巧.