数学是科学之母。
不知哪位大师这么说过,总之,只要是从事自然科学或是工程领域的,都离不开数学。至于经济领域,数学的影子也随处可见。历届诺贝尔经济学奖中,据统计仅一届没有数学家获奖,就是说,几乎每次都是数学家获得这个经济学最高奖励。
而在计算机科学领域,数学的重要性也实在不必多言。抛开别的不谈,就算法这个计算机科学的灵魂分支,我个人就感觉是利用数学来对计算进行最佳规划的方式。所以,一个真正的计算机高手,尽管未必是个数学天才,也一定是个数学强手。
先谈谈常用的数学吧。
既然是单独的计算机科学,那么就不是所有的数学知识都得掌握的炉火纯青,既没必要,更不现实。数学的魅力,在数学领域中是推理的严密,在其他的应用领域中则是简洁而准确的描述。因此,数学的单项强化才是重点。
貌似还有计算数学这个领域,听说就是专门研究算法的分支。在常规的环节,首先必须熟练掌握的数学知识有:
1.离散数学。其实这是几个学科的合称,包括数理逻辑、集合论、布尔代数、图论、组合数学。其中组合数学是重中之重。
2.代数理论。古典线性代数理论应该是必须的。而现代的矩阵论也在很多地方有着重要应用。另外,近世代数还是可以了解下,近世代数的一些思想对于加深理解组合数学还是很有帮助的。
3.分析数学。数学分析和复变函数这两个东西在整个IT领域中都是必要的。不过,就我本人感觉,这些东西在计算领域要看方向,比如图形学对这里要求较高而数据库就较低。另外,分析数学学的更多的是数学思想的提升而非解微积分题的正确率。毕竟,我们的最终目的是把算法思想变成一行行的代码,这具体的计算过程其实不必太过计较。
4.数论。这是个相当独立的领域。数论是数学的皇后,数论和平面几何证明是为数不多的老少皆宜的数学分支,入门极其容易。学习数论时更多的还是那种思想的训练,数论的证明五花八门,但变成程序一般较为简易。个人认为,数论仅仅需要知道一些结论即可。
5.几何。此几何非考试的几何题,而是计算几何。几何是很神奇的东西,人类的思维很直观就能得到的结论往往会成为程序员的极大障碍。仅仅两线段相交,为优化算法,前前后后可以有不下3种办法,而常见的跨立实验早已和最初的简单观察相距甚远。现在的图形学也是以几何为基础的,所以几何尤其是计算几何算法必须掌握。
前面已经说过,数学是工具,它不会直接转化为我们的代码,不是个具有生产力的东西。数学的威力,永远是用在优化中。不论是表述的数学化,还是算法的形成,以及最后的优化,利用数学的论证以及已有结论是最佳手段。
在接下来的几篇随笔里,我将一些我做题中用到的数学知识以及算法简单的描述下。