為什麼要學習資料結構和演算法?

查爾斯二兩發表於2020-11-30

1. 什麼是資料結構和演算法?

資料結構,就是一組資料的儲存結構。
演算法,就是運算元據的一組方法。
資料結構是為演算法服務的,演算法要作用在特定的資料結構之上。
 

2. 為什麼需要資料結構和演算法?

應用層面的原因:在電腦科學和網際網路迅猛發展下,需要計算的資料量越來越龐大。但是計算機的計算能力是有限的,這麼大量的資料計算,需要越來越多的計算機,需要越來越長的計算時間,注重效率的我們需要儘可能的提高計算效率。其中重要的一項,就是使用合適的資料結構和演算法。選用合適的資料結構和演算法,特別是在處理體量非常龐大的資料的時候,可以極大提高計算效率。

個人層面的原因:

  1. 首先,學習演算法和資料結構的目的是讓程式設計師建立時間複雜度、空間複雜度的意識,寫出更高質量的程式碼,效能好壞是其中非常重要的一個評判指標。因為計算機可用的計算資源是有限的,我們當然期盼使用最少的資源來達到最優的效能。就比如說,為了達到發電的這個目的,我們可以燒煤,也可以用風力發電。但是風力發電是更被提倡的,就是為了減少對地球的負擔。那麼特別是對於資料量非常大的應用場景,面對上億級別的使用者,我們就更需要優化程式碼的質量,設計優秀的基礎架構來最大化的利用裝置的計算資源。

  2. 其次,掌握這些底層原理能幫助我們在寫程式碼的時候少犯錯誤,在使用一些庫類的時候,即使出現問題也能更快的定位。而且能夠提升工作的效率。此外,程式的效率也可以得到提升。比如說,如何實時的統計業務介面的99%響應時間?你可能最先想到,每次查詢時,從小到大排序所有的響應時間,如果總共有1200個資料,那第1188個資料就是99%的響應時間。很顯然,每次用這個方法查詢的話都需要排序,效率是非常低的。但是如果我們用“堆”這個資料結構,用兩個堆可以非常高效地解決這個問題。

  3. 再者就是個人追求相關。現在網際網路上的技術文章、架構、開源專案滿天飛,照貓畫虎搞一套基礎框架並不難,實現特定的需求也沒用那麼難。但是有的人做出來的框架,BUG很多,效能一般,擴充性也不好。有的人做的框架卻可以開源給那麼多人用。我覺得高手的競爭就是細節的競爭,沒人不想成為高手。而優秀的程式碼,優秀的框架往往就是很多細節堆砌起來的。而且掌握了資料結構和演算法,我看待問題的深度,解決問題的角度就會完全不一樣。大腦思考的能力是人最主要的核心競爭力,演算法就是很能鍛鍊思維的一種手段
     

3. 怎麼樣衡量資料結構和演算法?

需要引入一個衡量的標準(metric)—時間複雜度和空間複雜度。
學習資料結構和演算法的基石,就是要學會“複雜度分析”。知道怎麼去分析複雜度,才能作出正確的判斷,在特定的場景下選用合適的正確的演算法。而不是盲目的死記爛背,機械操作。資料結構和演算法本身解決的是“快”和“省”的問題,即如何讓程式碼執行得更快,如何讓程式碼更省儲存空間。

相關文章