重学算法第三期|数据结构与算法001
目錄
強烈推薦一個數據結構可視化工具:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html,點擊B+樹即可模擬B+樹的動態插入過程,非常有利于理解
1、開篇詞
2、為什么要學習數據結構與算法
3、如何抓住重點,系統高效地學習數據結構與算法?
什么是數據結構?什么是算法?
數據結構和算法有什么關系呢?
學習的重點在什么地方?
學習技巧
1、開篇詞
在技術圈里,我們經常喜歡談論高大上的架構,比如高可用、微服務、服務治理等等。鮮有人關注代碼層面的編程能力,而愿意沉下心來,花幾個月時間啃一啃計算機基礎知識、認認真真夯實基礎的人,簡直就是鳳毛麟角。
人生路上,我們會遇到很多的坎。跨過去,你就可以成長,跨不過去就是困難和停滯。而在后面很長的一段時間里,你都需要為這個困難買單。對于我們技術人來說,更是這樣。既然數據結構和算法這個坎,我們總歸是要跨過去,為什么不是現在呢?
2、為什么要學習數據結構與算法
我們學任何知識都是為了“用”的,是為了解決實際工作問題的,學習數據結構和算法自然也不例外。
一名業務開發工程師,如果不知道類庫背后的原理,不懂得時間、空間復雜度分析,如何能用好、用對它們?存儲某個業務數據的時候,如何知道應該用 ArrayList,還是 Linked List 呢?調用了某個函數之后,又該如何評估代碼的性能和資源的消耗呢?作為業務開發,我們會用到各種框架、中間件和底層系統,比如 Spring、RPC 框架、消息中間件、Redis 等等。在這些基礎框架中,一般都揉和了很多基礎數據結構和算法的設計思想。
Key-Value 數據庫 Redis 中,里面的有序集合是用什么數據結構來實現的呢?為什么要用跳表來實現呢?為什么不用二叉樹呢?
掌握數據結構和算法,不管對于閱讀框架源碼,還是理解其背后的設計思想,都是非常有用的。
如何實時地統計業務接口的 99% 響應時間?你可能最先想到,每次查詢時,從小到大排序所有的響應時間,如果總共有 1200 個數據,那第 1188 個數據就是 99% 的響應時間。很顯然,每次用這個方法查詢的話都要排序,效率是非常低的。但是,如果你知道“堆”這個數據結構,用兩個堆可以非常高效地解決這個問題。
有的人寫代碼的時候,從來都不考慮非功能性的需求,只是完成功能,湊合能用就好;做事情的時候,也從來沒有長遠規劃,只把眼前事情做好就滿足了。何為編程能力強?是代碼的可讀性好、健壯?還是擴展性好?我覺得沒法列,也列不全。但是,在我看來,性能好壞起碼是其中一個非常重要的評判標準。但是,如果你連代碼的時間復雜度、空間復雜度都不知道怎么分析,怎么寫出高性能的代碼呢?
為什么學習數據結構和算法?我認為有3點比較重要
1.直接好處是能夠有寫出性能更優的代碼。
2.算法,是一種解決問題的思路和方法,有機會應用到生活和事業的其他方面。
3.長期來看,大腦思考能力是個人最重要的核心競爭力,而算法是為數不多的能夠有效訓練大腦思考能力的途徑之一。
3、如何抓住重點,系統高效地學習數據結構與算法?
什么是數據結構?什么是算法?
從廣義上講,數據結構就是指一組數據的存儲結構。算法就是操作數據的一組方法。圖書館儲藏書籍你肯定見過吧?為了方便查找,圖書管理員一般會將書籍分門別類進行“存儲”。按照一定規律編號,就是書籍這種“數據”的存儲結構。那我們如何來查找一本書呢?有很多種辦法,你當然可以一本一本地找,也可以先根據書籍類別的編號,是人文,還是科學、計算機,來定位書架,然后再依次查找。籠統地說,這些查找方法都是算法。
從狹義上講,也就是我們專欄要講的,是指某些著名的數據結構和算法,比如隊列、棧、堆、二分查找、動態規劃等
數據結構和算法有什么關系呢?
數據結構和算法是相輔相成的。數據結構是為算法服務的,算法要作用在特定的數據結構之上。 因此,我們無法孤立數據結構來講算法,也無法孤立算法來講數據結構
學習的重點在什么地方?
學習數據結構和算法的過程,是非常好的思維訓練的過程,所以,千萬不要被動地記憶,要多辯證地思考,多問為什么。如果你一直這么堅持做,你會發現,等你學完之后,寫代碼的時候就會不由自主地考慮到很多性能方面的事情,時間復雜度、空間復雜度非常高的垃圾代碼出現的次數就會越來越少。你的編程內功就真正得到了修煉
學習技巧
?
?
?
總結
以上是生活随笔為你收集整理的重学算法第三期|数据结构与算法001的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DDR3 MIG IP核仿真与学习
- 下一篇: 代数-导学