我是一個半路出家的“程序員”膨处,在我剛開始從事編碼工作的頭幾年,我沒有接觸過“算法和數(shù)據(jù)結構”桐早,覺得它們是只會在我找工作的時候用得到的知識躯泰。盡管有很多人跟我說過“算法和數(shù)據(jù)結構”無比重要,我也很相信“算法和數(shù)據(jù)結構”很重要安聘,但萬事“開頭難”痰洒、“開頭難”、“開頭難”……
為什么“難”浴韭?因為不知道應該如何入門丘喻,手邊沒有很好參考資料钦讳,身邊也沒有從事算法工作的同事霸褒,連個會算法的科班出身的同事都沒有。
終于有一天超棺,我終于開始了舍肠,從此入坑搀继。
于是乎,我想寫一個系列文章翠语,記錄一下我學習過的“算法與數(shù)據(jù)結構”的過程叽躯,如果有幸能夠給一些朋友幫助,我會感到很榮幸肌括。
如果你想在“程序員”的道路上走得更遠的話点骑,“算法與數(shù)據(jù)結構”是必學的,越早學習越好谍夭。
我是誰黑滴?我是一個本科數(shù)學專業(yè),其實數(shù)學一點都不好的程序員紧索,如果你有更好的學習建議袁辈,歡迎指點、交流珠漂。
參考資料
先從“參考資料”說起吧晚缩,“算法和數(shù)據(jù)結構”是一門非常抽象的學科,就像非數(shù)學專業(yè)的學生學習數(shù)學一樣媳危,如果沒有很形象荞彼、生動的學習資料,入門就會是一件非常痛苦的事情待笑。因此鸣皂,找好“參考資料”很重要。
入門視頻教程
我的算法入門課程是慕課網 liuyubobobo 老師的《玩轉算法》課程。這門課程我是在 2017 年 5 月的時候學習的签夭,可以說通過這門課程的學習打開了我進入“算法與數(shù)據(jù)結構”學習的大門齐邦。 liuyubobobo 老師的講解十分細致,配合了制作精美的動畫第租,大大降低了抽象的算法的理解程度措拇,如果你對“算法和數(shù)據(jù)結構”一無所知,強烈建議你看看這個老師的視頻教程慎宾,不懂的地方多看幾遍丐吓,看完要做筆記,要練習趟据。 liuyubobobo 老師是用 C++ 語言講解的這個課程券犁,我當時只會 Java ,不過一點都不影響理解汹碱,正如 liuyubobobo 老師的介紹“算法與數(shù)據(jù)結構應該是與語言無關的”粘衬。
我這個系列的文章,在開始的部分咳促,基本會按照 liuyubobobo 老師課程的思路來稚新,其實很多就是我學習這門課程的時候的筆記,只不過是我已經來來回回修改了好幾遍了」蚋梗現(xiàn)在發(fā)出來的版本褂删,我重新使用了 Python 語言實現(xiàn)。在人工智能冲茸、機器學習屯阀、深度學習、數(shù)據(jù)科學大行其道的今天轴术,Python 又是如此簡單难衰、易用,我們沒有理由不用 Python逗栽。
我可以召衔,相信聰明的你也一定可以。
這是我做的筆記祭陷。
這里要說明一點:在我的系列文章中出現(xiàn)的學習資料,不論是網絡視頻趣席、書籍還是介紹算法的網站兵志、刷題網站,都只是我自己的學習路徑的真實介紹宣肚,沒有任何廣告的意思想罕,我只是覺得它們好,并且我真的從這些資料上學到了東西,所以我才寫在這里按价。事實上惭适,聰明的你無須付費就可以獲得它們,并使用它們楼镐。
入門書籍
我的算法入門書籍:《算法4》
這里的 4 是第 4 版的意思癞志,這是一本非常經典的外文讀物,已經有中文譯本了框产。這本書和《算法導論》一樣厚凄杯,但比《算法導論》要生動很多,同時也是國外名校使用的一門非常經典的教材秉宿。
這本書的特點:
1戒突、顏值特別高:紅色的封面,里面的紙像打印值一樣白描睦,閱讀的時候很舒服膊存;
2、結構很清晰忱叭,每一個算法都有代碼實現(xiàn)隔崎,主要還是 Java,我當時只會 Java 語言窑多,看這本書其實沒有什么阻力仍稀;
3、這本書還有配套的網站埂息,你可以去這個網站上下載書中的代碼技潘。
其實我之前介紹的 liuyubobobo 老師課程也大量參考和使用 《算法4》 這本書上的思路和例題。兩者配合著學習千康,并且要練習享幽,可以說是非常完美了。
下面再說一說其它的書籍:
《算法導論》
我是學習了《算法4》(當然沒有看完)再去看《算法導論》的拾弃,很多地方其實都容易理解得多值桩,《算法導論》有一點對初學者很不友好的地方,那就是所有的算法代碼都是偽代碼豪椿,但這毫不影響《算法導論》的地位奔坟,或許《算法導論》根本就不是給初學者看的。
《算法圖解》
這本書我是和《算法4》一起買的搭盾,一本很小的書咳秉,用 Python 語言實現(xiàn),看著玩鸯隅,圖中的插畫很生動澜建。看這本書主要是讓我覺得算法可以以比較輕松的方式入門。
《劍指 Offer》
這本書主要用于準備算法面試炕舵,在網絡上備受好評何之。里面有很多問題是和 LeetCode 重合的,作者會以面試官的角度給出對這些問題考察的內容咽筋。
鄧俊輝老師《數(shù)據(jù)結構 C++ 語言版》
其實最早認識鄧老師是他的 mooc 溶推,他制作的算法與數(shù)據(jù)結構 flash 動畫是十分生動的,它的教材和課件風格是一致的晤硕,他在教學中還賦予了算法比較優(yōu)雅的哲學含義悼潭。在內容上,涉及到了一些高級數(shù)據(jù)結構舞箍,例如紅黑樹舰褪、B 樹等,如果理解高級數(shù)據(jù)結構有困難的話疏橄,可以看看他的 mooc 或教材占拍。
刷題網站
LeetCode
傳送門:LeetCode。
想熟練掌握常用的算法和數(shù)據(jù)結構捎迫,刷題是必經之路晃酒。
LeetCode 是國內外公認的刷題網站,這個網站上羅列的問題是一些知名公司的面試問題窄绒。
這個網站現(xiàn)在已經有中文版了贝次,對于看英文比較吃力的朋友,例如我來說彰导,是一個好消息蛔翅。不過中文版里面的討論的內容沒有英文版多,所以位谋,想要參考別人寫的代碼可以到中文版上看題目的翻譯山析,到英文版里看別人的代碼。
順便說說掏父,我在刷題的過程中笋轨,我找到了一些視頻資源,這些視頻資源也可以幫助你理解一些問題赊淑,可能大伙在刷題的時候也會搜索到它們的視頻資源或者個人博客爵政,它們是“Cspiration”、“花花醬”陶缺、“小 Q”钾挟、“小 Fu”等。
LintCode
傳送門:LintCode组哩。
這個網站可以作為 LeetCode 的補充,不過我看大家刷得比較多的還是 LeetCode。
ACWING
傳送門:AcWing伶贰。
這是我在 B 站上看到一個北大研究生“大雪菜”做的直播時看到的網站蛛砰,AcWing = Accepted + Wing,簡稱AC 之翼黍衙。在上面可以刷一些 LeetCode 上沒有的 《劍指 Offer》的題泥畅,“大雪菜”還會在直播里給你講每道題的思路,這個網站上還有一些活動琅翻,激勵里去刷題和分享位仁,我覺得還是很不錯的。
總結
1方椎、培養(yǎng)興趣
學習《算法與數(shù)據(jù)結構》是一項工程聂抢,并不是一件特別輕松的事情,所以我覺得剛開始的時候棠众,培養(yǎng)興趣是很關鍵的琳疏,要讓自己認識到學習《算法和數(shù)據(jù)結構》是十分有用的。
2闸拿、樂于分享
不止一個人告訴我應該把自己的解題思路寫成文字分享出去了空盼。寫成文字可以幫助自己思考,也方便以后查看新荤,也能幫助到別人揽趾。事實上,互聯(lián)網上這樣的人有很多苛骨,應該成為他們中的一員篱瞎。
3、堅持
貴在堅持智袭,不要輕易說放棄奔缠。
(本節(jié)完)