數據結構與算法之美01-開篇詞

開篇詞 | 從今天起,跨過「數據結構與算法」這道坎

​ 做者是王爭,畢業於西安交通大學計算機專業。如今回想起來,本科畢業的時候,個人編程水平實際上是不好的。直到讀研究生的時候,一個師兄給了我一本《算法導論》,說你能夠看看,對你的編程會頗有幫助。git

​ 沒想到,今後我對算法的「迷戀」便一發不可收拾。以後,我如飢似渴地把圖書館裏幾乎全部數據結構和算法書籍都讀了一遍。程序員

​ 我經常邊讀邊練。沒多久,我就發現,寫代碼的時候,我會不禁自主考慮不少性能方面的問題。我寫出時間複雜度高、複雜度高的垃圾代碼愈來愈少了,算法能力提高了不少,編程能力也有了質的飛躍。得益於此,研究生畢業後,我直接進入 Google,從事 Google 翻譯相關的開發工做。github

​ 這是我本身學習數據結構與算法的經歷,如今,你能夠想一想你的狀況。面試

  • 是否是從學校開始,你就以爲數據結構難學,而後一直沒認真學?算法

  • 工做中,一遇到數據結構這個坑,你又發自本能地迅速避讓,由於你以爲本身不懂,因此也不想深究,反正看起來無關大局?編程

  • 當你想換工做面試,或者研究某個開源項目源碼,亦或者和團隊討論某個非框架層面的高可用難題的時候,你又發現,本身的基礎跟不上別人的節奏?網絡

​ 若是你是這種狀況,其實你並不孤獨,這不是你一我的遇到的問題。工做十年間,我見過許多程序員。他們有着各類各樣的背景,有不少既有潛力又很是努力,但始終沒法在本身現有水平上更進一步。數據結構

​ 在技術圈裏,咱們常常喜歡談論高大上的架構,好比高可用、微服務、服務治理等等。鮮有人關注代碼層面的編程能力,而願意沉下心來,花幾個月時間啃一啃計算機基礎知識、認認真真夯實基礎的人,簡直就是百裏挑一。架構

​ 我認識一位原來騰訊 T4 的技術大牛。在區塊鏈大潮以前,他在騰訊工做了 10 多年,長期負責手機 QQ 後臺總體建設。他經歷了手機 QQ 從誕生到億級用戶在線的整個過程。後來他去了微衆銀行,有一天老闆讓他去作區塊鏈。他用了不到半年時間,就把區塊鏈的整個技術脈絡摸清楚了。如今,他是微衆銀行的區塊鏈負責人,微衆科技創新產品部的老總。你說厲害不?你能夠花半年時間就能精通一個新的領域嗎?爲何他就能夠作到?框架

​ 我以爲這其中最重要的就是基礎足夠紮實。他曾經跟我說,像區塊鏈、人工智能這些看似很新的技術,其實一點兒都不「新」。最初學編程的時候,他就把那些基礎的知識都學透了。當面臨行業變更、新技術更迭的時候,他不斷髮現,那些所謂的新技術,核心和本質的東西其實就是當初學的那些知識。掌握了這個「規律」以後,他學任何東西都很快,任何新技術都能快速迎頭遇上。這就是他快速學習而且得到成功的祕訣。

​ 因此說,基礎知識就像是一座大樓的地基,它決定了咱們的技術高度。而要想快速作出點事情,前提條件必定是基礎能力過硬,「內功」要到位。

​ 那技術人究竟都須要修煉哪些「內功」呢?我以爲,無外乎就是大學裏的那些基礎課程,操做系統、計算機網絡、編譯原理等等,固然還有數據結構和算法

​ 但是,咱們都知道,像《算法導論》這些經典書籍,雖然很全面,可是過於理論,學起來很是枯燥;而市面不少課程大多缺失真實的開發場景,費勁學完感受好像仍是用不上,過不了幾天就忘了。

​ 因此,我嘗試作一個讓你能真正受用的數據結構與算法課程,但願給你指明一個簡潔、高效的學習路徑,教你一個學習基礎知識的通用方法 。那麼,關於專欄內容,我是怎樣設計的呢?

1) 我根據本身研讀數十本算法書籍和多年項目開發的經驗,在衆多的數據結構和算法中,精選了最實用的內容進行講解。

2) 我不僅會教你怎麼用,還會告訴你,咱們爲何須要這種數據結構和算法,一點點幫你捋清它們背後的設計思想,培養你觸類旁通的能力。

3)對於每種數據結構和算法,我都會結合真實的軟件開發案例來說解,讓你知道,數據結構和算法,究竟應該如何應用到實際的編碼中。

爲了由淺入深地帶你學習,我把專欄分紅四個遞進的模塊。

入門篇
時間、空間複雜度分析是數據結構和算法中很是重要的知識點,貫穿整個專欄的學習過程。但同時也是比較難掌握的,因此我用了 2 節課來說這部份內容,並且還舉了大量的實例,讓你一邊學一邊練,真正能掌握複雜度分析,爲後面的學習鋪路。

我但願經過這一模塊,你能掌握時間、空間複雜度的概念,大 O 表示法的由來,各類複雜度分析技巧,以及最好、最壞、平均、均攤複雜度分析方法。以後,面對任何代碼的複雜度分析,你都能遊刃有餘、絕不畏懼!

基礎篇
這部分是專欄中篇幅最大的內容,也是咱們學習的重點,共有 26 節內容,涵蓋了最基礎、最經常使用的數據結構和算法。針對每種數據結構和算法,我都會結合具體的軟件開發實例,由淺入深進行講解,並適時總結一些實用「寶典」,保證你印象深入、學有所用。

好比遞歸這一節,我會講到,爲何遞歸代碼比較難寫?如何避免堆棧溢出?如何避免遞歸冗餘計算?如何將遞歸代碼轉化爲非遞歸代碼?

高級篇
這部分我會講一些不是那麼經常使用的數據結構和算法。雖然不經常使用,可是這些內容你也須要知道。設置這一部分的目的,是爲了讓你開拓視野,強化訓練算法思惟、邏輯思惟。若是說學完基礎部分能夠考 80 分,那掌握這一部分就能讓你成爲尖子生!

實戰篇
咱們整個專欄都是圍繞數據結構和算法在具體軟件實踐中的應用來說的,因此最後我會經過實戰部分串講一下前面講到的數據結構和算法。我會拿一些開源項目、框架或者系統設計問題,剖析它們背後的數據結構和算法,讓你有一個更加直觀的感覺。

人生路上,咱們會遇到不少的坎。跨過去,你就能夠成長,跨不過去就是困難和停滯。而在後面很長的一段時間裏,你都須要爲這個困難買單。對於咱們技術人來講,更是這樣。既然數據結構和算法這個坎,咱們總歸是要跨過去,爲何不是如今呢?

我很感激師兄當年給個人那本《算法導論》,這是我人生中爲數很少的轉折點之一。沒有那本書,也可能就沒有今天的我。我但願這個專欄也能成爲你的一我的生轉折點。

我但願,經過這個專欄,不只能幫你跨過數據結構與算法這個坎,還能幫你掌握一種學習知識和技能的方法,幫你度過職場甚至人生的重要時刻!一塊兒加油吧!

相關文章
相關標籤/搜索