學習數據結構和算法的兩個利器|良心推薦

數據結構和算法的重要性想必各位在江湖上早就有所耳聞。它對咱們最直接的影響就是面試,通常來講,程序員一面都會涉及數據結構和算法知識,尤爲是當前找工做比較難的狀況下,各個公司會更加劇視對候選人基本能力的考察。另外的影響是工做,以我爲例,最開始在一家小公司作大數據的時候,因爲數據量較大而計算資源不足,因此須要想盡各類辦法優化軟件的性能。最難解決的問題就是空間搜索效率,當時用了kd-tree這種數據結構,以及最短路徑算法(SPFA)。固然大部分狀況下像這種常見的算法調用現有的包便可,但有些時候須要結合業務作一些改進,這時候有紮實的基本功就顯得尤其重要了。html

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

第一個工具是數據結構和算法可視化工具——Data Structure Visualizations。該工具由舊金山大學開發,地址:程序員

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html複製代碼

它的做用是將數據結構和算法用可視化的方式展示出來,方便咱們理解其中的原理。相似的工具還挺多的,我對比了四五個以後,以爲這個是最好的。內容豐富、容易操做、訪問速度快且容易理解。雖然網站是英文的,但英文並很少,且都是些容易理解的術語。(github

能夠關注公衆號 渡碼 回覆關鍵字 ds 獲取其餘工具的連接)
。下面我就帶你們體驗簡單體驗一下該工具如何使用。首先,來看看該工具包含多少內容

這隻截取了部分,能夠看到其中包含了各類樹(二叉搜索樹、紅黑樹、B樹)、各類排序(歸併排序、快速排序、堆排序)以及各類圖算法(最短路徑、最小生成樹算法)。基本上涵蓋了咱們平時常見的數據結構和算法。面試

下面再來看看該工具是如何操做的算法

上圖左邊是我用工具創建的一顆紅黑樹,右邊是一顆B+樹。能夠看到頁面上沒有過多的冗餘信息,只是包含了插入、刪除、打印相關的按鈕以及選項,學習成本特別低。在作插入和刪除時會有相應的動畫,來幫助咱們瞭解數據結構自己的原理,下面錄了個小短視頻讓你們體驗一下。(這裏直接貼視頻確實沒整明白,放了個連接,你們能夠在連接中找到)數據庫

紅黑樹(連接第一個視頻):mp.weixin.qq.com/s?__biz=MjM…bash

B+樹(連接第二個視頻):mp.weixin.qq.com/s?__biz=MjM…markdown

其實從這裏咱們也能大概看出紅黑樹和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複製代碼

我本身也實現了一下,代碼以下:

二分查找過程以下(連接第三個視頻):

mp.weixin.qq.com/s?__biz=MjM…

這裏既包含了查找過程,又包含了每一步查找對應的執行代碼,很是方便學習。

有可視化工具和代碼,再結合原理相信沒有學不會的數據結構和算法。但願這兩個工具對你有用。回覆關鍵字 ds 獲取更多工具。

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

相關文章
相關標籤/搜索