
大數(shù)據(jù)時(shí)代 無處不在的算法應(yīng)用
能不能講講算法在工作中的運(yùn)用?你個(gè)人學(xué)習(xí)算法的過程是怎樣的?我對(duì)算法還是有點(diǎn)怕。除此之外,你認(rèn)為大學(xué)是應(yīng)該多花時(shí)間學(xué)應(yīng)用技術(shù)還是理論知識(shí)呢?
今天就來聊聊我自己學(xué)習(xí)算法的過程,以及算法在實(shí)際工作中的應(yīng)用。
以前,我們認(rèn)為大數(shù)據(jù)總是優(yōu)于好算法。也就是說,只要數(shù)據(jù)量足夠大,即使算法沒有那么好,也會(huì)產(chǎn)生好的結(jié)果。
前一陣子“極客時(shí)間” App 發(fā)布了一條極客新聞:“算法比數(shù)據(jù)更重要,AlphaGo Zero 完勝舊版?!毙侣劦膬?nèi)容是谷歌人工智能團(tuán)隊(duì) DeepMind 發(fā)布了新版的 AlphaGo 計(jì)算機(jī)程序,名為 AlphaGo Zero。這款軟件能夠從空白狀態(tài)開始,不需要人類輸入任何命令,便可以迅速自學(xué)圍棋,并以 100 比 0 的戰(zhàn)績(jī)擊敗了上一代 AlphaGo。
AlphaGo Zero 最大的突破在于實(shí)現(xiàn)了“白板理論”。白板理論認(rèn)為:嬰兒是一塊白板,可以通過后天學(xué)習(xí)和訓(xùn)練來提高智力。AI 的先驅(qū)圖靈認(rèn)為,只要能用機(jī)器制造一個(gè)類似于小孩的 AI,然后加以訓(xùn)練,就能得到一個(gè)近似成人智力,甚至超越人類智力的 AI。
自學(xué)成才的 AlphaGo Zero 正是實(shí)現(xiàn)了這一理論。AlphaGo 的首席研究員大衛(wèi)·席爾瓦(David Silver)認(rèn)為,從 AlphaGo Zero 中可以發(fā)現(xiàn),算法比所謂的計(jì)算或數(shù)據(jù)量更為重要。事實(shí)上,AlphaGo Zero 使用的計(jì)算要比過去的版本少一個(gè)數(shù)量級(jí),但是因?yàn)槭褂昧烁嘣砗退惴ǎ男阅芊炊訌?qiáng)大。
由此可見,在大數(shù)據(jù)時(shí)代,算法的重要性日漸明晰。一個(gè)合格的程序員,必須掌握算法。
我不知道大家是怎樣一步步開始精通算法和數(shù)據(jù)結(jié)構(gòu)的。大二時(shí),我第一次接觸到了《數(shù)據(jù)結(jié)構(gòu)》,因?yàn)閺膩頉]有過這方面的思維訓(xùn)練,當(dāng)時(shí)的我學(xué)習(xí)這門課比較費(fèi)力。那時(shí)候接觸到的編程比較少,所以并沒有很多實(shí)際經(jīng)驗(yàn)讓我欣賞和體味:一個(gè)好的數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)到底 “美” 在哪里。
開始學(xué)習(xí)的時(shí)候,我甚至有點(diǎn)死記硬背的感覺,我并不知道 “如果不這樣設(shè)計(jì)”,實(shí)際上會(huì)出現(xiàn)哪些問題。各種時(shí)間和空間復(fù)雜度對(duì)我而言,也僅僅是一些不能融入到實(shí)際問題的數(shù)學(xué)游戲。至于“每種最壞情況、平均情況的時(shí)間空間復(fù)雜度與各種排序”,這些內(nèi)容為什么那么重要,當(dāng)時(shí)我想,可能因?yàn)榭荚嚂?huì)考吧。
沒想到后來的時(shí)日,我又與算法重新結(jié)緣。可能是因?yàn)槿R斯大學(xué)給的獎(jiǎng)學(xué)金太高了,所以每個(gè)研究生需要無償當(dāng)五個(gè)學(xué)期的助教 。好巧不巧,我又被算法老師兩次挑中當(dāng)助教。所以,在命運(yùn)強(qiáng)制下,一本《算法導(dǎo)論》就這樣被我前前后后仔細(xì)學(xué)習(xí)了不下四遍。這樣的結(jié)果是,我基本做過整本書的習(xí)題,有些還不止做了一遍。我學(xué)習(xí)算法的過程,就是反復(fù)閱讀《算法導(dǎo)論》的過程。
那么,學(xué)習(xí)算法到底有什么用處呢?
首先,算法是面試的敲門磚國(guó)內(nèi)的情況我不太清楚,但就硅谷的 IT 公司而言,不但電話面試偏算法,現(xiàn)場(chǎng)面試至少有兩輪都是考算法和編程的。
大一些老一些的公司,像谷歌、Facebook、領(lǐng)英、Dropbox 等,都是直接在白板上寫程序。小一些新一些的公司,如 Square、Airbnb 等,都是需要現(xiàn)場(chǎng)上機(jī)寫出可運(yùn)行的程序。Twitter、Uber 等公司則是白板上機(jī)兼?zhèn)洌暻闆r而定。
雖說還有其它考系統(tǒng)設(shè)計(jì)等部分,但如果算法沒有打好基礎(chǔ),第一關(guān)就很難過,而且算法要熟悉到能夠現(xiàn)場(chǎng)短時(shí)間內(nèi)寫出正解,所以很多人準(zhǔn)備面試前都需要刷題。
有一次我當(dāng)面試官,電話面試另外一個(gè)人,當(dāng)時(shí)是用 Codepad 共享的方式,讓對(duì)方寫一個(gè)可運(yùn)行的正則表達(dá)式解析器。45 分鐘過去了,對(duì)方并沒有寫出來。我就例行公事地問:“你還有什么問題想問或者想了解么?” 對(duì)方估計(jì)因?yàn)閷懖怀龀绦蚝苡写鞌「?,就反問:“你們平時(shí)工作難道就是天天寫正則表達(dá)式的解析器么?”
一瞬間,我竟無言以對(duì)。想了想,我回復(fù)說:“不用天天寫。那我再給你 15 分鐘,你證明給我看你還會(huì)什么,或者有什么理由讓我給你進(jìn)一步面試的機(jī)會(huì)?” 對(duì)方想了一會(huì),默默掛掉了電話。
老實(shí)說,我對(duì)目前面試中偏重算法的程度是持保留意見的。算法題答得好,并不能說明你有多牛。牛人也有因?yàn)椴辉杆㈩}而馬失前蹄的時(shí)候。但是除了算法測(cè)試,顯然也沒有更好的方法佐證候選人的實(shí)力;然而怎樣才能最優(yōu)化面試流程,這也是個(gè)討論起來沒完的話題,并且每次討論必定無果而終。
其次,編程時(shí)用到的更多是算法思想,而不是寫具體的算法說到實(shí)際工作中真正需要使用算法的機(jī)會(huì),讓我想一想 —— 這個(gè)范圍應(yīng)該在 10% 的附近游走。
有些朋友在工作中遇到算法場(chǎng)景多些,有的少些。更多的時(shí)候,是對(duì)業(yè)務(wù)邏輯的理解,對(duì)程序語言各種特性的熟練使用,對(duì)代碼風(fēng)格和模式的把握,各種同步異步的處理,包括代碼測(cè)試、系統(tǒng)部署是否正規(guī)化等等。需要設(shè)計(jì)甚至實(shí)現(xiàn)一個(gè)算法的機(jī)會(huì)確實(shí)很少,即使用到,現(xiàn)學(xué)可能都來得及。
但是熟悉基本算法的好處在于:如果工作需要讀的一段代碼中包含一些基本算法思想,你會(huì)比不懂算法的人理解代碼含義更快。讀到一段爛代碼,你知道為什么爛,爛在哪,怎么去優(yōu)化。
當(dāng)真的需要在程序中設(shè)計(jì)算法的時(shí)候,熟悉算法的你會(huì)給出一個(gè)更為完備的方案,對(duì)程序中出現(xiàn)的算法或比較復(fù)雜的時(shí)間復(fù)雜度問題你會(huì)更有敏感性。熟悉算法你還可以成為一個(gè)更優(yōu)秀的面試官,可以和別的工程師聊天時(shí)候不被鄙視。
最后,不精通算法的工程師永遠(yuǎn)不是好工程師當(dāng)然,除了算法導(dǎo)論中那些已成為經(jīng)典的基本算法以及算法思想(Divide-and-conquer,Dynamic programming)等,其實(shí)我們每天接觸到的各種技術(shù)中,算法無處不在。
就拿人人都會(huì)接觸的存儲(chǔ)為例吧,各種不同的數(shù)據(jù)庫或者鍵值存儲(chǔ)的實(shí)現(xiàn),就會(huì)涉及各種分片(Sharding)算法、緩存失敗(Cache Invalidation)算法、 鎖定(Locking)算法,包括各種容錯(cuò)算法(多復(fù)制的同步算法)。 雖然說平時(shí)不太會(huì)去寫這些算法 —— 除非你恰恰是做數(shù)據(jù)庫實(shí)現(xiàn)的 —— 但是真正做到了解這項(xiàng)技術(shù)的算法細(xì)節(jié)和實(shí)現(xiàn)細(xì)節(jié),無論對(duì)于技術(shù)選型還是對(duì)自己程序的整體性能評(píng)估都是至關(guān)重要的。
舉個(gè)例子,當(dāng)你在系統(tǒng)里需要一個(gè)鍵值存儲(chǔ)方案的時(shí)候,面對(duì)可供選擇的各種備選方案,到底應(yīng)該選擇哪一種呢?
永遠(yuǎn)沒有一種方案在所有方面都是最佳的。就拿 Facebook 開源的 RocksDB 來說吧。了解它歷史的人都知道,RocksDB 是構(gòu)建在 LevelDB 之上的,可以在多 CPU 服務(wù)器上高效運(yùn)行的一種鍵值存儲(chǔ)。而 LevelDB 又是基于谷歌的 BigTable 數(shù)據(jù)庫系統(tǒng)概念設(shè)計(jì)的。
早在 2004 年,谷歌開始開發(fā) BigTable,其代碼大量的依賴谷歌內(nèi)部的代碼庫,雖然 BigTable 很牛,卻因此無法開源。2011 年,谷歌的杰夫·迪恩和桑杰·格瑪沃爾特開始基于 BigTable 的思想,重新開發(fā)一個(gè)開源的類似系統(tǒng),并保證做到不用任何谷歌的代碼庫,于是就有了 LevelDB。這樣一個(gè)鍵值存儲(chǔ)的實(shí)現(xiàn)也用在了谷歌瀏覽器的 IndexedDB 中,對(duì)于谷歌瀏覽器的開源也提供了一定的支持。
我曾經(jīng)在文章中提到過 CockroachDB,其實(shí)又可以看作是基于 RocksDB 之上的一個(gè)分布式實(shí)現(xiàn)。從另一個(gè)層面上講,CockroachDB 又可以說是 Spanner 的一個(gè)開源實(shí)現(xiàn)。知道這些,就知道這些數(shù)據(jù)庫或鍵值存儲(chǔ)其實(shí)都同出一系。再來看看 LevelDB 底層的 SSTable 算法,就知道他們都是針對(duì)高吞吐量(high throughput),順序讀 / 寫工作負(fù)載(sequential read/write workloads)有效的存儲(chǔ)系統(tǒng)。
當(dāng)然,一個(gè)系統(tǒng)里除了最基本的算法,很多的實(shí)現(xiàn)細(xì)節(jié)和系統(tǒng)架構(gòu)都會(huì)對(duì)性能及應(yīng)用有很大的影響。然而,對(duì)算法本身的理解和把握,永遠(yuǎn)是深入了解系統(tǒng)不可或缺的一環(huán)。
類似的例子還有很多,比如日志分析、打車軟件的調(diào)度算法。
拿我比較熟悉的支付領(lǐng)域來說吧,比如信用卡 BIN 參數(shù)的壓縮,從服務(wù)端到移動(dòng) App 的數(shù)據(jù)傳輸,為了讓傳輸數(shù)據(jù)足夠小,需要對(duì)數(shù)據(jù)進(jìn)行壓縮編碼。
每個(gè)國(guó)家,比如中國(guó)、韓國(guó)、墨西哥信用卡前綴格式都不一樣,如何盡量壓縮同時(shí)又不會(huì)太復(fù)雜,以至于影響移動(dòng) App 端的代碼復(fù)雜度,甚至形成 Bug 等,也需要對(duì)各種相關(guān)算法有詳盡地了解,才有可能做出最優(yōu)的方案。
關(guān)于算法我們來總結(jié)一下:
在大數(shù)據(jù)時(shí)代,數(shù)據(jù)和算法都同等重要,甚至算法比計(jì)算能力或數(shù)據(jù)量更為重要。
如何學(xué)習(xí)算法呢?讀經(jīng)典著作、做題,然后在實(shí)踐中閱讀和使用算法。
算法是面試的敲門磚,可以幫助你得到一份自己喜歡的工作。
寫程序中用到的更多是算法思想,不是寫具體的算法。
不精通算法的工程師永遠(yuǎn)不會(huì)是一個(gè)優(yōu)秀的工程師,只有對(duì)各種相關(guān)算法有詳盡理解,才有可能做出最優(yōu)的方案。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03