模塊一:方法論
01. 複雜度:如何衡量程序運行的效率?
複雜度細分爲時間複雜度和空間複雜度,其中,時間複雜度與代碼的結構設計高度相關;空間複雜度與代碼中數據結構的選擇高度相關。
02.數據結構:將昂貴的時間複雜度轉換爲廉價的空間複雜度
代碼效率優化的最終目標:採用儘可能低的時間複雜度和空間複雜度,去完成一段代碼的開發。
空間是廉價的,時間是昂貴的。
常用的降低時間複雜度的方法:遞歸、二分法、排序、動態規劃
降低空間複雜度的方法:更改數據結構,採用低複雜度的數據結構解決問題
降低複雜度的三個步驟:
第一步:暴力解法
第二步:無效操作處理:掌握遞歸,二分法,排序,動態規劃
第三步:時空轉換:需要對數據的操作進行細分,全面掌握常見的數據結構,再圍繞問題,有針對性的設計數據結構,採用合理的算法思維,不斷完成時空轉移,降低時間複雜度。
模塊二:數據結構基礎
03.增刪查:掌握數據處理的基本操作,以不變應萬變
要靈活使用數據結構,需要先弄清楚數據在代碼中被處理,加工的最小單位動作,也就是數據結構的基本操作,有了這些動作之後,你就可以基於此選擇更合適的數據結構了。
要設計合理的數據結構,從問題本身出發,思考順序:
首先,我們分析這段代碼到底對數據先後進行了哪些操作
然後,再根據分析出來的數據操作,找到合理的數據結構。
一些操作的理解:
- 找到要處理的數據(查找)
- 把結果存到一個新的內存空間中(增)
把結果存到一個已使用的內存空間中(先刪除內存空間中已有的數據,再新增新的數據)
我們發現,即便是很複雜的代碼,他對數據的處理也只有這3個基本操作:增,刪,查。
只要圍繞這3個數據處理的操作進行分析,就能得出解決問題的最優方案。