摘要:現在發出來的版本,我重新使用了語言實現。其實我之前介紹的老師課程也大量參考和使用算法這本書上的思路和例題。看這本書主要是讓我覺得算法可以以比較輕松的方式入門。劍指這本書主要用于準備算法面試,在網絡上備受好評。
我是一個半路出家的“程序員”,在我剛開始從事編碼工作的頭幾年,我沒有接觸過“算法和數據結構”,覺得它們是只會在我找工作的時候用得到的知識。盡管有很多人跟我說過“算法和數據結構”無比重要,我也很相信“算法和數據結構”很重要,但萬事“開頭難”、“開頭難”、“開頭難”……
為什么“難”?因為不知道應該如何入門,手邊沒有很好參考資料,身邊也沒有從事算法工作的同事,連個會算法的科班出身的同事都沒有。
終于有一天,我終于開始了,從此入坑。
于是乎,我想寫一個系列文章,記錄一下我學習過的“算法與數據結構”的過程,如果有幸能夠給一些朋友幫助,我會感到很榮幸。
如果你想在“程序員”的道路上走得更遠的話,“算法與數據結構”是必學的,越早學習越好。
我是誰?我是一個本科數學專業,其實數學一點都不好的程序員,如果你有更好的學習建議,歡迎指點、交流。
參考資料先從“參考資料”說起吧,“算法和數據結構”是一門非常抽象的學科,就像非數學專業的學生學習數學一樣,如果沒有很形象、生動的學習資料,入門就會是一件非常痛苦的事情。因此,找好“參考資料”很重要。
入門視頻教程我的算法入門課程是慕課網 liuyubobobo 老師的《玩轉算法》課程。這門課程我是在 2017 年 5 月的時候學習的,可以說通過這門課程的學習打開了我進入“算法與數據結構”學習的大門。 liuyubobobo 老師的講解十分細致,配合了制作精美的動畫,大大降低了抽象的算法的理解程度,如果你對“算法和數據結構”一無所知,強烈建議你看看這個老師的視頻教程,不懂的地方多看幾遍,看完要做筆記,要練習。 liuyubobobo 老師是用 C++ 語言講解的這個課程,我當時只會 Java ,不過一點都不影響理解,正如 liuyubobobo 老師的介紹“算法與數據結構應該是與語言無關的”。
我這個系列的文章,在開始的部分,基本會按照 liuyubobobo 老師課程的思路來,其實很多就是我學習這門課程的時候的筆記,只不過是我已經來來回回修改了好幾遍了。現在發出來的版本,我重新使用了 Python 語言實現。在人工智能、機器學習、深度學習、數據科學大行其道的今天,Python 又是如此簡單、易用,我們沒有理由不用 Python。
我可以,相信聰明的你也一定可以。
這是我做的筆記。
這里要說明一點:在我的系列文章中出現的學習資料,不論是網絡視頻、書籍還是介紹算法的網站、刷題網站,都只是我自己的學習路徑的真實介紹,沒有任何廣告的意思,我只是覺得它們好,并且我真的從這些資料上學到了東西,所以我才寫在這里。事實上,聰明的你無須付費就可以獲得它們,并使用它們。
入門書籍 我的算法入門書籍:《算法4》這里的 4 是第 4 版的意思,這是一本非常經典的外文讀物,已經有中文譯本了。這本書和《算法導論》一樣厚,但比《算法導論》要生動很多,同時也是國外名校使用的一門非常經典的教材。
這本書的特點:
1、顏值特別高:紅色的封面,里面的紙像打印值一樣白,閱讀的時候很舒服;
2、結構很清晰,每一個算法都有代碼實現,主要還是 Java,我當時只會 Java 語言,看這本書其實沒有什么阻力;
3、這本書還有配套的網站,你可以去這個網站上下載書中的代碼。
其實我之前介紹的 liuyubobobo 老師課程也大量參考和使用 《算法4》 這本書上的思路和例題。兩者配合著學習,并且要練習,可以說是非常完美了。
下面再說一說其它的書籍:
《算法導論》我是學習了《算法4》(當然沒有看完)再去看《算法導論》的,很多地方其實都容易理解得多,《算法導論》有一點對初學者很不友好的地方,那就是所有的算法代碼都是偽代碼,但這毫不影響《算法導論》的地位,或許《算法導論》根本就不是給初學者看的。
《算法圖解》這本書我是和《算法4》一起買的,一本很小的書,用 Python 語言實現,看著玩,圖中的插畫很生動。看這本書主要是讓我覺得算法可以以比較輕松的方式入門。
《劍指 Offer》:這本書主要用于準備算法面試,在網絡上備受好評。里面有很多問題是和 LeetCode 重合的,作者會以面試官的角度給出對這些問題考察的內容。
鄧俊輝老師《數據結構 C++ 語言版》其實最早認識鄧老師是他的 mooc ,他制作的算法與數據結構 flash 動畫是十分生動的,它的教材和課件風格是一致的,他在教學中還賦予了算法比較優雅的哲學含義。在內容上,涉及到了一些高級數據結構,例如紅黑樹、B 樹等,如果理解高級數據結構有困難的話,可以看看他的 mooc 或教材。
刷題網站 LeetCode傳送門:LeetCode。
想熟練掌握常用的算法和數據結構,刷題是必經之路。
LeetCode 是國內外公認的刷題網站,這個網站上羅列的問題是一些知名公司的面試問題。
這個網站現在已經有中文版了,對于看英文比較吃力的朋友,例如我來說,是一個好消息。不過中文版里面的討論的內容沒有英文版多,所以,想要參考別人寫的代碼可以到中文版上看題目的翻譯,到英文版里看別人的代碼。
順便說說,我在刷題的過程中,我找到了一些視頻資源,這些視頻資源也可以幫助你理解一些問題,可能大伙在刷題的時候也會搜索到它們的視頻資源或者個人博客,它們是“Cspiration”、“花花醬”、“小 Q”、“小 Fu”等。
LintCode傳送門:LintCode。
這個網站可以作為 LeetCode 的補充,不過我看大家刷得比較多的還是 LeetCode。
ACWING傳送門:AcWing。
這是我在 B 站上看到一個北大研究生“大雪菜”做的直播時看到的網站,AcWing = Accepted + Wing,簡稱AC 之翼。在上面可以刷一些 LeetCode 上沒有的 《劍指 Offer》的題,“大雪菜”還會在直播里給你講每道題的思路,這個網站上還有一些活動,激勵里去刷題和分享,我覺得還是很不錯的。
總結1、培養興趣
學習《算法與數據結構》是一項工程,并不是一件特別輕松的事情,所以我覺得剛開始的時候,培養興趣是很關鍵的,要讓自己認識到學習《算法和數據結構》是十分有用的。
2、樂于分享
不止一個人告訴我應該把自己的解題思路寫成文字分享出去了。寫成文字可以幫助自己思考,也方便以后查看,也能幫助到別人。事實上,互聯網上這樣的人有很多,應該成為他們中的一員。
3、堅持
貴在堅持,不要輕易說放棄。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45038.html
摘要:選擇排序算法實現實現選擇排序,記錄最小元素的索引,最后才交換位置說明交換兩個數組中的元素,在中有更簡單的寫法,這是的語法糖,其它語言中是沒有的。和語言中比較器的實現前面我們說到了,我們為了突出排序算法的思想,將所有的例子僅限在數組排序中。 showImg(https://segmentfault.com/img/remote/1460000017909538?w=1949&h=1080...
摘要:興趣最后該說說的就是興趣問題如果你能對它真正感興趣如果要從事軟件開發又沒興趣的話趕緊先培養興趣去對看技術資料就想別人看武俠小說看球賽一樣的話再配合上面提到的幾點踏實先專后廣基礎扎實相信在這一行多少是可以做點東西出來的 踏實 偶然在網上看到《由C#風潮想起的-給初學編程者的忠告》一文. 其中一個角度:避免浮躁,倡導踏實的學習方法,我是很認同的,但總覺該文作者標題-給初學編程者的忠...
摘要:居安思危,及時跳出舒適圈我之前是在網易做審核專員,就是審核新聞資訊,以及自媒體的內容,處理垃圾信息。盡管目前工資很可觀,福利很好。于是我就下定決心,要跳出這個舒適圈,換一份有技術含量的工作,這樣才能走得長遠。 ...
閱讀 651·2021-11-23 09:51
閱讀 3599·2021-11-15 11:38
閱讀 926·2021-10-14 09:42
閱讀 3162·2021-09-29 09:35
閱讀 2104·2021-09-03 10:33
閱讀 769·2021-07-30 16:33
閱讀 1557·2019-08-30 15:55
閱讀 1840·2019-08-30 14:04