隨著科學(xué)技術(shù)的發(fā)展,人工智能已經(jīng)逐漸滲透到各個(gè)行業(yè),這是一個(gè)相當(dāng)有前景的專(zhuān)業(yè)領(lǐng)域。
其中,算法工程師這一職位更是非?;鸨诩比贝罅咳瞬诺耐瑫r(shí),也吸引了眾多求職者,那么,初學(xué)者該如何學(xué)好算法呢?
算法工程師的具體分支:
其次,算法工程師的必備技能:
▲至少熟悉一門(mén)編程語(yǔ)言 C/C++/java/python/R;
▲功底;熟練運(yùn)用各種常用算法和數(shù)據(jù)結(jié)構(gòu),有獨(dú)立的實(shí)現(xiàn)能力;
▲熟悉數(shù)據(jù)挖掘算法;
▲熟悉機(jī)器學(xué)習(xí)相關(guān)知識(shí)理論。
▲加分項(xiàng):具有較為豐富的項(xiàng)目實(shí)踐經(jīng)驗(yàn)。
好奇的你看到這里,肯定帶著大大的疑問(wèn):是不是要直接學(xué)習(xí)這些算法呢?
萬(wàn)丈高樓平地起,任何高深的算法都要從基礎(chǔ)算法學(xué)起,不可能一口吃個(gè)胖子。
所以,初入門(mén)的你學(xué)習(xí)算法還是要從基礎(chǔ)開(kāi)始:
▲首先學(xué)習(xí)一門(mén)語(yǔ)言。
例如 C/C++/Java/python,初學(xué)者學(xué) C++比較普遍。
▲學(xué)數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu)書(shū)有很多,但是有些教材晦澀難懂,建議看圖解多,通俗易懂的書(shū),推薦《趣學(xué)數(shù)據(jù)結(jié)構(gòu)》。
▲學(xué)算法。
不要直接看《算法導(dǎo)論》,大量證明會(huì)讓你崩潰。推薦《趣學(xué)算法》,有問(wèn)題分析,完美圖解,偽碼詳解,實(shí)戰(zhàn)演練,適合初學(xué)者快速掌握經(jīng)典算法。
接下來(lái),讓我們跟隨《趣學(xué)數(shù)據(jù)結(jié)構(gòu)》《趣學(xué)算法》作者陳小玉老師的視角,找到學(xué)習(xí)算法與數(shù)據(jù)結(jié)構(gòu)的竅門(mén)!
01
為什么要學(xué)數(shù)據(jù)結(jié)構(gòu)?
招聘和數(shù)據(jù)不得不說(shuō)的故事
如果你關(guān)注招聘試題,就會(huì)發(fā)現(xiàn)越是大公司,問(wèn)的問(wèn)題越基礎(chǔ),有的甚至問(wèn)你什么是棧和隊(duì)列,反而一些小公司會(huì)關(guān)心你做過(guò)什么系統(tǒng),關(guān)注點(diǎn)不同。
大公司更注重基礎(chǔ)扎實(shí),發(fā)展?jié)摿Γ」鞠M懔⒖?、馬上為他干活,通常是沒(méi)什么技術(shù)含量的活。小公司喜歡細(xì)而長(zhǎng)的竹子,大公司更喜歡碗口粗的竹筍。
我曾經(jīng)推薦一個(gè)學(xué)生到某知名公司,沒(méi)多久,學(xué)生給我說(shuō)了應(yīng)聘的事情:“我介紹我開(kāi)發(fā)了企業(yè)管理系統(tǒng)、在線商城系統(tǒng)等等,沒(méi)想到他問(wèn)我使用了什么數(shù)據(jù)結(jié)構(gòu)和算法,我懂很多技術(shù),那么多功能我都實(shí)現(xiàn)了,他不問(wèn),卻問(wèn)我使用了什么數(shù)據(jù)結(jié)構(gòu)和算法,你說(shuō)搞笑不?數(shù)據(jù)結(jié)構(gòu)、算法我早就忘了,我會(huì)開(kāi)發(fā)軟件還不行嗎?”
人力資源總監(jiān)也反饋過(guò)來(lái)意見(jiàn):“很搞笑,這個(gè)學(xué)生做了不少系統(tǒng),卻說(shuō)根本沒(méi)用到數(shù)據(jù)結(jié)構(gòu)和算法。”
既然雙方都覺(jué)得這是一個(gè)件搞笑事,我們就攤開(kāi)來(lái)看,數(shù)據(jù)結(jié)構(gòu)到底是什么東西。
撥云見(jiàn)日,看清數(shù)據(jù)結(jié)構(gòu)
遇到一個(gè)實(shí)際問(wèn)題,需要解決兩個(gè)事情:
(1) 如何將數(shù)據(jù)存儲(chǔ)在計(jì)算機(jī)中;
(2) 用什么方法策略解決問(wèn)題。
前者是數(shù)據(jù)結(jié)構(gòu),后者是算法。
只有數(shù)據(jù)結(jié)構(gòu)沒(méi)有算法,相當(dāng)于只把數(shù)據(jù)存儲(chǔ)到計(jì)算機(jī)中而沒(méi)有有效的方法去處理,就像一幢只有框架的爛尾樓;若只有算法,沒(méi)有數(shù)據(jù)結(jié)構(gòu),就像沙漠里的海市蜃樓,只不過(guò)是空中樓閣罷了。
數(shù)據(jù)是一切能輸入到計(jì)算機(jī)的信息總和,結(jié)構(gòu)是指數(shù)據(jù)之間的關(guān)系,數(shù)據(jù)結(jié)構(gòu)就是將數(shù)據(jù)及其之間的關(guān)系有效地存儲(chǔ)在計(jì)算機(jī)中。算法是指對(duì)特定問(wèn)題求解步驟的一種描述,說(shuō)白了就是解決問(wèn)題的方法策略。
數(shù)據(jù)結(jié)構(gòu)和算法不依賴(lài)于語(yǔ)言,什么語(yǔ)言無(wú)所謂。但是如果上機(jī)實(shí)現(xiàn)的話,就要使用計(jì)算機(jī)語(yǔ)言。
遇到一個(gè)實(shí)際問(wèn)題,充分利用所學(xué)的數(shù)據(jù)結(jié)構(gòu),將數(shù)據(jù)及其之間的關(guān)系有效地存儲(chǔ)在計(jì)算機(jī)中,然后選擇合適的算法策略,并用程序高效實(shí)現(xiàn),這就是N.Wirth 教授所說(shuō)的:
數(shù)據(jù)結(jié)構(gòu)+ 算法=程序。
計(jì)算機(jī)專(zhuān)業(yè)本科生都開(kāi)設(shè)數(shù)據(jù)結(jié)構(gòu)課程,它是計(jì)算機(jī)學(xué)科知識(shí)結(jié)構(gòu)的核心和技術(shù)體系的基石。
研究生考試也是必考科目,隨著科學(xué)技術(shù)的飛速發(fā)展,數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)性地位不僅沒(méi)有動(dòng)搖,反而由于近年來(lái)算法工程師的高薪火爆,而得到了業(yè)內(nèi)空前的重視。
很多人覺(jué)得基本的數(shù)據(jù)結(jié)構(gòu)及操作已經(jīng)在高級(jí)語(yǔ)言(如 C++、JAVA 語(yǔ)言中)中封裝,棧、隊(duì)列、排序、優(yōu)先隊(duì)列等都可以直接調(diào)用庫(kù)函數(shù),學(xué)會(huì)怎么調(diào)用就好了,干嘛要重復(fù)造輪子?
02
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)有什么用處?
學(xué)習(xí)數(shù)據(jù)有效存儲(chǔ)的方法
很多學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時(shí),問(wèn)我要不要把單鏈表插入刪除代碼背下來(lái)?要不合上書(shū)就不會(huì)寫(xiě)了。我非常詫異,為什么要背?理工科技術(shù)知識(shí)很少需要記憶的,是用的,用的!學(xué)習(xí)知識(shí)不是死記硬背,更重要的是學(xué)習(xí)處理問(wèn)題的方法。
同一個(gè)問(wèn)題,如何有效地存儲(chǔ)數(shù)據(jù),不同的數(shù)據(jù)結(jié)構(gòu)產(chǎn)生什么樣的算法復(fù)雜性,有沒(méi)有更好的存儲(chǔ)方法提高算法的效率?
例如,用順序表查找需要O(n)的時(shí)間復(fù)雜度,用平衡樹(shù)查找需要 O(logn)的時(shí)間復(fù)雜度。這是什么概念呢?就像你有 10 個(gè)億,一覺(jué)醒來(lái),兜里只剩下 30 塊!
處理具有復(fù)雜關(guān)系的數(shù)據(jù)
現(xiàn)實(shí)中很多具有復(fù)雜關(guān)系的數(shù)據(jù),無(wú)法通過(guò)簡(jiǎn)單的庫(kù)函數(shù)調(diào)用實(shí)現(xiàn)。專(zhuān)業(yè)認(rèn)證中特別強(qiáng)調(diào)培養(yǎng)學(xué)生解決復(fù)雜工程問(wèn)題的能力,什么是復(fù)雜工程問(wèn)題?
就是需要綜合運(yùn)用多個(gè)知識(shí)技術(shù)解決的問(wèn)題。如同現(xiàn)在很多芯片高度集成,完全不需要芯片內(nèi)部如何,直接使用就行了。
但是,如果在現(xiàn)實(shí)中遇到一個(gè)復(fù)雜問(wèn)題,一個(gè)芯片只能完成其中一個(gè)功能,難道要連接十幾塊芯片來(lái)解決這一個(gè)問(wèn)題?
你在搞圣誕樹(shù)嘛?一個(gè)樹(shù)枝掛個(gè)小禮物,叮叮當(dāng)當(dāng)?shù)膩y響。這顯然是不合適的,我們需要的是完成該復(fù)雜問(wèn)題的一個(gè)芯片,因此需要運(yùn)用所學(xué)的數(shù)據(jù)結(jié)構(gòu)知識(shí),高效處理具有復(fù)雜關(guān)系的數(shù)據(jù)。
通過(guò)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),更加準(zhǔn)確、深刻地理解不同數(shù)據(jù)結(jié)構(gòu)之間的共性和聯(lián)系,學(xué)會(huì)選擇和改進(jìn)數(shù)據(jù)結(jié)構(gòu),高效地設(shè)計(jì)并實(shí)現(xiàn)各種算法,這才是數(shù)據(jù)結(jié)構(gòu)的精髓。
03
數(shù)據(jù)結(jié)構(gòu)為什么那么難?
網(wǎng)絡(luò)上太多的同學(xué)吐槽被虐,如滔滔江水連綿不絕,數(shù)據(jù)結(jié)構(gòu)太難了!真的很難嗎?其實(shí)數(shù)據(jù)結(jié)構(gòu)只是講了三種:線性結(jié)構(gòu)、樹(shù)、圖。到底難在哪里呢?通過(guò)調(diào)查了解大概有四個(gè)原因:
▲無(wú)法接受的描述方式
數(shù)據(jù)結(jié)構(gòu)的描述大多是抽象的形式,我們使用自然語(yǔ)言表達(dá)習(xí)慣了,不容易接受數(shù)據(jù)結(jié)構(gòu)的抽象表示。
不止一個(gè)學(xué)生問(wèn)我,書(shū)上的“ElemType”到底是什么類(lèi)型?運(yùn)行時(shí)怎么提示錯(cuò)誤。它的意思就是“元素類(lèi)型”,只是這樣的描述,你需要什么類(lèi)型就寫(xiě)什么類(lèi)型,例如 int。這樣的表達(dá)方式讓不少人崩潰。
▲不知道什么用處
盡管很多人學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),有的人是應(yīng)付考試,有的人考研需要,有的人參加算法競(jìng)賽需要,而很多人不太清楚學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)有什么用處,迷迷糊糊看書(shū)、做題、考試。
▲體會(huì)不到其中的妙處
由于教材、教師等等各種因素影響,很多學(xué)生沒(méi)有體會(huì)到數(shù)據(jù)結(jié)構(gòu)處理數(shù)據(jù)的妙處,經(jīng)常為學(xué)不會(huì)而焦頭爛額,無(wú)法體會(huì)其中樂(lè)趣,有趣是才有意思,興趣是最大的驅(qū)動(dòng)力。一旦體會(huì)到其中的奧妙,就會(huì)有停不下來(lái)的感覺(jué)。
有讀者給我留言,老師看了你的書(shū)根本停不下來(lái)。其實(shí),我寫(xiě)書(shū)的時(shí)候也停不下來(lái),神同步。
▲語(yǔ)言基礎(chǔ)不好
我一直強(qiáng)調(diào)先看圖解,理清思路,再上機(jī)。還是有很多同學(xué)已經(jīng)理解了思路后,因?yàn)槿鄙?main 函數(shù),輸入輸出格式不對(duì),缺少括號(hào)等等各種語(yǔ)言問(wèn)題卡殼,而這一切統(tǒng)統(tǒng)戴給了“數(shù)據(jù)結(jié)構(gòu)太難了”這個(gè)大帽子。
04
數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)秘籍
在講學(xué)習(xí)秘籍之前,首先了解一下數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)的三種境界:
▲會(huì)數(shù)據(jù)結(jié)構(gòu)的基本操作
這是最基礎(chǔ)的要求,學(xué)會(huì)各種數(shù)據(jù)結(jié)構(gòu)的基本操作,取值、查找、插入、刪除等。先看圖解,理解各種數(shù)據(jù)結(jié)構(gòu)的定義,操作方法,然后看代碼,嘗試自己動(dòng)手上機(jī)運(yùn)行,逐漸掌握基本操作。
初學(xué)時(shí),要想理解數(shù)據(jù)結(jié)構(gòu),一定要學(xué)會(huì)畫(huà)圖,通過(guò)畫(huà)圖形象表達(dá),更能體會(huì)其中的數(shù)據(jù)結(jié)構(gòu)關(guān)系。因此,初學(xué)階段學(xué)習(xí)利器:畫(huà)圖,理解,畫(huà)圖。
▲會(huì)利用數(shù)據(jù)結(jié)構(gòu),解決實(shí)際問(wèn)題
在掌握了書(shū)上的基本操作之后,就可以嘗試?yán)脭?shù)據(jù)結(jié)構(gòu)解決一些實(shí)際問(wèn)題了,先學(xué)經(jīng)典應(yīng)用問(wèn)題的解決方法,體會(huì)數(shù)據(jù)結(jié)構(gòu)的使用方法,然后再做題,獨(dú)立設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)解決問(wèn)題。
要想熟練應(yīng)用就必須做大量的題,從做題中體會(huì)其中的方法。最好進(jìn)行專(zhuān)項(xiàng)練習(xí),比如線性表問(wèn)題,二叉樹(shù)問(wèn)題,圖問(wèn)題,該階段學(xué)習(xí)利器:做題,反思,做題。
▲熟練使用和改進(jìn)數(shù)據(jù)結(jié)構(gòu),優(yōu)化算法
這是最高境界了,也是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的精髓所在,單獨(dú)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是無(wú)法達(dá)到這種境界的。它需要在學(xué)習(xí)算法的過(guò)程中慢慢修煉。
在學(xué)習(xí)算法的同時(shí),逐步熟練應(yīng)用、改進(jìn),慢慢體會(huì)不同數(shù)據(jù)結(jié)構(gòu)和算法策略的算法復(fù)雜性,最終學(xué)會(huì)利用數(shù)據(jù)結(jié)構(gòu)改進(jìn)和優(yōu)化算法。
該階段已經(jīng)在數(shù)據(jù)結(jié)構(gòu)之上,通過(guò)在測(cè)試系統(tǒng)上刷各種算法題,體會(huì)利用數(shù)據(jù)結(jié)構(gòu)改進(jìn)優(yōu)化算法。該階段學(xué)習(xí)利器:刷題,總結(jié),刷題。
刷題網(wǎng)站
打比賽:HDU、POJ、Vjudge、Code Forces
找工作:LeetCode
05
算法為什么那么難
很多人感嘆:算法為什么 那么難!首先,算法本身具有一定的復(fù)雜性,還有一個(gè)原因:講的太爛!算法的教與學(xué)有兩個(gè)困難:
▲我們學(xué)習(xí)了那些經(jīng)典的算法,在驚嘆它們奇思妙想的同時(shí),難免疑慮重重:這么牛,怎么想到的?對(duì)學(xué)生來(lái)說(shuō),這可能是最費(fèi)解、也最讓人窩火的地方。高手講,學(xué)算法要學(xué)它的來(lái)龍去脈,包括種種證明。
但這對(duì)菜鳥(niǎo)來(lái)說(shuō),簡(jiǎn)直比登天還難,很可能花費(fèi)很多時(shí)間也無(wú)法搞清楚。這條路對(duì)大多數(shù)人來(lái)說(shuō),是行不通的,那怎么辦呢?下功夫去記憶書(shū)上的算法?記住這些算法的效率?看似學(xué)會(huì)了,其實(shí)兩手空空。遇到一個(gè)新問(wèn)題,仍然無(wú)從下手。
可這偏偏又是極重要的,無(wú)論作研究還是實(shí)際工作,一個(gè)計(jì)算機(jī)專(zhuān)業(yè)人士最重要的能力,就是解決問(wèn)題——解決那些不斷從實(shí)際應(yīng)用中冒出來(lái)的新問(wèn)題。
▲算法作為一門(mén)學(xué)問(wèn),有兩條幾乎平行的線索。一個(gè)是數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)對(duì)象):數(shù)、矩陣、集合、串、排列、圖、表達(dá)式、分布等等。另一個(gè)是算法策略:貪心、分治、動(dòng)態(tài)規(guī)劃、線性規(guī)劃、搜索等等。
這兩條線索是相互獨(dú)立的:同一個(gè)數(shù)據(jù)對(duì)象上有不同的問(wèn)題,例如單源最短路徑和最優(yōu)二叉樹(shù),就可以用到不同的算法策略,如貪心和動(dòng)態(tài)規(guī)劃;而同一個(gè)算法策略,例如排序和整數(shù)乘法,也會(huì)用到不同的數(shù)據(jù)結(jié)構(gòu)。它們之間是多對(duì)多的關(guān)系。
兩條線索交織在一起,該如何表述?
我們?cè)缫蚜?xí)慣《數(shù)據(jù)結(jié)構(gòu)》中講數(shù)據(jù)結(jié)構(gòu),《算法設(shè)計(jì)與分析》里面講算法策略。各說(shuō)各的,講算法設(shè)計(jì)時(shí)就假設(shè)你已經(jīng)對(duì)數(shù)據(jù)結(jié)構(gòu)了如指掌,還沒(méi)有哪一本算法書(shū)很好的解決這兩個(gè)困難,傳統(tǒng)的算法書(shū),大多注重內(nèi)容的收錄,但卻忽視思維過(guò)程的展示,因此我們學(xué)習(xí)了經(jīng)典的算法,卻費(fèi)解于算法設(shè)計(jì)的過(guò)程。
遇到一個(gè)實(shí)際問(wèn)題,通過(guò)問(wèn)題分析,選擇使用什么樣的算法策略,基于這種算法策略選擇什么樣的數(shù)據(jù)結(jié)構(gòu),有時(shí)算法策略和數(shù)據(jù)結(jié)構(gòu)的選擇并不是唯一的,不同的算法策略和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的算法,其復(fù)雜性是不同的。
而很多書(shū)就是灌輸式的講一個(gè)實(shí)例,一下子就選擇了一個(gè)認(rèn)定是最優(yōu)的算法策略,告訴你就這樣干,不談數(shù)據(jù)結(jié)構(gòu),然后分析算法復(fù)雜性,就結(jié)束了。
原則上講算法策略就講算法策略,不依賴(lài)任何程序設(shè)計(jì)語(yǔ)言和數(shù)據(jù)結(jié)構(gòu),但對(duì)很多學(xué)生來(lái)講,尤其是語(yǔ)言沒(méi)學(xué)好,數(shù)據(jù)結(jié)構(gòu)也不熟練的同學(xué),只講算法策略,如同空中樓閣。自己用算法解決實(shí)際問(wèn)題,一頭霧水。
《趣學(xué)算法》,從問(wèn)題出發(fā),根據(jù)實(shí)際問(wèn)題進(jìn)行分析,選擇合適的算法策略,并分析為什么采用這種算法策略,然后選擇什么數(shù)據(jù)結(jié)構(gòu),不同的數(shù)據(jù)結(jié)構(gòu)復(fù)雜性會(huì)有什么區(qū)別,巧妙地將數(shù)據(jù)結(jié)構(gòu)和算法策略擰成了一條線。
通過(guò)大量實(shí)例,充分展現(xiàn)算法設(shè)計(jì)的思維過(guò)程,讓學(xué)生充分體會(huì)遇到一個(gè)問(wèn)題,如何分析,使用什么算法策略,采用什么數(shù)據(jù)結(jié)構(gòu),算法的復(fù)雜性如何?是否有優(yōu)化的可能?
西方教育旨在激發(fā)學(xué)生對(duì)世界的好奇心,而在這里,我們培養(yǎng)的是讓學(xué)生懷著一顆好奇心,思考問(wèn)題、解決問(wèn)題的能力。更重要的是——體會(huì)學(xué)習(xí)的樂(lè)趣,發(fā)現(xiàn)算法的美!
06
算法學(xué)習(xí)秘籍
知識(shí)在于積累,學(xué)習(xí)需要耐力。學(xué)習(xí)就像挖金礦,或許一開(kāi)始毫無(wú)頭緒,一頭霧水,但轉(zhuǎn)個(gè)角度,換換工具,時(shí)間久了總會(huì)找到一個(gè)縫隙。成功就是你比別人多走了一段路,或許恰恰是那么一小步。
▲第一個(gè)建議:多角度,對(duì)比學(xué)習(xí)
學(xué)習(xí)算法,可以先閱讀一本簡(jiǎn)單的入門(mén)書(shū),然后綜合幾本書(shū)橫向多角度看,例如學(xué)習(xí)動(dòng)態(tài)規(guī)劃,拿幾本算法書(shū),把動(dòng)態(tài)規(guī)劃這章找出來(lái),比較學(xué)習(xí),多角度對(duì)比分析更清晰,或許你會(huì)恍然大悟,噢,原來(lái)如此簡(jiǎn)單。
或許有同學(xué)說(shuō)我哪有那么多錢(qián)買(mǎi)那么多書(shū),只要你想學(xué)習(xí),沒(méi)有什么可以阻擋!你可以圖書(shū)館借,也可以聯(lián)系你的老師,每學(xué)期上課前,我都會(huì)告訴學(xué)生,如果你想學(xué)習(xí)卻沒(méi)錢(qián)買(mǎi)書(shū),我可以提供幫助。想一想,你真的沒(méi)有辦法?
▲第二個(gè)建議:大視野,不求甚解
經(jīng)常有學(xué)生為了一個(gè)公式推導(dǎo),或幾句代碼拋錨,甚至停滯數(shù)日,然后淹沒(méi)在無(wú)盡的挫敗感中,把自己弄得垂頭喪氣。公式可以不懂,代碼可以不會(huì)。你不必投入大量精力試圖推導(dǎo)書(shū)上的每一個(gè)公式,也不必探究語(yǔ)法或技術(shù)細(xì)節(jié)。
學(xué)算法就是學(xué)算法本身,首先是算法思想,解題思路,然后是算法實(shí)現(xiàn),算法思想的背后可能有高深的數(shù)學(xué)模型,復(fù)雜的公式推導(dǎo),你理解了當(dāng)然玄妙,不懂就拉倒。
算法實(shí)現(xiàn)可以用任何語(yǔ)言,所以不必糾結(jié)是 C,C++,Java,Python,更不必管?chē)?yán)格的語(yǔ)法規(guī)則,除非你要上機(jī)調(diào)試。
建議還是先領(lǐng)會(huì)算法,寫(xiě)偽代碼,在大腦中調(diào)試吧,如果沒(méi)有良好的編程經(jīng)驗(yàn),一開(kāi)始就上機(jī)或許更讓你崩潰。遇到不懂的部分,瀏覽一下或跳過(guò)去,讀完了還不明白再翻翻別的書(shū),
總有一天,你會(huì)發(fā)現(xiàn),“暮然回首,那人卻在燈火闌珊處”。
▲第三個(gè)建議:多交流,見(jiàn)賢思齊
與同學(xué),朋友,教師或其他編程愛(ài)好者們一起學(xué)習(xí)和討論問(wèn)題,是取得進(jìn)步最有效的辦法,也是分享知識(shí)和快樂(lè)的途徑。
加入論壇,加入交流群,會(huì)了解其它人在做什么,怎么做,遇到問(wèn)題可以請(qǐng)教高手,帶來(lái)醍醐灌頂?shù)南矏?;也可以?yīng)助菜鳥(niǎo),使你暗自得意,信心倍增。論壇和群也會(huì)分享大量的學(xué)習(xí)資料和視頻,還有不定期的培訓(xùn)講座,讀書(shū)交流會(huì),你會(huì)發(fā)現(xiàn),不是你一個(gè)人在戰(zhàn)斗!
▲第四個(gè)建議:勤實(shí)戰(zhàn),越挫越勇
實(shí)踐是檢驗(yàn)一切真理的標(biāo)準(zhǔn)。古人云:“學(xué)以致用”,“師夷長(zhǎng)技以制夷”。請(qǐng)不要急切期盼“實(shí)際的”例子,更不要看不起小實(shí)例,“不積跬步,無(wú)以至千里”。
大規(guī)模的成功商業(yè)案例所采用的算法,人工情感,無(wú)人駕駛,不是我們目前要解決的問(wèn)題。
看清楚腳下的路,比仰望天空更實(shí)際,多做一些實(shí)戰(zhàn)練習(xí),更好地體會(huì)算法的本質(zhì),在錯(cuò)誤中不斷成長(zhǎng),越挫越勇,終究會(huì)成參天大樹(shù)。
▲第五個(gè)建議:看電影,洞察未來(lái)
不管是講《人工智能》,還是《算法分析》,我都會(huì)建議同學(xué)們?nèi)タ匆豢纯苹秒娪?,如《人工智能》、《記憶裂痕》、《絕密飛行》、《未來(lái)戰(zhàn)士》、《她》等等。奇妙的是,這些科幻的東西,正在一步步的實(shí)現(xiàn),靠的是什么?
人工智能。計(jì)算機(jī)的終極是人工智能,人工智能的核心是算法。未來(lái)的戰(zhàn)爭(zhēng)是科技的戰(zhàn)爭(zhēng),先進(jìn)的科技需要人工智能。我們的國(guó)家還有很多技術(shù)落后,未來(lái)需要你。
“一心兩本”學(xué)習(xí)法:
一顆好奇心,兩個(gè)記錄本。懷著一顆好奇心去學(xué)習(xí),才能不斷的解決問(wèn)題,獲得滿(mǎn)足感,體會(huì)算法的美。
很多科學(xué)大牛的秘訣就是永遠(yuǎn)保持一顆好奇心;一個(gè)記錄本用來(lái)記錄學(xué)習(xí)重點(diǎn)難點(diǎn),隨時(shí)的突發(fā)奇想;一個(gè)記錄本做日記或周記,記錄一天或一周來(lái)學(xué)了什么,有什么經(jīng)驗(yàn)教訓(xùn),需要注意什么,計(jì)劃下一天或下一周做什么。
不停的總結(jié)反思過(guò)去,計(jì)劃未來(lái),這樣每天都有事做,心中滿(mǎn)滿(mǎn)的能量。一個(gè)人經(jīng)常上課睡覺(jué),因?yàn)樗闹袩o(wú)事可做;一個(gè)人經(jīng)常失眠,因?yàn)樗睦锸聝禾啵?/p>
-
算法
+關(guān)注
關(guān)注
23文章
4607瀏覽量
92829 -
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
40123
原文標(biāo)題:別頭疼了,你要的算法和數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)路線來(lái)了!
文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論