大力出奇跡:當(dāng)古代數(shù)學(xué)難題遇到現(xiàn)代計(jì)算機(jī)

近年來(lái),人工智能的春風(fēng)不知吹動(dòng)了多少資本的浪潮,從決勝棋壇的阿爾法狗,到遍地開(kāi)花的無(wú)人車,AI成為經(jīng)濟(jì)寒冬里熊熊燃燒的火種,不知多少投資客捧著鈔票前赴后繼??苹秒娪爸?,像人類一樣思考、決策、學(xué)習(xí)的強(qiáng)人工智能何時(shí)能問(wèn)世,目前還是個(gè)未解之謎。當(dāng)前市面上一切AI產(chǎn)品的基礎(chǔ),仍然是傳統(tǒng)的電子計(jì)算機(jī)。


我們知道,計(jì)算機(jī)科學(xué)中有一個(gè)“摩爾定律”: 單位面積集成電路上可容納的元器件的數(shù)目,大約每18個(gè)月便會(huì)增加一倍,其性能也將提升一倍。計(jì)算機(jī)指數(shù)式增長(zhǎng)的運(yùn)算能力,支撐了越來(lái)越復(fù)雜的應(yīng)用場(chǎng)景。以棋類運(yùn)動(dòng)而言,上世紀(jì)末的計(jì)算機(jī)已經(jīng)能戰(zhàn)勝最優(yōu)秀的人類國(guó)際象棋棋手;而隨著計(jì)算機(jī)硬件的發(fā)展、運(yùn)算能力的提升,比國(guó)際象棋計(jì)算量更大、場(chǎng)景更復(fù)雜的圍棋也最終失守。

也就是說(shuō),大多數(shù)情況下,用計(jì)算機(jī)解決人類問(wèn)題的標(biāo)準(zhǔn)思路,都是用計(jì)算機(jī)強(qiáng)大的運(yùn)算能力,來(lái)強(qiáng)行攻克人類思維范疇里很難通過(guò)計(jì)算解決的問(wèn)題。換言之,計(jì)算機(jī)擅長(zhǎng)大力出奇跡。

當(dāng)這一思路遭遇古代數(shù)學(xué)難題,又能碰撞出怎樣的火花?


1、百雞問(wèn)題

今有雞翁一,值錢伍;雞母一,值錢三;雞雛三,值錢一。凡百錢買雞百只,問(wèn)雞翁、母、雛各幾何?

這個(gè)問(wèn)題其實(shí)是一個(gè)不定方程求整數(shù)解的問(wèn)題,相當(dāng)于列方程+枚舉討論。具體而言,可以設(shè)公雞數(shù)量為x,母雞數(shù)量為y,小雞數(shù)量為z。有:

x + y + z = 100

5x + 3y + z/3 = 100

枚舉討論的技巧也很簡(jiǎn)單,可以先消去一個(gè)未知數(shù),然后根據(jù)正整數(shù)性質(zhì),利用整除特性進(jìn)行枚舉。

顯而易見(jiàn)計(jì)算機(jī)最擅于求解這種枚舉類的問(wèn)題,甚至用暴力枚舉(除基本條件外,不加分析和簡(jiǎn)化)也花不了多少時(shí)間。比如從0開(kāi)始枚舉上述的公雞數(shù),最多不會(huì)超過(guò)20只,否則總價(jià)格會(huì)超出百錢;在此基礎(chǔ)上開(kāi)始枚舉母雞,母雞最多不會(huì)超過(guò)33只,否則總價(jià)會(huì)超出百錢;然后再在已數(shù)公雞、母雞的基礎(chǔ)上開(kāi)始枚舉小雞,挑出精確滿足百雞、百錢的組合。

貼一下python代碼與計(jì)算答案。如果你對(duì)編程或python感興趣的話,完全可以搜索一些在線的教程來(lái)學(xué)習(xí),這是一門十分簡(jiǎn)單、適合初學(xué)者入門的編程語(yǔ)言,如果有一些英語(yǔ)和數(shù)學(xué)基礎(chǔ),更能十分輕易地學(xué)會(huì)??梢钥闯?,在0.2s時(shí)間內(nèi),該程序利用暴力枚舉的手段,給出了百雞問(wèn)題的全部四組解。



2、求圓周率

中國(guó)古代對(duì)圓周率的計(jì)算有很長(zhǎng)的歷史。

早在漢初的《周髀算經(jīng)》里就提到過(guò)“徑一周三”的說(shuō)法,給出了圓周率的近似值3。漢代張衡給出近似值3.16,而劉徽創(chuàng)立割圓術(shù),“割之彌細(xì),所失彌少,割之又割,以至于不可割,則與圓周合體而無(wú)所失矣”,我個(gè)人認(rèn)為可以被當(dāng)做數(shù)學(xué)領(lǐng)域極限及微積分的起源,最終他得到3.1416的近似值。南朝祖沖之發(fā)揚(yáng)光大,不割不快,得到了3.1415926~3.1415927的近似范圍,比西方國(guó)家不知早到哪里去了。

當(dāng)然我們今天不用割圓術(shù)。不是不能用,而是割圓術(shù)不太容易展現(xiàn)計(jì)算機(jī)的運(yùn)算優(yōu)勢(shì),以及大力出奇跡的計(jì)算思想。我們采用一種樸素的概率方法。設(shè)想有一個(gè)正方形,邊長(zhǎng)為1。我們可以用該正方形兩條相鄰的邊作為半徑,畫一個(gè)四分之一圓弧?,F(xiàn)在想象我們往這個(gè)正方形里隨機(jī)地撒豆子(天知道我們?cè)鯓颖WC隨機(jī),大概就是閉著眼睛抓著豆子胡亂撒吧)。假如豆子足夠小,足夠多,最終這個(gè)正方形里密密麻麻到處是豆子。接下來(lái)我們開(kāi)始數(shù)豆子,數(shù)出所有正方形里的豆子數(shù)目,N;同時(shí)也數(shù)出,落在圓弧圈出的扇形區(qū)域里的豆子數(shù)目,n。有了這兩個(gè)值,就可以用來(lái)估計(jì)π。


直觀而言,n與N的比值,應(yīng)當(dāng)近似等于扇形(也就是四分之一圓)面積與正方形面積的比值。而在計(jì)算扇形面積的時(shí)候,顯然是需要用到π值的,這里的四分之一圓面積為π/4。也就是說(shuō)存在近似關(guān)系:

n : N ≈ π/4 : 1

從而可以得到,π≈4n/N。

同樣編寫一個(gè)python程序??梢钥闯?,隨機(jī)撒下的豆子越多,最終的模擬結(jié)果越精確。提到“模擬”,這一方法也就是大名鼎鼎的蒙特卡洛模擬,可以用來(lái)近似解決眾多難以計(jì)算的數(shù)學(xué)問(wèn)題。

考慮到時(shí)間問(wèn)題,此處不再做更高精度的計(jì)算。



3、根號(hào)2。

畢達(dá)哥拉斯學(xué)派的理論根基是萬(wàn)物皆數(shù)。這里的數(shù)指的是整數(shù),和可以用整數(shù)相除表達(dá)的分?jǐn)?shù)。他們認(rèn)為自然界中的一切,都可以用整數(shù)和分?jǐn)?shù)來(lái)表達(dá)。

然而恰恰是學(xué)派中的一名晚輩,希帕索斯,對(duì)這個(gè)觀點(diǎn)提出了質(zhì)疑。希帕索斯正是利用到老師歸納的畢達(dá)哥拉斯定理(也就是西方人的勾股定理),提出:如果說(shuō)萬(wàn)物皆數(shù),那么等腰直角三角形的斜邊,如何用整數(shù)或分?jǐn)?shù)來(lái)表達(dá)呢?

畢達(dá)哥拉斯學(xué)派從此陷入了恐慌。一大群學(xué)者開(kāi)始試圖計(jì)算、測(cè)量這個(gè)斜邊值,想要找到它的整數(shù)或分?jǐn)?shù)表達(dá)形式,可是卻怎么也求不出這個(gè)值。最終,這群人惱羞成怒,竟然把希帕索斯推入了大海。

我們現(xiàn)在知道,這個(gè)三角形的斜邊值是一個(gè)無(wú)理數(shù),無(wú)法用分?jǐn)?shù)形式表達(dá)。假如直角邊長(zhǎng)為1的話,斜邊長(zhǎng)則稱為根號(hào)二,其數(shù)值大約為1.414。那么如何計(jì)算這一數(shù)值呢?

計(jì)算機(jī)解決的方案有很多。這里采用最樸素的二分法??紤]函數(shù)f(x),要求其任一零點(diǎn)(也就是f(x)=0的點(diǎn))附近,函數(shù)的值分別處于正負(fù)兩側(cè)。所謂二分法,簡(jiǎn)單來(lái)說(shuō),是在求解此零點(diǎn)時(shí),先找到零點(diǎn)左、右兩個(gè)端點(diǎn),從這兩點(diǎn)出發(fā),取區(qū)間的中點(diǎn),并根據(jù)零點(diǎn)的位置,用新得到的中點(diǎn)取代某一個(gè)端點(diǎn),然后不斷地逼近零點(diǎn)。


比如y = x^2 – 2在正軸的零點(diǎn),顯然處在1和2之間。以這兩點(diǎn)為端點(diǎn),取區(qū)間中點(diǎn),為1.5,1.5的函數(shù)值為正,則接下來(lái)取1和1.5為端點(diǎn)……重復(fù)這個(gè)過(guò)程,直到某一步恰好求出了精確解(比如零點(diǎn)是個(gè)整數(shù)或分?jǐn)?shù)),或者達(dá)到了精度要求(比如零點(diǎn)是個(gè)無(wú)理數(shù)),則停止迭代。這里就以0.00001為精度標(biāo)準(zhǔn),用二分法求解根號(hào)2??梢钥闯觯?.2s,15輪二分迭代后,得到了4位精度的結(jié)果。

事實(shí)上這道題我在一次算法工程師求職的面試中遇到過(guò)。不過(guò)我當(dāng)時(shí)寫了一個(gè)運(yùn)算效率更高的牛頓迭代法。當(dāng)然,這就是另一個(gè)故事了。



今天展示了一些最基礎(chǔ)的計(jì)算方法,旨在理解用計(jì)算機(jī)求解復(fù)雜問(wèn)題的思路(當(dāng)然這些問(wèn)題實(shí)際上也并不復(fù)雜)。那些困擾前人數(shù)十年數(shù)百年的問(wèn)題,在計(jì)算機(jī)強(qiáng)大的運(yùn)算能力面前,會(huì)顯得容易得多。這,就是計(jì)算機(jī)的核心能力。

在我個(gè)人的理解里,計(jì)算機(jī)相比于人類的最大優(yōu)勢(shì),就是上述的計(jì)算能力,也就是計(jì)算速度,也就是大力出奇跡。以當(dāng)前席卷互聯(lián)網(wǎng)行業(yè)的深度學(xué)習(xí)方法為例,事實(shí)上深度學(xué)習(xí)所依賴的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),在20世紀(jì)70年代美國(guó)的“人工智能熱潮”中就已經(jīng)有許許多多的雛形,只不過(guò)因?yàn)楫?dāng)時(shí)計(jì)算機(jī)算力的限制而沒(méi)能早早登上歷史舞臺(tái)。而現(xiàn)在的各類深度學(xué)習(xí)AI算法,其實(shí)本質(zhì)上也還是站在前人的肩膀上摘果子,這些年在圖像、語(yǔ)音領(lǐng)域取得的一些成果,本質(zhì)是仍然蹭了計(jì)算機(jī)硬件能力爆炸式提升的紅利。對(duì)于算法本身,更多的仍是試探性結(jié)構(gòu)設(shè)計(jì)。

在我看來(lái),未來(lái)的人工智能之路,其實(shí)面臨著重大的分歧。一條路是走現(xiàn)在的老路,繼續(xù)堆硬件,加運(yùn)算能力,期待量變到質(zhì)變,也許當(dāng)計(jì)算能力強(qiáng)大到某一個(gè)閾值的時(shí)候,弱AI與理論上的強(qiáng)AI就不會(huì)有太清晰的界限了。另一條就是另辟蹊徑,從仿生學(xué)的角度重新尋找AI的實(shí)現(xiàn)方法。究竟是揚(yáng)長(zhǎng)避短,算力為王,還是革故鼎新,開(kāi)天辟地呢?

我們拭目以待。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容