為什麼要學習資料結構和演算法?
1. 什麼是資料結構和演算法?
資料結構,就是一組資料的儲存結構。
演算法,就是運算元據的一組方法。
資料結構是為演算法服務的,演算法要作用在特定的資料結構之上。
2. 為什麼需要資料結構和演算法?
應用層面的原因:在電腦科學和網際網路迅猛發展下,需要計算的資料量越來越龐大。但是計算機的計算能力是有限的,這麼大量的資料計算,需要越來越多的計算機,需要越來越長的計算時間,注重效率的我們需要儘可能的提高計算效率。其中重要的一項,就是使用合適的資料結構和演算法。選用合適的資料結構和演算法,特別是在處理體量非常龐大的資料的時候,可以極大提高計算效率。
個人層面的原因:
-
首先,學習演算法和資料結構的目的是讓程式設計師建立時間複雜度、空間複雜度的意識,寫出更高質量的程式碼,效能好壞是其中非常重要的一個評判指標。因為計算機可用的計算資源是有限的,我們當然期盼使用最少的資源來達到最優的效能。就比如說,為了達到發電的這個目的,我們可以燒煤,也可以用風力發電。但是風力發電是更被提倡的,就是為了減少對地球的負擔。那麼特別是對於資料量非常大的應用場景,面對上億級別的使用者,我們就更需要優化程式碼的質量,設計優秀的基礎架構來最大化的利用裝置的計算資源。
-
其次,掌握這些底層原理能幫助我們在寫程式碼的時候少犯錯誤,在使用一些庫類的時候,即使出現問題也能更快的定位。而且能夠提升工作的效率。此外,程式的效率也可以得到提升。比如說,如何實時的統計業務介面的99%響應時間?你可能最先想到,每次查詢時,從小到大排序所有的響應時間,如果總共有1200個資料,那第1188個資料就是99%的響應時間。很顯然,每次用這個方法查詢的話都需要排序,效率是非常低的。但是如果我們用“堆”這個資料結構,用兩個堆可以非常高效地解決這個問題。
-
再者就是個人追求相關。現在網際網路上的技術文章、架構、開源專案滿天飛,照貓畫虎搞一套基礎框架並不難,實現特定的需求也沒用那麼難。但是有的人做出來的框架,BUG很多,效能一般,擴充性也不好。有的人做的框架卻可以開源給那麼多人用。我覺得高手的競爭就是細節的競爭,沒人不想成為高手。而優秀的程式碼,優秀的框架往往就是很多細節堆砌起來的。而且掌握了資料結構和演算法,我看待問題的深度,解決問題的角度就會完全不一樣。大腦思考的能力是人最主要的核心競爭力,演算法就是很能鍛鍊思維的一種手段。
3. 怎麼樣衡量資料結構和演算法?
需要引入一個衡量的標準(metric)—時間複雜度和空間複雜度。
學習資料結構和演算法的基石,就是要學會“複雜度分析”。知道怎麼去分析複雜度,才能作出正確的判斷,在特定的場景下選用合適的正確的演算法。而不是盲目的死記爛背,機械操作。資料結構和演算法本身解決的是“快”和“省”的問題,即如何讓程式碼執行得更快,如何讓程式碼更省儲存空間。
相關文章
- 我們為什麼要學習資料結構和演算法?(一)資料結構演算法
- 《資料結構與演算法之美》為什麼要學習資料結構和演算法 (讀後感)資料結構演算法
- 為什麼要學資料結構?資料結構
- 為什麼演算法和資料結構重要?演算法資料結構
- 大資料和Hadoop什麼關係?為什麼大資料要學習Hadoop?大資料Hadoop
- 乾貨 | 學習大資料為什麼要先學Java?大資料Java
- 為什麼要學習Netty?Netty
- 為什麼要學習 RustRust
- 為什麼要學習 Julia
- 為什麼要學習 Vim?
- 資料結構和演算法-學習筆記(一)資料結構演算法筆記
- python演算法與資料結構-什麼是資料結構Python演算法資料結構
- 為什麼要學習Python?學習Python可以做什麼?Python
- 為什麼我要放棄javaScript資料結構與演算法(第二章)——陣列JavaScript資料結構演算法陣列
- 為什麼要學習Linux?學習Linux有什麼好處?Linux
- 學習資料結構與演算法心得資料結構演算法
- 如何學習資料結構和演算法——大佬文章彙總資料結構演算法
- 1-2 學習資料結構和演算法的用途資料結構演算法
- Python優勢是什麼?為什麼要學習?Python
- 為什麼要學習Linux系統?Linux
- 為什麼學習python要掌握Linux?PythonLinux
- 資料治理為什麼要清洗資料
- 為什麼學習Python資料分析Python
- 為什麼想成為 Geeker 的人要學習 JSJS
- 資料結構學習筆記-佛洛依德演算法資料結構筆記演算法
- 資料結構與演算法學習-陣列資料結構演算法陣列
- 資料結構與演算法學習-開篇資料結構演算法
- 學習JavaScript資料結構與演算法 (一)JavaScript資料結構演算法
- 資料結構和演算法學習筆記十六:紅黑樹資料結構演算法筆記
- 資料結構和演算法學習筆記九:最短路徑資料結構演算法筆記
- 資料結構與演算法學習總結--遞迴資料結構演算法遞迴
- 資料結構與演算法學習-連結串列下資料結構演算法
- 資料結構與演算法學習-連結串列上資料結構演算法
- 資料結構學習資料結構
- Linux是什麼系統?為什麼要學習Linux?Linux
- 為什麼要學習Python?Python可以做什麼事情?Python
- 什麼是Spring Boot?為什麼要學習Spring Boot?Spring Boot
- 為什麼要學習Linux?如何學習Linux技術?Linux