写给中学生的算法入门:学代码之前看这篇就够了
導(dǎo)讀:本文內(nèi)容主要源自德語(yǔ)大學(xué)中發(fā)起的科普活動(dòng),初衷是讓高中生領(lǐng)會(huì)算法和計(jì)算機(jī)科學(xué)的奇妙與魅力。閱讀本文不需要任何關(guān)于算法和計(jì)算的預(yù)備知識(shí)。我們希望不僅學(xué)生,而且包括希望了解迷人的算法世界的成年人都能從本書(shū)中得到啟發(fā)與樂(lè)趣。
作者:Thomas Seidl,?Jost Enderle,?Wolfgang P. Kowalk,?Berthold V?cking
本文摘編自《無(wú)處不在的算法》,如需轉(zhuǎn)載請(qǐng)聯(lián)系我們
00 算法的應(yīng)用
最近幾十年來(lái)許多技術(shù)創(chuàng)新和成果都依賴(lài)于算法思想,這些成果廣泛應(yīng)用于科學(xué)、醫(yī)藥、生產(chǎn)、物流、交通、通信、娛樂(lè)等領(lǐng)域。高效的算法使得你的個(gè)人電腦得以運(yùn)行新一代的游戲,這些復(fù)雜的游戲在幾年前可能都難以想象。
更重要的是這些算法為一些重大科學(xué)突破提供了基礎(chǔ)。例如,人類(lèi)基因組圖譜解碼得以實(shí)現(xiàn)與新算法的發(fā)明是分不開(kāi)的,這些算法能將計(jì)算速度提高幾個(gè)數(shù)量級(jí)。
算法告訴計(jì)算機(jī)如何處理信息,如何執(zhí)行任務(wù)。算法組織數(shù)據(jù),使得我們能有效地搜索。如果沒(méi)有聰明的算法,我們一定會(huì)迷失在互聯(lián)網(wǎng)這個(gè)巨大的數(shù)據(jù)叢林中。
同樣,如果沒(méi)有天才的編碼和加密算法,我們也不可能在網(wǎng)絡(luò)上安全地通信。天氣預(yù)報(bào)與氣候變化分析也依靠高效模擬算法。
工廠生產(chǎn)線(xiàn)和物流系統(tǒng)有大量復(fù)雜的優(yōu)化問(wèn)題,只有奇巧的算法能幫助我們解決。甚至當(dāng)你利用GPS尋找附近的餐廳或咖啡館時(shí),也要靠有效的最短路計(jì)算才能獲得滿(mǎn)意的結(jié)果。
并非像很多人認(rèn)為的,只有計(jì)算機(jī)中才需要算法。在工業(yè)機(jī)器人、汽車(chē)、飛機(jī)以及幾乎所有家用電器中都包含許多微處理器,它們也都依賴(lài)算法才能發(fā)揮作用。例如,你的音樂(lè)播放器中使用聰明的壓縮算法,否則小小的播放器會(huì)因?yàn)榇鎯?chǔ)量不足而無(wú)法使用。
現(xiàn)在的汽車(chē)和飛機(jī)中有成百上千的微處理器,算法能幫助控制引擎,減少能耗,降低污染。它們還能控制制動(dòng)器和方向盤(pán),提高穩(wěn)定性與安全性。不久的將來(lái),微處理器可能完全替代人,實(shí)現(xiàn)汽車(chē)的全自動(dòng)駕駛。目前的飛機(jī)已經(jīng)能做到在從起飛到降落的全過(guò)程中無(wú)須人工干預(yù)。
算法領(lǐng)域最大的進(jìn)步都來(lái)自美好的思想,它指引我們更有效地解決計(jì)算問(wèn)題。我們面對(duì)的問(wèn)題絕不局限于狹義的算術(shù)計(jì)算,還有很多表面上不是那么“數(shù)學(xué)化”的問(wèn)題。例如:
如何走出迷宮?
如何分割一張藏寶圖讓不同的人分別保存,但只有重新拼合才可能找到寶藏?
如何規(guī)劃路徑,用最小成本訪(fǎng)問(wèn)多個(gè)地方?
這些問(wèn)題極具挑戰(zhàn),需要邏輯推理、幾何與組合想象力,還需要?jiǎng)?chuàng)造力才能解決。這些就是設(shè)計(jì)算法所需要的主要能力。
01 二分搜索
我新買(mǎi)的Nelly的唱片哪兒去啦?我那專(zhuān)橫的妹妹Linda有整潔癖,肯定是她將唱片又插進(jìn)唱片架上了。我告訴她新買(mǎi)的唱片別插上去。這下我得在架子上的500張唱片中一張一張地找了,這該找到什么時(shí)候啊!
不過(guò),走運(yùn)的話(huà)也可能并不需要查看所有唱片就碰到了。但最壞的情況是Linda又把唱片借給朋友了,那得查完所有唱片才知道不在這里了,然后只好去聽(tīng)廣播啦。
找找看吧!Aaliyah,AC/DC,Alicia Keys……嗯,Linda好像按字母順序給唱片排過(guò)序了。這樣的話(huà)我找Nelly的唱片就容易多了。
我先在中間試試。Kelly Family,這太偏左了,必須往右邊找。Rachmaninov,這又太偏右了,再往左一點(diǎn)兒……Lionel Hampton,右了點(diǎn)兒,但不遠(yuǎn)了。Nancy Sinatra……Nelly,找到啦!
這倒很快!因?yàn)槌呀?jīng)排了序,我只要來(lái)回跳幾次就找到目標(biāo)了!即使我要的唱片不在架子上,我也能很快發(fā)現(xiàn)。不過(guò)如果唱片很多,比如說(shuō)10 000張,那可能得來(lái)回跳上幾百次吧。我很想知道如何計(jì)算次數(shù)。圖1-1給出了不同搜索方法的示意。
▲圖1-1 順序搜索與二分搜索圖示
1. 順序搜索
Linda從去年開(kāi)始學(xué)習(xí)計(jì)算機(jī)科學(xué);她應(yīng)該有些書(shū)能告訴我答案。我看看,“搜索算法”可能有用。這里說(shuō)了如何在一個(gè)給定集合(這里是唱片)中按照關(guān)鍵字(這里用藝術(shù)家的名字)找一個(gè)對(duì)象。我剛才的做法應(yīng)該是“順序搜索”,又叫“線(xiàn)性搜索”。
就像我想的一樣,為了找一個(gè)關(guān)鍵字,平均得檢查一半的唱片。搜索的步數(shù)和唱片數(shù)成正比,換句話(huà)說(shuō),唱片數(shù)增加一倍,搜索時(shí)間也就增加一倍。
2. 二分搜索
我用的第二種技術(shù)好像有個(gè)特別的名字,叫“二分搜索”。給定要找的關(guān)鍵字以及排好次序的對(duì)象列表,搜索從中間那個(gè)對(duì)象開(kāi)始,和關(guān)鍵字進(jìn)行比較。如何中間那個(gè)對(duì)象就是要找的,搜索就結(jié)束了。
否則,按照要找的關(guān)鍵字是小于還是大于當(dāng)前檢查的對(duì)象決定該向左還是該向右繼續(xù)搜索。接下來(lái)就是重復(fù)上面的過(guò)程。
如果找到了搜尋的對(duì)象,或者當(dāng)前可能搜索的區(qū)間已經(jīng)不能再切分了(也就是說(shuō)如果表中有要找的對(duì)象,當(dāng)前位置就該是目標(biāo)應(yīng)該在的位置),搜索就終止。我妹妹的書(shū)中有相應(yīng)的程序代碼。
在這段代碼中,A表示一個(gè)“數(shù)組”,也就是由帶編號(hào)的對(duì)象(我們稱(chēng)其為數(shù)組的元素)構(gòu)成的數(shù)據(jù)列表,編號(hào)就像唱片在架子上的位置。例如,數(shù)組中第5個(gè)元素寫(xiě)為A[5]。
如果我們的架子上放了500張唱片,我們要找的關(guān)鍵字是"Nelly",那就得調(diào)用BINARYSEARCH(rack, "Nelly", 1, 500)搜索要找的唱片所在位置。程序執(zhí)行時(shí),開(kāi)始的left值為251,right值為375,以此類(lèi)推。
3. 遞歸實(shí)現(xiàn)
在Linda的書(shū)中還有另外一個(gè)二分搜索算法。同樣的功能為什么需要不同算法呢?書(shū)上說(shuō)第二種算法采用“遞歸方法”,那又是什么呢?
我再仔細(xì)看看……“遞歸函數(shù)是一種利用自身來(lái)定義或者調(diào)用自己的函數(shù)。”求和函數(shù)sum就是個(gè)例子。函數(shù)sum的定義如下:
sum (n) = 1 + 2 + … + n
也就是前n個(gè)自然數(shù)相加,所以,當(dāng)n = 4,可得:
sum (4) = 1 + 2 + 3 + 4 = 10
如果我們想計(jì)算對(duì)于某個(gè)n的sum函數(shù)值,而且已經(jīng)知道對(duì)于n-1的函數(shù)值,那只要再加上n就可以了:
sum (n) = sum (n-1) + n
這樣的定義式就稱(chēng)為“遞歸步”。當(dāng)要計(jì)算對(duì)于某個(gè)n的sum函數(shù)值時(shí),我們還需要一個(gè)最小的n對(duì)應(yīng)的函數(shù)值,這稱(chēng)為奠基:
sum (1) = 1
按照遞歸定義,我們現(xiàn)在計(jì)算sum函數(shù)值的過(guò)程如下:
sum (4) = sum (3) + 4
= (sum (2) + 3) + 4
= ((sum (1) + 2) + 3) + 4
= ((1 + 2) + 3) + 4
= 10
二分搜索的遞歸定義是一樣的:函數(shù)在函數(shù)體中調(diào)用自己,而不是反復(fù)執(zhí)行一組操作(那稱(chēng)為循環(huán)實(shí)現(xiàn))。
和前面一樣,A是要搜索的數(shù)組,key是要找的關(guān)鍵字,left和right分別是搜索區(qū)域的左右邊界。如果我們要在包含500個(gè)元素的數(shù)組rack中找Nelly,我們采用類(lèi)似的函數(shù)調(diào)用BINSEARCHRECURSIVE(rack,"Nelly",1,500)。但這里不再通過(guò)程序循環(huán)使得搜索區(qū)域左右邊界逐步靠近,而是直接修改邊界值執(zhí)行遞歸調(diào)用。實(shí)際執(zhí)行的遞歸調(diào)用序列如下:
BINSEARCHRECURSIVE (rack, “Nelly”, 1, 500)
BINSEARCHRECURSIVE (rack, “Nelly”, 251, 500)
BINSEARCHRECURSIVE (rack, “Nelly”, 251, 374)
BINSEARCHRECURSIVE (rack, “Nelly”, 313, 374)
BINSEARCHRECURSIVE (rack, “Nelly”, 344, 374)
...
4. 搜索的步數(shù)
至此,我們?nèi)匀徊恢酪业剿璧膶?duì)象究竟該執(zhí)行多少搜索步。如果運(yùn)氣好,一步就能找到。反之,如果要找的對(duì)象不存在,我們必須來(lái)回跳動(dòng)直至對(duì)象應(yīng)該處于的位置。
這樣就需要考慮究竟數(shù)組能夠被切為兩半多少次,或者反過(guò)來(lái)說(shuō),當(dāng)執(zhí)行了一定數(shù)量的比較操作后,究竟多少元素可以被確定是或者不是目標(biāo)對(duì)象。
假設(shè)要找的對(duì)象確實(shí)在表中,一次比較可以確定2個(gè)元素,兩次比較可以確定4個(gè)元素,三次比較就能確定8個(gè)元素。因此執(zhí)行k次比較操作能夠確定2·2·…·2(k次)= 2k個(gè)元素。由此可知10次比較可以確定1024個(gè)元素,20次比較能確定的元素超過(guò)100萬(wàn)個(gè),而30次比較能確定的元素多達(dá)10億個(gè)以上。
如果目標(biāo)對(duì)象不在數(shù)組中,則需要多比較一次。為了能根據(jù)元素個(gè)數(shù)確定比較次數(shù),我們需要逆運(yùn)算,也就是2的乘冪的反函數(shù),即“以2為底的對(duì)數(shù)”,記作log2。一般地說(shuō):
假設(shè)a = bx,則x = logba
對(duì)于以2為底的對(duì)數(shù),b = 2:
20 = 1, log2 1 = 0
21 = 2, log2 2 = 1
22 = 4, log2 4 = 2
23 = 8, log2 8 = 3
.
.
. .
.
.
210 = 1 024, log2 1 024 = 10
.
.
. .
.
.
213 = 8 192, log2 8 192 = 13
214 = 16 384, log2 16 384 = 14
.
.
. .
.
.
220 = 1 048 576, log2 1 048 576 = 20
因此,若k次比較操作能確定N(= 2k)個(gè)元素,那么對(duì)于含N個(gè)元素的數(shù)組,二分搜索需要執(zhí)行l(wèi)og2 N = k次比較操作。如果我們的架子上放了10 000張唱片,我們需要比較log2 10 000≈13.29次。因?yàn)椴豢赡鼙容^“半次”,需要的次數(shù)為14。
要想進(jìn)一步減少二分搜索需要的步數(shù),可以在搜索過(guò)程中不是簡(jiǎn)單地選擇中間元素進(jìn)行比較,而是嘗試在搜索區(qū)域內(nèi)更準(zhǔn)確地“猜測(cè)”可能的位置。
假設(shè)在已排序的唱片中搜索的對(duì)象名按字母順序更靠近區(qū)域開(kāi)始處,例如找Eminem,顯然選擇前部的某個(gè)位置進(jìn)行比較更好些。反之,要找“Roy Black”,從靠后的地方開(kāi)始更合理。
若要更好地改進(jìn),就得考慮每個(gè)字母可能出現(xiàn)的頻率,例如首字母是D或S的藝術(shù)家通常比首字母是X或Y的更常見(jiàn)。
5. 猜數(shù)游戲
今晚我要考考Linda,讓她猜1到1000之間的某個(gè)數(shù)。只要上課沒(méi)睡覺(jué),她就應(yīng)該能最多通過(guò)10個(gè)“是/否”的問(wèn)題得到結(jié)果。(圖1-2顯示如何只問(wèn)4個(gè)問(wèn)題就猜出1到16之間的某個(gè)數(shù)。)
為了避免反復(fù)問(wèn)那些“是小于某個(gè)數(shù)嗎?”或者“是大于某個(gè)數(shù)嗎?”那樣乏味的問(wèn)題,我們可以選擇問(wèn)“是奇數(shù)嗎?”或“是偶數(shù)嗎?”。因?yàn)橐粋€(gè)回答就可以讓我們排除一半的可能性。
類(lèi)似的問(wèn)題包括“十(百)位數(shù)是奇(偶)數(shù)嗎?”,像這樣的問(wèn)題同樣可以使搜索空間(大致)縮小一半。不過(guò)要確認(rèn)考慮了所有可能的數(shù),我們還得回到通常采用的減半方法(那些已經(jīng)被排除的數(shù)實(shí)際上已考慮在內(nèi))。
如果采用二進(jìn)制表示數(shù),這個(gè)過(guò)程甚至?xí)?jiǎn)單。十進(jìn)制系統(tǒng)是用“10的乘冪的和”的形式表示數(shù),例如:
107 = 1·102 + 0·101 + 7·100
= 1·100 + 0·10 + 7·1
▲圖1-2 在1~16范圍內(nèi)猜出某個(gè)數(shù)的圖示
而在二進(jìn)制系統(tǒng)中數(shù)是用“2的乘冪的和”的形式表示的:
107 = 1·26 + 1·25 + 0·24 + 1·23 + 0·22 + 1·21 + 1·20
= 1·64 + 1·32 + 0·16 + 1·8 + 0·4 + 1·2 + 1·1
因此107的二進(jìn)制表示為1101011。要猜出一個(gè)二進(jìn)制表示的數(shù)只要知道它最多多少位就足夠了。位數(shù)用以2為底的對(duì)數(shù)很容易計(jì)算。如果猜一個(gè)1到1000之間的數(shù),可以計(jì)算如下:
log2 1000≈9.97(向上取整)
也就是說(shuō)共有10位。因此問(wèn)10個(gè)問(wèn)題足夠了:“第1位數(shù)是1嗎?”“第2位數(shù)是1嗎?”“第3位數(shù)是1嗎?”等等。最后所有位都知道了還必須轉(zhuǎn)換為十進(jìn)制數(shù),用一個(gè)掌上的計(jì)算器就能解決了。
02 插入排序
我們要把書(shū)架上所有的書(shū)按照書(shū)名排序,這樣需要哪本書(shū)時(shí)很快就能找到。
如何快速地實(shí)現(xiàn)排序呢?我們可以有幾種不同的想法。例如我們可以依次查看每本書(shū),一旦發(fā)現(xiàn)兩本緊挨著的書(shū)的次序不對(duì)就交換一下位置。這種想法能行,因?yàn)樽罱K任何兩本書(shū)的先后都不會(huì)錯(cuò),但這平均要花費(fèi)太長(zhǎng)的時(shí)間。
另一種想法是先找出書(shū)名最“小”的那本書(shū)放在第一個(gè)位置,然后在剩下的書(shū)中再找出最“小”的放在緊挨著的后面位置,以此類(lèi)推直到所有書(shū)都放在了正確的地方。這種想法也能行;但是由于大量有用的線(xiàn)索沒(méi)有利用,多花費(fèi)了許多時(shí)間。下面我們?cè)囋嚻渌南敕ā?/span>
下面的想法似乎比上面討論的更加自然。第一本書(shū)自然是排好的。接下來(lái)我們拿第一本書(shū)的書(shū)名與第二本書(shū)的書(shū)名做比較,如果次序不對(duì)就交換兩本書(shū)的位置。然后我們看下一本書(shū)在前面已經(jīng)排好序的部分中應(yīng)該放在什么位置。
這可以反復(fù)進(jìn)行直到為所有的書(shū)安排了正確的位置。因?yàn)榍懊娴臅?shū)排序時(shí)提供的信息可供后面使用,這個(gè)方法應(yīng)該效率高一些。
現(xiàn)在把這個(gè)算法再細(xì)細(xì)看一下。第一本書(shū)單獨(dú)考慮可以看作排好了序。我們假設(shè)當(dāng)前考慮的書(shū)是第i本書(shū),而它左邊所有的書(shū)都已排好序了。要將第i本書(shū)加入序列中,我們首先查找它正確的位置,隨后將書(shū)插入即可;為此要將在正確位置右邊的所有書(shū)向右移動(dòng)一個(gè)位置。
接下來(lái)對(duì)第i + 1本書(shū)重復(fù)以上過(guò)程,以此類(lèi)推直到所有的書(shū)放到了正確位置。這個(gè)方法能快速產(chǎn)生正確結(jié)果,特別是如果我們采用第1章介紹的二分搜索尋找正確插入位置則效果更明顯。
我們現(xiàn)在來(lái)看看對(duì)任意數(shù)量的書(shū),這個(gè)直觀的方法如何實(shí)現(xiàn)。為了描述起來(lái)簡(jiǎn)單一些,我們用數(shù)字代替書(shū)名。
圖2-1中左邊的5本書(shū)(1,6,7,9,11)已經(jīng)排好序,而書(shū)名為5的書(shū)位置不正確。為了將5放入正確位置,首先與11交換位置,再與9交換位置,以此類(lèi)推直到5到達(dá)正確位置。然后我們?cè)偬幚頃?shū)名為3的書(shū),同樣通過(guò)與左側(cè)的書(shū)交換來(lái)到達(dá)正確位置。顯然最終所有的書(shū)都會(huì)放到正確的地方(見(jiàn)圖2-2)。
▲圖2-1 前5本書(shū)已排好序
▲圖2-2 書(shū)名為“5”的書(shū)移動(dòng)到正確位置
以下是算法的代碼。這里使用數(shù)組A,其元素標(biāo)號(hào)為1,2,3,…。A[i]表示數(shù)組中第i個(gè)元素的值。給n本書(shū)排序使用長(zhǎng)度為n的數(shù)組,元素A[1],A[2],A[3],…,A[n-1],A[n]存放所有的書(shū)名。
現(xiàn)在考慮算法執(zhí)行花費(fèi)的時(shí)間。我們考慮最壞的情況,所有書(shū)放置的位置正好與期望的次序相反,即書(shū)名最小的在最后的位置上,而書(shū)名最大的卻在最前面的位置上。
我們的算法讓第1本書(shū)與第2本書(shū)交換位置,第3本書(shū)要和前兩本書(shū)中每一本交換位置,第4本書(shū)則要和前面3本書(shū)中每一本交換位置,以此類(lèi)推,最后的一本書(shū)得和前面n-1本書(shū)中的每一本交換位置。交換的總次數(shù)是:
1+2+3+...+(n-1)=n(n-1)/2
利用圖2-3很容易推導(dǎo)出上述公式。整個(gè)矩形中含n·(n-1)個(gè)單元格,其中一半用于比較與交換。圖中顯示的是絕對(duì)的最壞情況。考慮平均情況,我們可以假設(shè)只需要一半的比較與交換。
如果開(kāi)始時(shí)書(shū)就幾乎是排好序的,需要的工作量會(huì)少很多;最好的情況是開(kāi)始時(shí)所有的書(shū)都在正確的位置上,那只需要進(jìn)行n-1次比較即可。
▲圖2-3 計(jì)算交換次數(shù)
你也許會(huì)看出算法還可以更簡(jiǎn)潔些。不用交換相鄰的兩本書(shū),而是將多本書(shū)向右移動(dòng),使得需要的插入位置空出來(lái)。如果2-4所示。
原來(lái)的k次兩兩置換操作,現(xiàn)在可以用k + 1次移動(dòng)一本書(shū)的操作替代。算法修改如下:
▲圖2-4 計(jì)算交換次數(shù)
盡管在串行的計(jì)算機(jī)上此算法排序效率不高,但它的實(shí)現(xiàn)非常簡(jiǎn)單,所以當(dāng)需要排序的對(duì)象數(shù)量不太大,或者可以假設(shè)多數(shù)對(duì)象次序不錯(cuò)的情況下還是會(huì)經(jīng)常使用插入排序算法。要對(duì)大量對(duì)象進(jìn)行排序就會(huì)使用其他算法,如mergeSort和quickSort。那些算法理解起來(lái)會(huì)難一些,實(shí)現(xiàn)也更復(fù)雜。
關(guān)于作者:本書(shū)共有66位作者,主要來(lái)自德國(guó)、瑞士。由貝特霍爾德·弗金(Berthold V?cking)、赫爾穆特·阿爾特(Helmut Alt)、馬丁·迪茨費(fèi)爾賓格(Martin Dietzfelbinger)、呂迪格·賴(lài)舒科(Rüdiger Reischuk)、克里斯蒂安·沙伊德勒(Christian Scheideler)、黑里貝特·沃爾默(Heribert Vollmer)、多蘿西婭·瓦格納(Dorothea Wagner)領(lǐng)銜編著。
本文摘編自《無(wú)處不在的算法》,經(jīng)出版方授權(quán)發(fā)布。
延伸閱讀《無(wú)處不在的算法》
點(diǎn)擊上圖了解及購(gòu)買(mǎi)
轉(zhuǎn)載請(qǐng)聯(lián)系微信:togo-maruko
推薦語(yǔ):杰出計(jì)算機(jī)教育家南京大學(xué)陳道蓄教授翻譯并推薦,啟蒙學(xué)生對(duì)計(jì)算機(jī)科學(xué)興趣、提升計(jì)算思維素養(yǎng)的入門(mén)讀本。
據(jù)統(tǒng)計(jì),99%的大咖都完成了這個(gè)神操作
▼
更多精彩
在公眾號(hào)后臺(tái)對(duì)話(huà)框輸入以下關(guān)鍵詞
查看更多優(yōu)質(zhì)內(nèi)容!
PPT?|?報(bào)告?|?讀書(shū)?|?書(shū)單
大數(shù)據(jù)?|?揭秘?|?人工智能?|?AI
Python?|?機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?神經(jīng)網(wǎng)絡(luò)
可視化?|?區(qū)塊鏈?|?干貨?|?數(shù)學(xué)
猜你想看
機(jī)器學(xué)習(xí)重大挑戰(zhàn):壞數(shù)據(jù)和壞算法正在毀掉你的項(xiàng)目
違背常識(shí)、顛覆認(rèn)知,終于有人把薛定諤的貓講明白了
干貨:用Python進(jìn)行數(shù)據(jù)清洗,這7種方法你一定要掌握
極度燒腦+驚人發(fā)現(xiàn):4個(gè)顛覆你世界觀的量子理論實(shí)驗(yàn)
Q:?這些技能你都掌握了嗎?
歡迎留言與大家分享
覺(jué)得不錯(cuò),請(qǐng)把這篇文章分享給你的朋友
轉(zhuǎn)載 / 投稿請(qǐng)聯(lián)系:baiyu@hzbook.com
更多精彩,請(qǐng)?jiān)诤笈_(tái)點(diǎn)擊“歷史文章”查看
點(diǎn)擊閱讀原文,了解更多
總結(jié)
以上是生活随笔為你收集整理的写给中学生的算法入门:学代码之前看这篇就够了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用Python玩转统计数据:取样、计算相
- 下一篇: 《三国演义》社交网络数据分析:最重要的一