如何系統學習數據結構與算法?

大家好,我是小吳。

最近在公衆號發佈了不少圖解 LeetCode 的文章,一些同學在後臺打卡,甚是感動,以後也會每天都發布一篇,希望能幫助大家更好的刷題,通過算法面試,進入心儀的大廠。

談到刷題,還是有一些小技巧的:

  • 1、按算法分類來選題,這種做法可以極大的提高刷題的速度,而且能帶來更好的效果

  • 2、刷題的過程中先看懂題目、再分析推導解法、最後轉換爲代碼

當然,這些技巧的前提是你得掌握了基礎的數據結構和算法

很多人學數據結構和算法要麼是拿起《算法 4》來啃,結果倒在第二章,要麼在網上找一些零散的博客看,導致無法建立一個完整的系統框架,過段時間都忘了,懷疑自己智商不夠。

事實上,算法不是純粹拼智商的,它是可以通過科學合理的方式訓練出來的能力,刷題蠻幹是不行的,需要遵循科學的方法,算法訓練是個系統工程,得循序漸進着來,過於急功近利,反而會因做不出題而產生挫敗感,帶來反作用。

這兩年來,每次有讀者問我學數據結構和算法有什麼好的圖文課程,我都會推薦王爭的《數據結構與算法之美》,毫不誇張的說,這是市面上最實用又全面的算法教程,口碑特別好(10W+的訂閱量與評論區的大量好評),目前已經安利了 600 人去看,看完後基本上反饋告訴我不害怕刷題了。

運營小姐姐告訴我過幾天要漲價了,所以想趁着還有優惠,再次推薦給小夥伴們👇

輸入專屬口令suanfa999
到手僅 ¥89半價秒殺
即將漲價至 ¥199

如果你在準備春招,建議把這個專欄刷一遍,這樣數據結構基本沒啥問題了,然後再按算法分類進行系統的刷題,那麼在算法面試環節和麪試官談笑風生不成問題,聊一聊如何根據年齡給 100 萬用戶數據排序如何快速定位 IP 對應的省份地址如何防止數據庫中的用戶信息唄脫庫

再和大家聊一聊數據結構與算法在平時工作中的作用,畢竟很多人不想學就是不知道學它有啥用,業務工作中貌似又用不到。

舉個例子,在工作過程中,我們多多少少都接觸過 OAuth2 ,在使用 OAuth2 授權的時候,通常應用會彈出一個類似這樣的信息:

  • 獲取用戶基本信息接口


  • 獲取用戶列表接口


  • 用戶分組管理接口




思考一下,如果讓你設計數據庫,應該怎麼設計信息存儲權限

如果你不會數據結構的話,肯定是 if/else 組合各種 API 寫一堆臃腫的代碼。

而如果你熟練掌握了各種數據結構的特點的話,那自然而然想到使用 bitmap 來存儲權限。

我們把權限劃分成最小粒度之後,每一個 bit 都它的含義, 例如我們把權限劃分爲以下幾種:

  • 獲取你的頭像、性別、暱稱等基本用戶信息
  • 以你的身份發佈微博
  • 獲取你的好友列表
  • 獲取你的朋友圈信息

每勾選一個選項,就代表着這個權限被授權,爲了保證可擴展性,我們使用一個 uint64 來保存這些 bit ,也就是說,我們一共可以劃分 64 種細分權限,然後對這些權限進行組合。

例如,第一個 bit 如果設置了,那麼就代表可以獲取你的暱稱、頭像、地區、性別等基本用戶信息, 第二個 bit 如果設置了,就可以用你的身份髮狀態。

數據結構的實際作用還有挺多,感興趣的可以搜索以下知識點:

  • 二叉樹搜索用於中斷處理、登記緩存查找等 哈希表,用於實現索引節點、文件系統完整性檢查等
  • 紅黑樹用於調度、虛擬內存管理、跟蹤文件描述符和目錄條目等
  • Radix樹,用於內存管理、NFS相關查找和網絡相關的功能

上面這些例子是關於數據結構的,我再舉一個算法的例子,同樣的也來思考一個問題:計算機的緩存容量無論再大,緩存滿了還是要刪除一些內容,給新內容騰位置。

刪除哪些內容呢

我們肯定希望刪掉哪些沒什麼用的緩存,而把有用的數據繼續留在緩存裏,方便之後繼續使用。

那麼,什麼樣的數據,我們判定爲「有用的」的數據呢?

這個時候採取的策略就是 LRU 緩存淘汰算法。

LRU 的全稱是 Least Recently Used,也就是說我們認爲最近使用過的數據應該是是「有用的」,很久都沒用過的數據應該是無用的,內存滿了就優先刪那些很久沒用過的數據。

是不是感覺這些問題很細節?

很多時候判斷程序員是不是編程高手,往往就是看這些細節:你用的算法是不是夠優化,數據存取的效率是不是夠高,內存是不是夠節省等等。

如果你還不懂數據結構和算法,或者沒有系統的學習過,那肯定說不過去了,趕緊來補一補吧!

輸入專屬口令suanfa999
到手僅 ¥89半價秒殺
即將漲價至 ¥199

另外,小爭哥說算法易學難精,貴在堅持,所以發起了「算法刷題打卡」活動,通過刻意練習提升自己,專欄讀者都可以免費加入。

第一期預計 500 人,現在僅剩 200 多個坑位了,在這個羣裏有各個領域優秀的程序員,大家一起討論乾貨,交流技術,互相監督,學習成長。小爭哥也會進羣,帶着大家一起刷題。

可不要小看這個刷題打卡,堅持一個月試試,半年試試,一年試試?

點擊「閱讀原文」,一頓飯錢,就能跟小爭哥一起徹底拿下算法,值了。

本文分享自微信公衆號 - 五分鐘學算法(CXYxiaowu)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章