這幾年來,小灰一直在用漫畫的形式分享演算法知識,每一次所分享的,都是一個具體的演算法知識點,
今天,讓我從宏觀的角度來講一講,演算法到底是什么?如何來學好演算法,
1. 演算法是什么
所謂演算法,指的是解決實際問題的一系列方法,
很多人以為,演算法是一個新詞匯,只和計算機有關系,
其實,演算法的歷史非常悠久,跟人類的生產生活有著密切的關系,
比如,在公元前500多年,古希臘數學家泰勒斯,利用一根木棍測量出了埃及胡夫金字塔的高度,

南北朝時期,中國數學家祖沖之利用割圓術近似求解圓周率,

他們所使用的方法,都可以稱為演算法,
不太了解這兩個故事的小伙伴,可以去溫習一下中小學課本,

說完了古代的事情,我們再來說一說計算機當中的演算法,
計算機當中的演算法,本質就是一系列程式指令,用以解決特定的運算和邏輯問題,
2. 基礎演算法和專業領域演算法
按照專業程度來劃分,演算法可以分為基礎演算法和專業領域演算法,
所謂專業領域演算法,也就是服務于特定領域的演算法,
比如在2016年,谷歌的AlphaGO戰勝人類圍棋冠軍,背后是人工智能演算法,

我們刷抖音、快手的時候,刷到各種你感興趣的短視頻,背后是推薦演算法,

在一些游戲當中,我們能看到的非常酷炫的3D效果,背后是3D圖形渲染演算法,

上面說的這些都屬于專業領域演算法,由相應的演算法工程師來研究和開發,
如果大家對某個特定領域的演算法有興趣,可以專門去學習,但正所謂術業有專攻,這樣的演算法并不需要每一個程式員都去掌握,
而所謂的基礎演算法,則是所有的程式員都應該掌握的關鍵知識,大學里計算機專業所學習的資料結構與演算法這門課,講授的就是基礎演算法,
3. 基礎演算法解決的問題
基礎演算法,可以解決哪些問題呢?
首先,是解決運算問題,
有人說了,運算不就是算算數嗎?這還不簡單?
其實還真不簡單,例如求出兩個數的最大公約數,要做到效率的極致,確實需要好好想一想,
再比如計算兩個大整數的和

其次,還可以解決查找問題,
在一組有序的整數數列當中,我們想要最快的查找到某個整數是否存在或者在一篇文章當中,想要快速檢索到某個關鍵詞

同時,演算法也可以解決排序問題,
在很多情況下,我們需要把一些無序的元素按照順序進行排列,
比如瀏覽電商網站的時候,我們希望按照商品價格從低到高來排序,瀏覽學生成績單的時候,我們希望按照學生成績從高到低排序,

這就要用到各種各樣的排序演算法,
最后,演算法也可以幫助尋找最優決策,
當我們面對復雜的問題時候,需要一步一步做出選擇,從而達到一個整體最優的結果,

這時候,某些演算法可以幫助我們做出正確的決策,比如貪心演算法、比如動態規劃演算法
4. 學習演算法有什么用
可能有人說了,我只要安心寫好專案代碼不就完了嗎?我干嘛非要學習這些個演算法呢?
如果你能夠滿足于在一家小公司,踏踏實實地做一個增刪改查程式員,每個月拿個一兩萬工資的話,那沒問題,
但如果你想要進入大廠,想要成為一個真正優秀程式員,你還是需要學好演算法的,
為什么呢?
首先,懂演算法的程式員能寫出更高效的代碼,
雖然我們在實際作業當中,大多數時候不需要去直接實作某個演算法,但是我們需要知道自己正在使用的類別庫、介面的底層演算法是什么樣的,采用的資料結構是什么樣的,從而在合適的場景下使用合適的工具,
其次,大廠面試程序中,往往會考察演算法,衡量一個程式員是否優秀,不是看他有沒有碩士博士學歷,也不是看他熟悉多少種框架,而是看他的“內功”是否精神,而我們程式員的內功,就是演算法和資料結構的運用能力,

5. 如何更好地學習演算法
那么,我們怎么來提升自己的演算法能力呢?
我認為,要提升演算法能力,我們需要從基礎和實戰兩個方向分別提升,
怎么學習演算法基礎知識呢?
我們可以通過看書,看網上的視頻課程,來了解常用的各種演算法和資料結構原理,
入門級別的書,比較推薦程杰老師的《大話資料結構》,以及我自己出版的《漫畫演算法》系列,進階級別的書,推薦看看《演算法4》、《演算法導論》,
課程的話,推薦極客時間王爭老師的《資料結構與演算法之美》,講的非常全面,
怎么提升實戰能力呢?
首先,在一些相關圖書當中,會講解常見的演算法面試題,這里推薦《劍指offer》這本書,里面包含不少面試常考的題目,
其次,大家可以上LeetCode這個網站,有大量的演算法題目可以去刷,LeetCode網站的題目按照難度分成了三個級別,easy、Middle和Hard,大家可以從Easy題目開始嘗試,后面再逐漸刷更難的題目,

再有一個提升方法,就是找時間多去其他公司面試,在面試中,非常能夠鍛煉一個人的臨場發揮能力,不過,如果大家是在職狀態的話,一定不要請假過于頻繁,不然你連現在的作業都保不住了,

好了,關于演算法的基本概念,以及提升演算法的途徑,小灰就給大家介紹到這里,如果覺得這篇文章對你有幫助,記得點個贊點個在看哦~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/345804.html
標籤:其他
