如何有效學習演算法
學習演算法的基本思路就是:先學習演算法思想,然後通過做題消化思想,並在做題過程中慢慢學習,掌握一些小技巧。這其中演算法思想就是道,而經典題目以及做題技巧就是術。做題是通過術來完善道。
但是很多人都反應看講義和做題之間斷層嚴重,也就是一看就會,一些就廢。這怎麼辦呢?
<!-- more -->
除了多寫,多練習之外,我認為以下兩點可以幫助你:
- 做題的時候和講義(學習資料)進行結合
這是一個很重要的也容易被忽略的點。拿《91 天學演算法》來說:看講義就是學思想,每日一題就是鞏固消化思想。做每日一題的時候,要多往講義上靠靠,比如想一下這道題對應講義哪一部分,考察的是講義中提到的哪一個知識點。
- 看講義(學習資料)的時候將例題用視覺化的方式自己跑一遍
我剛開始學習演算法的時候,基本上也是這種思路。學習完思想做題的時候對例題都在電腦或者紙上畫一下程式碼執行流程,然後和學習的演算法思想進行結合。這樣不僅演算法思想容易吸收,而且也收效緩解了一看就會,一寫就廢的尷尬境地。
但是畢竟自己畫圖還是有點成本的,不是所有的人都有動力自己畫圖的。程式設計師都很懶,其實我剛開始刷題的時候一直有一個想法, 如果做題有視覺化顯示該有多好?最好是和我講義圖類似的那種, 這樣無疑對新手來說吸收思想效率肯定高。
視覺化除錯外掛
無巧不成書,前幾天《91 天學演算法》群裡有人提到 LeetCode 刷題除錯。大家有的用 IDE 除錯,有的用會員的除錯功能在網頁除錯。 其實前一陣子我分享刷題技巧的時候也分享了除錯外掛,沒有看過的同學可以看下 力扣刷題的正確姿勢是什麼?。
今天再分享一個適合新手的除錯工具,簡單易用,直觀方便。更關鍵的是,其已經內建到我的刷題外掛 leetcode-cheatsheet 中,直接開箱即用,外掛版本大於等於 0.9.0 即可。雖然它暫時還無法自動生成像我講義裡面那麼完整的圖和動畫,但是比文字要直觀太多了。後期考慮整合更多的語言以及更多的語法特性以及更好的展示效果。
該使用方式非常簡單,完全滿足了大家偷懶的需求。你只需要:
- 安裝刷題外掛 leetcode-cheatsheet
外掛如何下載與安裝可以在公眾號回覆外掛獲取
- 開啟 leetcode 中任意一道題目,寫程式碼。
目前支援 Python3,CPP,JavaScript
- 點選下方的視覺化除錯
- 按提示修改程式碼後點選Visualize Execution按鈕
如果無法修改程式碼,可以先點選 edit code
這裡我就想吐槽一下 leetcode 了。幹嘛每一道題函式名字都不一樣,真沒這個必要。比如都叫 solve 不好麼?希望力扣可以考慮一下這個建議。
- 通過控制區域控制程式碼執行,右側會自動同步的視覺化地顯示變數資訊
最後友情提示一下。視覺化除錯推薦在看資料(比如 91 天學演算法的講義)的時候把其中的例題用視覺化的方式除錯一遍,填平思路到程式碼的鴻溝。 之後大家做題不要依賴除錯功能,而是先在大腦中除錯一下,然後用工具驗證。也就是說這個工具,我僅推薦你在兩種情況下使用:
- 看演算法思想資料,做其中的例子的時候一步步除錯學習。
- 程式碼有 case 跑不通,先在腦子中過一下,猜測大概出問題的點,然後用工具直接定位到附近通過視覺化的方式幫助你分析。
最後大家有什麼想要的 feature 可以給我公眾號後臺或交流群裡留言。