很多前端童鞋對演算法都有莫名的恐懼,究其原因無非兩點:其一,對演算法不瞭解;其二,沒有找到實際應用場景。
一、為什麼學習演算法?
這是個很有意思的問題,對演算法感興趣的人,不需要問為什麼,演算法對他們可能是一種興趣。曾經有位同事,他刷遍了所有演算法題,只要有演算法競賽,他都會去參加。當然,也取得了不錯的成績,甚至有了自己的世界排名。
一次閒聊中,我丟擲了這個問題,他笑著說:沒有為什麼,就是覺得好玩。我一直好奇,為什麼有人會覺得演算法好玩,興趣點究竟在哪裡?
其實興趣算一部分,而另一部分則是對程式設計能力的提升以及思維的擴充套件。
程式語言雖然該學,但是學習計算機演算法和理論更重要,因為計算機語言和開發平臺日新月異,但萬變不離其宗的是那些演算法和理論。
我們用兩張趣圖來看看差別:
1.學習演算法前,你可能這樣:
2.學習演算法後,你變的機靈了:
二、如何入門?
那麼如何學習演算法呢?這裡我推薦一本書《演算法圖解》,超薄的小冊。書中通過一些簡單有趣的例子來闡述演算法的應用場景。之所以選它作為入門,是因為我們可以用很短的時間去翻讀。
如果你還是覺得很麻煩,不用怕,我已經幫你準備好了學習筆記:
- 演算法圖解1 - 二分查詢和大O表示法
- 演算法圖解2 - 陣列和連結串列
- 演算法圖解3 - 遞迴,快排
- 演算法圖解4 - 雜湊表
- 演算法圖解5 - 圖和廣度優先搜尋
- 演算法圖解6 - 狄克斯特拉演算法與貪婪演算法
- 演算法圖解7 - 動態規劃
書中是圍繞 Python
來寫的,為了更適合前端童鞋閱讀,我已經將相關程式碼用 JS
實現了一遍。當然,還是有很多的細節,還需要深入的去理解。但是最起碼,我不再懼怕演算法了,反而慢慢有點喜歡了。
演算法的重中之重是培養演算法思維。
當你能夠對演算法活學活用之後,那麼你就「大成」了。
三、後面的路怎麼走?
入門從來都不是一件簡單的事情,在我們開啟這扇神祕大門之後,將會有更多的寶藏需要我們去挖掘。
想要精通演算法,在第一本書讀完之後,我們還有更多的目標需要去完成。這裡由淺入深的列舉一些演算法經典書籍,供大家參考學習:
1.入門系列: 《演算法圖解》《大話資料結構》
2.教科書之類: 《資料結構與演算法分析》
3.進階之旅: 《演算法導論》
4.針對面試準備: 《劍指 Offer》《程式設計珠璣》
5.擴充套件閱讀: 《演算法之美》《演算法帝國》
6.實踐操作: 《演算法競賽入門經典》《力扣題庫》
演算法其實有很多經典書籍,我們沒有那麼多的時間去逐一翻閱,但是我們可以有一條明確的學習路線。
這條學習路線就是:入門 - 進階 - 實踐 - 昇華
四、配合實踐
其實上面已經提到了,在我們掌握演算法思維之後,最為重要的一點就是刷題。相信很多童鞋都聽過 LeetCode
,目前題庫大概有 1000+ 題目,沒事了就去刷刷。
五、推薦學習
六、總結
文章陸陸續續說了這麼多,大體總結如下:
- 演算法很重要,尤其是對於前端童鞋;
- 演算法學習最好由淺入深,先了解演算法思維,再去理解實際應用;
- 從一本小而薄的書開啟,逐步全面的掌握相關知識體系;
- 推薦速成路線:《演算法圖解》-《劍指 Offer》- LeetCode 刷題 -《演算法之美》-《演算法導論》;
- 去努力實踐,刷刷題庫,參加參加競賽;
好了,就這些吧,祝大家早日搞定演算法,帶上演算法的王冠,去領略演算法之美吧。