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