【算法日積月累】0-寫在前面的話

我是一個半路出家的「程序員」,在我剛開始從事編碼工做的頭幾年,我沒有接觸過「算法和數據結構」,以爲它們是隻會在我找工做的時候用獲得的知識。儘管有不少人跟我說過「算法和數據結構」無比重要,我也很相信「算法和數據結構」很重要,但萬事「開頭難」、「開頭難」、「開頭難」……程序員

爲何「難」?由於不知道應該如何入門,手邊沒有很好參考資料,身邊也沒有從事算法工做的同事,連個會算法的科班出身的同事都沒有。面試

終於有一天,我終於開始了,今後入坑。算法

因而乎,我想寫一個系列文章,記錄一下我學習過的「算法與數據結構」的過程,若是有幸可以給一些朋友幫助,我會感到很榮幸。網絡

若是你想在「程序員」的道路上走得更遠的話,「算法與數據結構」是必學的,越早學習越好。數據結構

我是誰?我是一個本科數學專業,其實數學一點都很差的程序員,若是你有更好的學習建議,歡迎指點、交流。機器學習

參考資料

先從「參考資料」提及吧,「算法和數據結構」是一門很是抽象的學科,就像非數學專業的學生學習數學同樣,若是沒有很形象、生動的學習資料,入門就會是一件很是痛苦的事情。所以,找好「參考資料」很重要。學習

入門視頻教程

個人算法入門課程是慕課網 liuyubobobo 老師的《玩轉算法》課程。這門課程我是在 2017 年 5 月的時候學習的,能夠說經過這門課程的學習打開了我進入「算法與數據結構」學習的大門。 liuyubobobo 老師的講解十分細緻,配合了製做精美的動畫,大大下降了抽象的算法的理解程度,若是你對「算法和數據結構」一無所知,強烈建議你看看這個老師的視頻教程,不懂的地方多看幾遍,看完要作筆記,要練習。 liuyubobobo 老師是用 C++ 語言講解的這個課程,我當時只會 Java ,不過一點都不影響理解,正如 liuyubobobo 老師的介紹「算法與數據結構應該是與語言無關的」。動畫

我這個系列的文章,在開始的部分,基本會按照 liuyubobobo 老師課程的思路來,其實不少就是我學習這門課程的時候的筆記,只不過是我已經來來回回修改了好幾遍了。如今發出來的版本,我從新使用了 Python 語言實現。在人工智能、機器學習、深度學習、數據科學大行其道的今天,Python 又是如此簡單、易用,咱們沒有理由不用 Python。網站

我能夠,相信聰明的你也必定能夠。編碼

這是我作的筆記。

image-20190116123113568

這裏要說明一點:在個人系列文章中出現的學習資料,不管是網絡視頻、書籍仍是介紹算法的網站、刷題網站,都只是我本身的學習路徑的真實介紹,沒有任何廣告的意思,我只是以爲它們好,而且我真的從這些資料上學到了東西,因此我才寫在這裏。事實上,聰明的你無須付費就能夠得到它們,並使用它們。

入門書籍

個人算法入門書籍:《算法4》

image-20190112215955003

這裏的 4 是第 4 版的意思,這是一本很是經典的外文讀物,已經有中文譯本了。這本書和《算法導論》同樣厚,但比《算法導論》要生動不少,同時也是國外名校使用的一門很是經典的教材。

這本書的特色:
一、顏值特別高:紅色的封面,裏面的紙像打印值同樣白,閱讀的時候很舒服;
二、結構很清晰,每個算法都有代碼實現,主要仍是 Java,我當時只會 Java 語言,看這本書其實沒有什麼阻力;
三、這本書還有配套的網站,你能夠去這個網站上下載書中的代碼。

其實我以前介紹的 liuyubobobo 老師課程也大量參考和使用 《算法4》 這本書上的思路和例題。二者配合着學習,而且要練習,能夠說是很是完美了。

下面再說一說其它的書籍:

《算法導論》

我是學習了《算法4》(固然沒有看完)再去看《算法導論》的,不少地方其實都容易理解得多,《算法導論》有一點對初學者很不友好的地方,那就是全部的算法代碼都是僞代碼,但這絕不影響《算法導論》的地位,或許《算法導論》根本就不是給初學者看的。

image-20190112220203368

《算法圖解》

這本書我是和《算法4》一塊兒買的,一本很小的書,用 Python 語言實現,看着玩,圖中的插畫很生動。看這本書主要是讓我以爲算法能夠以比較輕鬆的方式入門。

image-20190112220129403

《劍指 Offer》:

image-20190112220240178

這本書主要用於準備算法面試,在網絡上備受好評。裏面有不少問題是和 LeetCode 重合的,做者會以面試官的角度給出對這些問題考察的內容。

鄧俊輝老師《數據結構 C++ 語言版》

image-20190113174114949

其實最先認識鄧老師是他的 mooc ,他製做的算法與數據結構 flash 動畫是十分生動的,它的教材和課件風格是一致的,他在教學中還賦予了算法比較優雅的哲學含義。在內容上,涉及到了一些高級數據結構,例如紅黑樹、B 樹等,若是理解高級數據結構有困難的話,能夠看看他的 mooc 或教材。

刷題網站

LeetCode

傳送門:LeetCode

想熟練掌握經常使用的算法和數據結構,刷題是必經之路。
LeetCode 是國內外公認的刷題網站,這個網站上羅列的問題是一些知名公司的面試問題。
這個網站如今已經有中文版了,對於看英文比較吃力的朋友,例如我來講,是一個好消息。不過中文版裏面的討論的內容沒有英文版多,因此,想要參考別人寫的代碼能夠到中文版上看題目的翻譯,到英文版裏看別人的代碼。

順便說說,我在刷題的過程當中,我找到了一些視頻資源,這些視頻資源也能夠幫助你理解一些問題,可能大夥在刷題的時候也會搜索到它們的視頻資源或者我的博客,它們是「Cspiration」、「花花醬」、「小 Q」、「小 Fu」等。

LintCode

傳送門:LintCode

這個網站能夠做爲 LeetCode 的補充,不過我看你們刷得比較多的仍是 LeetCode。

ACWING

傳送門:AcWing

這是我在 B 站上看到一個北大研究生「大雪菜」作的直播時看到的網站,AcWing = Accepted + Wing,簡稱AC 之翼。在上面能夠刷一些 LeetCode 上沒有的 《劍指 Offer》的題,「大雪菜」還會在直播裏給你講每道題的思路,這個網站上還有一些活動,激勵裏去刷題和分享,我以爲仍是很不錯的。

總結

一、培養興趣

學習《算法與數據結構》是一項工程,並非一件特別輕鬆的事情,因此我以爲剛開始的時候,培養興趣是很關鍵的,要讓本身認識到學習《算法和數據結構》是十分有用的。

二、樂於分享

不止一我的告訴我應該把本身的解題思路寫成文字分享出去了。寫成文字能夠幫助本身思考,也方便之後查看,也能幫助到別人。事實上,互聯網上這樣的人有不少,應該成爲他們中的一員。

三、堅持

貴在堅持,不要輕易說放棄。

相關文章
相關標籤/搜索