學 [數據結構、演算法] 的資源推薦

0、前言:

我在初學編程以及學習數據結構的時候,一直有個想問卻害怕問出來被嫌棄的問題,那就是「數據結構學了有啥用?演算法和數據結構又是啥關係」,那時候懵懵懂懂的,好像明白卻又具體回答不上來,說不出所以然。

現在明白了。

有這麼一句話說「程序=數據結構+演算法」,也有人說「如果把編程比作做菜,那麼數據結構就好比食材(菜),演算法就好比廚藝(做菜的技巧)」。

當然這是籠統的說法,不過也稍微懂得了數據結構和演算法的重要性了。

其實,數據結構是數據間的有機關係,而演算法是對數據的操作步驟;兩者不可分開來談,不能脫離演算法來討論數據結構,也不能脫離數據結構研究演算法。

在網上看到這樣一段話:

數據結構並不是來教你怎樣編程的,同樣編程語言的精練也不在數據結構的管轄範圍之內,那是教你學習一門語言的老師的事情,他肯定不想因為數據結構而失業。數據結構是教你如何在現有程序的基礎上把它變得更優(運算更快,佔用資源更少),它改變的是程序的存儲運算結構而不是程序語言本身。

如果把程序看成一輛汽車,那麼程序語言就構成了這輛車的車身和輪胎。而演算法則是這輛車的核心——發動機。這輛車跑得是快是慢,關鍵就在於發動機的好壞(當然輪胎太爛了也不行),而數據結構就是用來改造發動機的。

可以這麼說,數據結構並不是一門語言,它是一種思想,一種方法,一種思維方式。它並不受語言的限制,你完全可以在gave 中輕而易舉地實現一個用C語言給出的演算法。

或許你在初入職場的時候並不會涉及到需要使用到數據結構的地方,也因而覺得數據結構貌似沒用,但這和「農民工也能蓋大樓,幹嘛還學建築呢?」 是一個道理,應該都懂。

前面說了超長的廢話,其實我是想介紹一些數據結構的學習資源,主要針對編程新手,希望可以解決新手們「如何學習數據結構」的困惑,若對你有所幫助,那真是極好的。

1、一定要看書籍:

(ps.我不是推薦書,而是說要看書,要有一個系統的理論基礎,至於看什麼書可以自己選擇~)

大學的《數據結構》教材,就是一本不錯的入門書籍,可以好好看看,畢竟還有老師講課呢。

貌似一般的通用教材是 嚴蔚敏 版的 《數據結構》

還有一本經典書籍:《數據結構與演算法分析》,很多人推薦閱讀,如果有基礎的話,可以當做工具書使用,哪裡不懂看哪裡。

如果你想深入研究演算法的話,可以看看《演算法導論》,反正據說看完的都很牛。

其實不一定要是以上書籍啦,只是想說一定要有系統的理論知識,知曉其原理。

2、善用在線課程:

除了書籍之外,也可以選擇在線學習的方式,比如上慕課、網易雲課堂、實驗樓等學習網站進行學習,上面一般都會有數據結構這種基礎課程,而且質量都還可以。如果你喜歡視頻的方式,可以選擇慕課或者網易,如果和我一樣喜歡動手的方式,可以選擇實驗樓。

推薦課程: C/C++ - 數據結構

介紹的還算詳細,關鍵是可以隨時動手跟著做,學習效率很高。

3、藉助可視化工具:

在學習數據結構之初,往往會覺得知識比較抽象,因此無法對其有個清晰的認知,這個時候就需要 visualgo 這個神器啦!!看著動態視頻,一下子就明白原理了。推薦推薦。

visualgo 是一款可視化學習演算法的工具,從簡單的排序演算法到複雜的圖形數據結構和演算法都有

visualgo 網址 : visualgo.net/

4、多動手實踐:

在學習演算法的時候,一定要花時間來分析其演算法原理,基礎知識是少不了的,因此前面介紹的書籍也好,在線課程也罷,還有可視化工具,都是為了更好的掌握演算法原理。有了基礎之後,接下來就要多動手實踐了,只有這樣才能知道自己哪裡學習的不好,需要加強。

可以上LeetCode(一個美國的在線編程網站,上面主要收集了各大IT公司的筆試面試題)或者 lintcode(編程面試題 在線訓練平台,和LeetCode 類似,不過有中文,但是沒討論區) 上刷刷題,或者去類似實驗樓一樣的擁有在線開發環境的網站學習,真的,只有動手了,你才知道動手的樂趣和收穫!

  • LeetCode 網址: leetcode.com/

  • lintcode 網址: lintcode.com/zh-cn/

  • LeetCode上的經典演算法解題實戰 : LeetCode上 經典演算法解題實戰

如果你喜歡這種在線刷題的方式來實踐演算法,那麼知乎上的這個問題絕對可以幫助到你:

  • 知乎話題:有哪些學習演算法的網站推薦?

以上的內容應該可以幫助你學好數據結構以及實踐了,下面整理一些我看到的演算法相關文章,可以參考閱讀;

5、分享一些文章材料:

下面是我平時看到的一些關於演算法的文章,還是蠻有用的;

  • 每個程序員都應該收藏的演算法複雜度速查表

  • GitHub - 各種演算法的C++代碼

  • 15道使用頻率極高的基礎演算法題
  • 常用的十大編程演算法介紹

  • 八大排序演算法的Python實現
  • [直觀學習排序演算法] 視覺直觀感受若干常用排序演算法

  • 查找演算法之順序、二分、二叉搜索樹、紅黑樹 詳細比較總結

  • wikipedia——List of data structures

  • wikipedia——List of algorithms
  • 如果業界中不用高級演算法和數據結構,那為什麼還要學?

  • 微博背後的那些演算法

  • 面試中的排序演算法總結

  • 微軟面試100題2010年版全部答案集錦(含下載地址)

  • 國內一線互聯網公司內部面試題庫

嗯,覺得能看這個問題的或許會對以下的資源感興趣,因此也分享出來;

  • 挑戰這十七項編程 鍛煉大腦並且提升能力

  • 谷歌推薦的計算機科學學習路線

以上就是我對於學習數據結構和演算法的一些小建議和資源推薦,希望可以幫助到你~

推薦閱讀:

平面圖的演算法有什麼用
計算機體系結構是一種低級的複雜工作嗎 ?
6/7 演算法題詳解:Evaluate RPN Expressions 如何求逆波蘭表達式(RPN)的值
100 個數,如何遍歷得到所有全排列?
『一道很難的智力題』解法

TAG:算法 | 数据结构 | 程序员 |