「大學生學編程系列」第九篇:如何學習演算法

作為一個標準的程式設計師對於演算法需要有一個基礎的掌握,而且演算法幾乎滲透到編程的各個方面,具備良好的演算法基礎對成為一名優秀的程式設計師有著非常大的好處,很多做了多年的程式設計師對於演算法還沒有一個很好的概念,覺得自己演算法基礎很一般還不是照樣做的很不錯,編程是一個種類極多,技巧非常多的,解決同樣一個問題不同的人會給出不同的解決方案,而且效果差別也會非常大。隨著人工智慧的拓展演算法又重新被很多企業重視起來,現在很多還沒畢業的碩士只要是演算法相關專業的很多企業都能給出非常高的薪水,證明市場對於演算法的需求在提升。

對於很多初級的程式設計師來講不會覺得演算法有多重要,但在面試的時候或多或少的涉及到演算法題目,越是一些大公司越是重視演算法類的考查,演算法屬於程式設計師編程技能的靈魂,同樣的解決一個問題,不同水平的人給出的結論是不一樣的,對於初級的程式設計師如何下手學習演算法,開始編程意識比較模糊階段如何確定自己的演算法學習方向,先不講複雜的演算法,每個初學者都會接觸到數據結構這本書,數據結構裡面已經開始涉及到數據模型的概念,開始階段講到最基礎的數據類型,像常見的隊列,鏈表,棧,二叉樹等等概念。

作為初學者最初的接觸的是程式語言,還沒有數據結構的概念,只是接觸到程式語言的基礎語法怎麼實現一個簡單的功能,程式語言相當於是打造地基的零件,數據結構就是把這些按照某種方式組合起來,演算法就是具體在組合過程中指導思想,所以普通程式設計師必須在掌握了一門程式語言的基礎上進行數據結構的學習,學習編程要的循序漸進,不要貪圖求快忘了學習的本質。

說到數據結構可能大家都有所留意,有C語言版本,有C++版本,也有java版本,不同的程式語言配套的數據結構有所差異,但本質指導思想是相似的,學習了一門程式語言弄明白了數據結構再去考慮學習演算法,數據結構屬於演算法的基礎,很多人直接在網上買本演算法導論研究起來了,但關鍵是裡面語法細節並不能徹底的掌握,所以欲速則不達需要具備一定的基礎上再去考慮如何學習演算法。

學習演算法需要做哪些準備?

很多人覺得演算法學習起來應該比較簡單,直接在網上買本書就可以開搞了,演算法是編程是指導思想,具體操作哪種程式語言來實現是第一步,如果都不懂的程式語言直接上來學習演算法,只是單純的理論學習意義不是很大,學好演算法的關鍵是實踐落地化。

如果在懂得一門程式語言的基礎上,數據結構也能學的不錯了,就可以切入到演算法的學習了,很多人覺得演算法就是單純的裡面的一些技巧,演算法離不開程式語言而單獨存在,單純的理論學習很難說成是真正的掌握演算法。

支撐演算法的還有一個非常重要的基礎,數學基礎,很多人問數學不好對於編程有多少影響,要說直接的影響就是演算法,通常意義上編程不是每個地方都能用到演算法,但在稍微講求效率的地方不可能把演算法孤立,從一個標準程式設計師的角度考慮,演算法是必須要掌握的基礎。

如何學習演算法

任何知識點的學習都沒有固定的方法,在這只是以多年寫程式設計師的經驗總結這麼幾條分享給大家

1.掌握一門程式語言。不要嘗試著上來就學習演算法,至於選擇哪種程式語言要根據自己的興趣愛好以及市場需求,脫離程式語言直接學習演算法,屬於空中樓閣,程式語言的學習先從基礎語法開始,有多少自學編程的人在第一步就倒下了,編程行業屬於長期積累的過程,有多少人還沒等到開花結果就選擇了放棄,很多人頭腦一熱直接買了幾本書,開始看的還比較簡單覺得很有意思,後來難了就直接擱淺了,下次再次發現這本書的時候已經是幾個月甚至半年之後的事情了,學習編程沒點耐心,建議就不要重複浪費時間了。

2.學好對應語言的數據結構。其實從學習數據結構開始就已經對程式語言開始使用了,很多人直接接觸到數據結構就覺得裡面的東西太抽象了,這個階段需要突破的一個心坎,如果選擇的程式語言是C/C++會覺得裡面的數據結構裡面的串聯起來非常費勁,建議回去把指針徹底搞明白再去切入數據結構的學習,數據結構的一般開始階段都比較費力,最後越玩越有感覺的,數據結構的二叉樹,樹,等概念已經開始慢慢觸及到基本演算法了,在程式語言中對這塊很多封裝成成品庫,簡單的排序演算法,刪除演算法等等都是在基本數據結構的基礎上進行擴展出來的,C++裡面泛型編程已經開始大量使用基本的演算法了。

3.演算法學習。演算法學習第一個階段是要掌握基本的理論,在掌握基本的理論之後再去實踐,演算法概念都不理解去實踐沒有任何意義,照著自己理解的場景利用程式碼去實現,這個過程一般比較痛苦,如果數學基礎好點可能會理解的快一些,這個階段主要思考的比較多,思考認知上升之後就可以展開真正的演算法實踐。

要學好演算法以上三步缺一不可,成為一名優秀的程式設計師,演算法基礎是必不可少的,演算法學習的過程中可能會比較枯燥,但要想真正實現收穫,過程必然艱辛在這個過程中還能培養編程興趣,不是每個人生來就對某項事物感興趣,接觸多了自然就容易產生興趣,編程從來就是循序漸進的過程,不可能一蹴而就,如果沒有足夠的耐心不建議進入這個行業的學習中,希望能幫到你。