1. 程式人生 > >學習資料結構和演算法的兩個利器|良心推薦

學習資料結構和演算法的兩個利器|良心推薦

資料結構和演算法的重要性想必各位在江湖上早就有所耳聞。它對我們最直接的影響就是面試,一般來說,程式設計師一面都會涉及資料結構和演算法知識,尤其是當前找工作比較難的情況下,各個公司會更加重視對候選人基本能力的考察。另外的影響是工作,以我為例,最開始在一家小公司做大資料的時候,由於資料量較大而計算資源不足,所以需要想盡各種辦法優化軟體的效能。最難解決的問題就是空間搜尋效率,當時用了kd-tree這種資料結構,以及最短路徑演算法(SPFA)。當然大部分情況下像這種常見的演算法呼叫現有的包即可,但有些時候需要結合業務做一些改進,這時候有紮實的基本功就顯得尤為重要了。

正好最近關注到學習資料結構和演算法的兩個工具,特別好用。下面我就分別介紹下這兩個工具,各位可以收藏一下,說不定以後能用到。

第一個工具是資料結構和演算法視覺化工具——Data Structure Visualizations。該工具由舊金山大學開發,地址:

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

它的作用是將資料結構和演算法用視覺化的方式展現出來,方便我們理解其中的原理。類似的工具還挺多的,我對比了四五個之後,覺得這個是最好的。內容豐富、容易操作、訪問速度快且容易理解。雖然網站是英文的,但英文並不多,且都是些容易理解的術語。(可以關注公眾號 渡碼 回覆關鍵字 ds 獲取其他工具的連結)。下面我就帶大家體驗簡單體驗一下該工具如何使用。首先,來看看該工具包含多少內容

這隻截取了部分,可以看到其中包含了各種樹(二叉搜尋樹、紅黑樹、B樹)、各種排序(歸併排序、快速排序、堆排序)以及各種圖演算法(最短路徑、最小生成樹演算法)。基本上涵蓋了我們平時常見的資料結構和演算法。

下面再來看看該工具是如何操作的

上圖左邊是我用工具建立的一顆紅黑樹,右邊是一顆B+樹。可以看到頁面上沒有過多的冗餘資訊,只是包含了插入、刪除、列印相關的按鈕以及選項,學習成本特別低。在做插入和刪除時會有相應的動畫,來幫助我們瞭解資料結構本身的原理,下面錄了個小短視訊讓大家體驗一下。(這裡直接貼視訊確實沒整明白,放了個連結,大家可以在連結中找到)

紅黑樹(連結中第一個視訊):https://mp.weixin.qq.com/s?__biz=MjM5MjcwMjk4OA==&mid=2247484282&idx=1&sn=36685ee078f892223b2daeb11ead96f9&chksm=a6a3741991d4fd0f33cba3598e50b021ad5cf9a215c00c36f656b2bcd4396804d4b48b73d05d&token=1458642456&lang=zh_CN#rd

B+樹(連結中第二個視訊):https://mp.weixin.qq.com/s?__biz=MjM5MjcwMjk4OA==&mid=2247484282&idx=1&sn=36685ee078f892223b2daeb11ead96f9&chksm=a6a3741991d4fd0f33cba3598e50b021ad5cf9a215c00c36f656b2bcd4396804d4b48b73d05d&token=1458642456&lang=zh_CN#rd

其實從這裡我們也能大概看出紅黑樹和B+樹的一些區別,上圖B+樹中的元素比紅黑樹多,然而樹的高度卻比紅黑樹低。這一特點就決定了在資料庫場景中,不可能用紅黑樹做索引,那會導致樹高度非常高。這種視覺化的方式體感很強。

上面介紹了視覺化工具,下面再介紹一個數據結構和演算法的程式碼庫,地址:

https://github.com/TheAlgorithms/Pythonhttps://github.com/TheAlgorithms/Javascripthttps://github.com/TheAlgorithms/Javahttps://github.com/TheAlgorithms/C

有各種語言的版本。先來看看都包含什麼內容

這裡只是截取了部分內容,跟視覺化工具一樣,常見的資料結構和演算法基本都包含。

最後,用二分查詢的小例子,來將這兩個工具結合起來。二分查詢演算法很簡單,它是我出去找工作面試中出現頻率最高的一道題。雖然簡單但也別小看它,我做面試官的時候,仍然遇到有好多人寫不出來。Python版演算法庫程式碼地址:

https://github.com/TheAlgorithms/Python/blob/master/searches/binary_search.py

我自己也實現了一下,程式碼如下:

二分查詢過程如下(連結中第三個視訊):

https://mp.weixin.qq.com/s?__biz=MjM5MjcwMjk4OA==&mid=2247484282&idx=1&sn=36685ee078f892223b2daeb11ead96f9&chksm=a6a3741991d4fd0f33cba3598e50b021ad5cf9a215c00c36f656b2bcd4396804d4b48b73d05d&token=1458642456&lang=zh_CN#rd

這裡既包含了查詢過程,又包含了每一步查詢對應的執行程式碼,非常方便學習。

有視覺化工具和程式碼,再結合原理相信沒有學不會的資料結構和演算法。希望這兩個工具對你有用。回覆關鍵字 ds 獲取更多工具。

歡迎公眾號「渡碼」,輸出別地兒看不到的乾貨。