數學是科學之母。
不知哪位大師這么說過,總之,只要是從事自然科學或是工程領域的,都離不開數學。至于經濟領域,數學的影子也隨處可見。歷屆諾貝爾經濟學獎中,據統計僅一屆沒有數學家獲獎,就是說,幾乎每次都是數學家獲得這個經濟學最高獎勵。
而在計算機科學領域,數學的重要性也實在不必多言。拋開別的不談,就算法這個計算機科學的靈魂分支,我個人就感覺是利用數學來對計算進行最佳規劃的方式。所以,一個真正的計算機高手,盡管未必是個數學天才,也一定是個數學強手。
先談談常用的數學吧。
既然是單獨的計算機科學,那么就不是所有的數學知識都得掌握的爐火純青,既沒必要,更不現實。數學的魅力,在數學領域中是推理的嚴密,在其他的應用領域中則是簡潔而準確的描述。因此,數學的單項強化才是重點。
貌似還有計算數學這個領域,聽說就是專門研究算法的分支。在常規的環節,首先必須熟練掌握的數學知識有:
1.離散數學。其實這是幾個學科的合稱,包括數理邏輯、集合論、布爾代數、圖論、組合數學。其中組合數學是重中之重。
2.代數理論。古典線性代數理論應該是必須的。而現代的矩陣論也在很多地方有著重要應用。另外,近世代數還是可以了解下,近世代數的一些思想對于加深理解組合數學還是很有幫助的。
3.分析數學。數學分析和復變函數這兩個東西在整個IT領域中都是必要的。不過,就我本人感覺,這些東西在計算領域要看方向,比如圖形學對這里要求較高而數據庫就較低。另外,分析數學學的更多的是數學思想的提升而非解微積分題的正確率。畢竟,我們的最終目的是把算法思想變成一行行的代碼,這具體的計算過程其實不必太過計較。
4.數論。這是個相當獨立的領域。數論是數學的皇后,數論和平面幾何證明是為數不多的老少皆宜的數學分支,入門極其容易。學習數論時更多的還是那種思想的訓練,數論的證明五花八門,但變成程序一般較為簡易。個人認為,數論僅僅需要知道一些結論即可。
5.幾何。此幾何非考試的幾何題,而是計算幾何。幾何是很神奇的東西,人類的思維很直觀就能得到的結論往往會成為程序員的極大障礙。僅僅兩線段相交,為優化算法,前前后后可以有不下3種辦法,而常見的跨立實驗早已和最初的簡單觀察相距甚遠。現在的圖形學也是以幾何為基礎的,所以幾何尤其是計算幾何算法必須掌握。
前面已經說過,數學是工具,它不會直接轉化為我們的代碼,不是個具有生產力的東西。數學的威力,永遠是用在優化中。不論是表述的數學化,還是算法的形成,以及最后的優化,利用數學的論證以及已有結論是最佳手段。
在接下來的幾篇隨筆里,我將一些我做題中用到的數學知識以及算法簡單的描述下。