我是一個半路出家的「程序員」,在我剛開始從事編碼工做的頭幾年,我沒有接觸過「算法和數據結構」,以爲它們是隻會在我找工做的時候用獲得的知識。儘管有不少人跟我說過「算法和數據結構」無比重要,但萬事「開頭難」、「開頭難」、「開頭難」……程序員
終於有一天,我終於開始了,今後入坑。算法
因而乎,我想寫一個系列文章,記錄一下我學習過的「算法與數據結構」的過程,若是有幸可以給一些朋友幫助,那我會感到很榮幸。網絡
若是你想在「程序員」的道路上走得更遠的話,「算法與數據結構」是必學的,越早學習越好。數據結構
我是誰?我是一個本科數學專業,其實數學一點都很差的程序員,若是你有更好的學習建議,歡迎指點、交流。機器學習
先從「參考資料」提及吧,「算法和數據結構」是一門很是抽象的學科,就像非數學專業的學生學習數學同樣,若是沒有很形象、生動的學習資料,入門就會是一件很是痛苦的事情。所以,找好「參考資料」是關鍵。學習
個人算法入門課程:慕課網 liuyubobobo 老師的《玩轉算法》課程,這門課程我是在 2017 年 5 月的時候學習的,能夠說經過這門課程的學習打開了我進入「算法與數據結構」學習的大門。 liuyubobobo 老師的講解十分細緻,配合了製做精美的動畫,大大下降了抽象的算法的理解程度,若是你對「算法和數據結構」一無所知,強烈建議你看看這個老師的視頻教程,不懂的地方多看幾遍,看完要作筆記,要練習。 liuyubobobo 老師是用 C++ 語言講解的這個課程,我當時只會 Java ,不過一點都不影響理解,正如 liuyubobobo 老師的介紹「算法與數據結構應該是與語言無關的」。動畫
我這個系列的文章,在開始的部分,基本會按照 liuyubobobo 老師課程的思路來,不少就是我學習這門課程的時候的筆記,只不過是我來來回回已經修改了好幾遍了。如今發出來的版本,我使用了 Python 語言實現。人工智能、機器學習、深度學習、數據科學大行其道的今天,Python 又是如此簡單、易用,咱們沒有理由不用 Python。網站
我能夠,相信聰明的你也必定能夠。編碼
(說明:我在個人系列文章中出現的學習資料,不管是網絡視頻、書籍仍是介紹算法的網站、刷題網站,都只是我本身的學習路徑的真實介紹,沒有廣告的意思,我只是一個不知名的程序員,沒有人會讓我推薦的,事實上,聰明的你均可以無須付費得到它們、使用它們。)人工智能
個人算法入門書籍:《算法4》。
這裏的 4 是第 4 版的意思,是一本很是經典的外文讀物,已經有中文譯本了。這本書和《算法導論》同樣厚,但比《算法導論》要生動不少,同時也是國外名校使用的一門很是經典的教材。
這本書的特色:一、顏值特別高:紅色的封面,裏面的紙像打印值同樣白,閱讀的時候很舒服;二、結構很清晰,每個算法都有代碼實現,主要仍是 Java,我當時只會 Java 語言,看這本書其實沒有什麼阻力;三、這本書還有配套的網站,你能夠去這個網站上下載書中的代碼。
其實我以前介紹的 liuyubobobo 老師課程也大量參考和使用 《算法4》 這本書上的思路和例題。二者配合着看和學習,能夠說是很是完美了。
下面再說一說其它的書籍:
一、《算法導論》:我是學習了《算法4》(固然沒有看完)再去看《算法導論》的,不少地方其實都容易理解得多,《算法導論》有一點對初學者很不友好的地方,那就是全部的算法代碼都是僞代碼,但這絕不影響《算法導論》的地位,或許《算法導論》根本就不是給初學者看的。
二、《算法圖解》:這本書我是和《算法4》一塊兒買來的,一本很小的書,用 Python 語言實現,看着玩,圖中的插畫很生動。
三、《劍指 Offer》:
四、鄧俊輝老師《數據結構 C++ 語言版》
其實最先認識鄧老師是他的 mooc ,他製做的算法與數據結構 flash 動畫是十分生動的,它的教材和課件風格是一致的,他在教學中還賦予了算法比較優雅的哲學含義。在內容上,涉及到了一些高級數據結構,例如紅黑樹、B 樹等,若是理解高級數據結構有困難的話,能夠看看他的 mooc 或教材。
LeetCode:國內外公認的刷題網站,想熟練掌握經常使用的算法和數據結構,刷題是必經之路。這個網站如今已經有中文版了,對於看英文比較吃力的朋友,例如我來講,是一個好消息。不過中文版裏面的討論的內容沒有英文版多,因此,想要參考別人寫的代碼能夠到中文版上看題目的翻譯,到英文版裏看別人的代碼。
順便說說,我在刷題的過程當中,找到了一些視頻資源,可能大夥在刷題的時候也會搜索到它們的視頻資源或者我的博客,它們是「Cspiration」、「花花醬」、「小 Q」、「小 Fu」等。
LintCode
傳送門:LintCode。
這個網站能夠做爲 LeetCode 的補充,不過我看你們刷得比較多的仍是 LeetCode。
ACWING:這是我在 B 站上看到一個北大的研究生「大雪菜」作的直播,在上面能夠刷一些 LeetCode 上沒有的 《劍指 Offer》的題,「大雪菜」還會在直播裏給你講每道題的思路,這個網站上還有一些活動,激勵裏去刷題和分享,我以爲仍是很不錯的。
學習《算法與數據結構》是一項工程,並非一件特別輕鬆的事情,因此我以爲剛開始的時候,培養興趣是很關鍵的,要讓本身認識到學習《算法和數據結構》是十分有用的。而後貴在堅持!