數(shù)學(xué)對于計算機(jī)算法編程來說非常重要。我主要從下面兩個方面來說明它為何這么重要 一. 培養(yǎng)邏輯思維能力數(shù)學(xué)和算法編程都需要較強(qiáng)的邏輯思維能力,程序代碼的邏輯結(jié)構(gòu)、前后聯(lián)系及處理方式都需要較強(qiáng)的邏輯思維能力,而數(shù)學(xué)學(xué)得好,邏輯思維能力強(qiáng),通常算法編程領(lǐng)悟也會更深。 二. 數(shù)學(xué)應(yīng)用于算法編程這一點應(yīng)該是數(shù)學(xué)與算法編程比較相關(guān)的重要原因,無論是計算機(jī)的底層還是非底層,數(shù)學(xué)知識到處都有體現(xiàn)。例如計算機(jī)底層的二進(jìn)制、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的梯度推導(dǎo)、SVD分解、張量分解、PCA求特征值、優(yōu)化問題、密碼學(xué)的大數(shù)分解、概率圖模型等等都是與數(shù)學(xué)特別相關(guān)。下面我隨便舉兩個例子,可以自己體會 例1: 給定一個數(shù)x,開平方并取倒數(shù)。 代碼實現(xiàn)如下 這是當(dāng)年的經(jīng)典游戲雷神之錘3里面的代碼,經(jīng)測試這段代碼比(float)(1.0/sqrt(x))快4倍,計算性能有質(zhì)的飛躍。為此還專門有一篇論文《Fast Inverse Square Root》講解這個代碼的數(shù)學(xué)原理,感興趣的同學(xué)可以找一下這篇文章研究一下。 例2:給定一個數(shù)n,n可能非常大,比如10的18次方這么大,求x^2+y^2=n的解。 如果不用數(shù)學(xué)知識,直接暴力搜索,時間復(fù)雜度為O(n),效率低下,而且按目前的計算機(jī)水平也很難算出來。如果了解Brahmagupta–Fibonacci identity、Pollard-rho分解法、二次同余方程的解、歐幾里德輾轉(zhuǎn)相除等數(shù)學(xué)知識,那么求解這個問題的時間復(fù)雜度大大降低,保證0.2秒內(nèi)出結(jié)果。 如果工作是算法崗位,數(shù)學(xué)更加特別重要,因為機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘、NLP等方向的底層原理基本都與數(shù)學(xué)脫離不開關(guān)系。 |
|