很多前端童鞋對算法都有莫名的恐懼,究其原因無非兩點:其一 ,對算法不瞭解;其二,沒有找到實際應用場景。
一、為什麼學習算法?
這是個很有意思的問題,對算法感興趣的人,不需要問為什麼,算法對他們可能是一種興趣。
曾經有位同事,他刷遍了所有算法題,只要有算法競賽,他都會去參加。當然,也取得了不錯的成績,甚至有了自己的世界排名。
一次閒聊中,我拋出了這個問題,他笑著說:沒有為什麼,就是覺得好玩。我一直好奇,為什麼有人會覺得算法好玩,興趣點究竟在哪裡?
其實興趣算一部分,而另一部分則是對編程能力的提升以及思維的擴展。
編程語言雖然該學,但是學習計算機算法和理論更重要,因為計算機語言和開發平臺日新月異,但萬變不離其宗的是那些算法和理論。
我們用兩張趣圖來看看差別:
1.學習算法前,你可能這樣:
2.學習算法後,你變的機靈了:
二、如何入門?
那麼如何學習算法呢?這裡我推薦一本書《算法圖解》,超薄的小冊。書中通過一些簡單有趣的例子來闡述算法的應用場景。
之所以選它作為入門,是因為我們可以用很短的時間去翻讀。如果你還是覺得很麻煩,不用怕,我已經幫你準備好了學習筆記:
1.算法圖解1 - 二分查找和大O表示法
http://jartto.wang/2018/11/22/algorithm1/
2.算法圖解2 - 數組和鏈表
http://jartto.wang/2018/11/25/algorithm2/
3.算法圖解3 - 遞歸,快排
http://jartto.wang/2018/11/26/algorithm3/
4.算法圖解4 - 散列表
http://jartto.wang/2018/11/27/algorithm4/
5.算法圖解5 - 圖和廣度優先搜索
http://jartto.wang/2018/11/28/algorithm5/
6.算法圖解6 - 狄克斯特拉算法與貪婪算法
http://jartto.wang/2018/11/29/algorithm6/
7.算法圖解7 - 動態規劃
http://jartto.wang/2018/11/29/algorithm7/
書中是圍繞 Python 來寫的,為了更適合前端童鞋閱讀,我已經將相關代碼用 JS 實現了一遍。當然,還是有很多的細節,還需要深入的去理解。但是最起碼,我不再懼怕算法了,反而慢慢有點喜歡了。
算法的重中之重是培養算法思維。如果你能對算法靈活運用,那麼就「大成」了。
三、後面的路怎麼走?
入門從來都不是一件簡單的事情,在我們打開這扇神秘大門之後,將會有更多的寶藏需要我們去挖掘。
想要精通算法,在第一本書讀完之後,我們還有更多的目標需要去完成。這裡由淺入深的列舉一些算法經典書籍,供大家參考學習:
1.入門系列:
《算法圖解》《大話數據結構》
2.教科書之類:
《數據結構與算法分析》
3.進階之旅:
《算法導論》
4.針對面試準備:
《劍指 Offer》《編程珠璣》
5.擴展閱讀:
《算法之美》《算法帝國》
6.實踐操作:
《算法競賽入門經典》《力扣題庫》
算法其實有很多經典書籍,我們沒有那麼多的時間去逐一翻閱,但是我們可以有一條明確的學習路線。
這條學習路線就是:入門 - 進階 - 實踐 - 昇華
四、配合實踐
其實上面已經提到了,在我們掌握算法思維之後,最為重要的一點就是刷題。相信很多童鞋都聽過 LeetCode ,目前題庫大概有 1000+ 題目,沒事了就去刷刷。
當然,刷題也可以由淺入深,先從簡單的入手吧!
五、推薦學習
JavaScript 算法與數據結構
https://github.com/trekhleb/javascript-algorithms/blob/master/README.zh-CN.md
可視化學習算法的好工具
http://algorithm-visualizer.org/#path=sorting/bucket/basic
互聯網公司最常見的面試算法題有哪些?
https://www.zhihu.com/question/24964987
算法練習,和我一起來刷題吧~
https://github.com/chenfengyanyu/interview
六、總結
文章陸陸續續說了這麼多,大體總結如下:
1.算法很重要,尤其是對於前端 童鞋;
2.算法學習最好由淺入深,先了解算法思維,再去理解實際應用;
3.從一本小而薄的書開啟,逐步全面的掌握相關知識體系;
4.推薦速成路線:《算法圖解》-《劍指 Offer》- LeetCode 刷題 -《算法之美》-《算法導論》;
5.去努力實踐,刷刷題庫,參加參加競賽;
好了,就這些吧,祝大家早日搞定算法,帶上算法的王冠,去領略算法之美吧。
1.
2.
3.
閱讀更多 F2EAwesome 的文章