學(xué)過數(shù)據(jù)結(jié)構(gòu)和算法的都知道這玩意兒不好學(xué),沒學(xué)過的經(jīng)常聽到這樣的說法還沒學(xué)就覺得難,其實難嗎?真難!
難在哪呢?當(dāng)年我還是個小蒟蒻,初學(xué)數(shù)據(jù)結(jié)構(gòu)和算法的時候,在忍著枯燥看完定義原理,之后想實現(xiàn)的時候,覺得它們的過程真的是七拐八繞,及其難受。
在簡單的鏈表、棧和隊列這些我還能靠著在草稿上寫寫畫畫理解過程,但是到了數(shù)論、圖論的時候,中間實現(xiàn)的過程步驟開始劇增,那個時候靠寫寫畫畫和對程序的單步調(diào)試強行理解,作為一個智商一直被壓制的慘人,稍不注意就會重新來過,陷入死循環(huán)…
后來搞 ACM 之初,我的隊友給了我一個數(shù)據(jù)結(jié)構(gòu)模擬器的壓縮包(后來知道好像是嚴蔚敏數(shù)據(jù)機構(gòu)那本書光盤里帶的),里面是對一些數(shù)據(jù)結(jié)構(gòu)的模擬操作,一步步的很形象,有些東西好像一下子就通了…
這種可視化的動畫真的對我們理解數(shù)據(jù)結(jié)構(gòu)和算法非常有幫助,尤其是在學(xué)習(xí)之初,堪稱很好的防勸退工具,所以我對這些做了一些整理,希望能幫助到你。
0x00 數(shù)據(jù)結(jié)構(gòu)在線模擬器
Github 這個在線的模擬器包含“棧”、“隊列”、“堆”、“BST” 等數(shù)據(jù)結(jié)構(gòu),每個數(shù)據(jù)結(jié)構(gòu)以圖像的方式展示在我們面前,同時又有各自的幫助文檔,可以用鼠標(biāo)對數(shù)據(jù)節(jié)點進行拖拽,還可以實現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)的增刪改查。
還有一點好的是,這個網(wǎng)站還伴隨著一些數(shù)據(jù)結(jié)構(gòu)的教學(xué)材料、簡要的復(fù)雜度分析、數(shù)據(jù)結(jié)構(gòu)使用實例,對于理解各種數(shù)據(jù)結(jié)構(gòu)的原理及運用可以說是相當(dāng)絲滑了…
網(wǎng)站上還帶著使用說明和產(chǎn)品簡介,可以說是相當(dāng)貼心了…
隨便點開一個“堆”的,大家體驗一下,是不是想趕緊用起來啦…
0x01 VisuAlgo
可以說是知名度比較高的一個通過動畫學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)的網(wǎng)站了,它最初的建立就是通過可視化讓學(xué)生更好的理解數(shù)據(jù)結(jié)構(gòu)和算法。
VisuAlgo 的功能更豐富,它包含了很多的數(shù)據(jù)結(jié)構(gòu)和算法,從簡單的到復(fù)雜的都一一包含,而且對于一些新出現(xiàn)的算法也有涉獵,通過可視化動畫的方法,幫助我們更輕松透徹的理解算法及原理,尤其是對一些通過文字描述很難理解的算法而言,簡直是生命之光。
VisuAlgo 還支持搜索和多種語言的切換,英語不好的同學(xué)可以切換成中文,但是現(xiàn)在有一些算法中文翻譯的并不全,所以如果能看英文的話還是建議看中文的。
我們隨便點開一個排序來看,可以看到它包含之多,還帶文字講解、單步、回退、暫停等功能,真的是功能豐富且強大,當(dāng)然它不止于此,還包含著更多的東西等著我們?nèi)ネ鎯海s緊行動起來吧。
0x02 Data Structure Visualizations
這是舊金山大學(xué)的一個數(shù)據(jù)結(jié)構(gòu)和算法的可視化工具,不過它涉及的內(nèi)容沒有 VisuAlgo 多,不過也涉及了很多常用的數(shù)據(jù)結(jié)構(gòu)和算法。
我們隨便打開一個“棧”,左上角就有 Push(進站)、Pop(出棧)、Clear Stack(清空棧),下面可以設(shè)置對動畫的一些參數(shù),關(guān)于具體的使用,還需要大家多做嘗試:
0x03 Algorithm Visualizer
Github 同樣包含了很多可視化的數(shù)據(jù)結(jié)構(gòu)和算法,包括動態(tài)規(guī)劃、加密算法、回溯算法等,這個項目在 Github 上有 25k+ 的 Star,足以見得它的受歡迎程度:
同樣隨便點開一個“
二叉搜索樹”,包括演示區(qū)域、過程數(shù)據(jù)記錄和代碼演示的部分,而且在代碼演示的部分,動畫執(zhí)行到某步的同時代碼執(zhí)行處也會同步,既可以理解代碼也可以理解算法原理和過程,真的是相當(dāng)棒!
0x04 LeetCodeAnimation
這個是我的好朋友程序員吳師兄(五分鐘學(xué)算法)維護的項目,在 Github 上已經(jīng)有了 44k+ 的 star,屬于頭部中的戰(zhàn)斗機。
這個項目致力于用動畫的形式呈現(xiàn)解LeetCode題目的思路,我們學(xué)數(shù)據(jù)結(jié)構(gòu)與算法,就是為了用,在實際具體的實操環(huán)境中往往更能加深對理解,在應(yīng)用中理解,在理解中應(yīng)用,才能更快的掌握。