資料結構與算法系列一(開篇)
阿新 • • 發佈:2020-02-19
1.引子
1.1.為什麼要學習資料結構與演算法?
有人說,資料結構與演算法,計算機網路,與作業系統都一樣,脫離日常開發,除了面試這輩子可能都用不到呀!
有人說,我是做業務開發的,只要熟練API,熟練框架,熟練各種中介軟體,寫的程式碼不也能“飛”起來嗎?
於是問題來了:為什麼還要學習資料結構與演算法呢?
#理由一: 面試的時候,千萬不要被資料結構與演算法拖了後腿 #理由二: 你真的願意做一輩子CRUD Boy嗎 #理由三: 不想寫出開源框架,中介軟體的工程師,不是好廚子
1.2.如何系統化學習資料結構與演算法?
我想好了,還是需要學習資料結構與演算法。但是我有兩個困惑:
1.如何著手學習呢?
2.有哪些內容要學習呢?
學習方法推薦:
#學習方法 1.從基礎開始,系統化學習 2.多動手,每一種資料結構與演算法,都自己用程式碼實現出來 3.思路更重要:理解實現思想,不要背程式碼 4.與日常開發結合,對應應用場景
學習內容推薦:
資料結構與演算法內容比較多,我們本著實用原則,學習經典的、常用的資料結構、與常用演算法
#學習內容: 1.資料結構的定義 2.演算法的定義 3.複雜度分析 4.常用資料結構 陣列、連結串列、棧、佇列 散列表、二叉樹、堆 跳錶、圖 5.常用演算法 遞迴、排序、二分查詢 搜尋、雜湊、貪心、分治 動態規劃、字串匹配
2.考考你
#考考你: 1.你能用自己的話給資料結構下定義嗎? 2.你能用自己的話給演算法下定義嗎? 3.你知道複雜度分析嗎? 4.你知道時間複雜度分析嗎? 5.你知道空間複雜度分析嗎? 6.你知道大O表示法的含義嗎?
3.討論分享
#考考你答案: 1.你能用自己的話給資料結構下定義嗎? 1.1.資料結構,就是【儲存資料】的結構 1.2.比如:圖書館將書籍分類、按照規律編號儲存 1.3.那麼按照規律編號,就是“書籍資料”的儲存結構 2.你能用自己的話給演算法下定義嗎? 2.1.演算法,就是【操作資料】的方法 2.2.比如:你要找書,一本一本的找是演算法 2.3.比如:你要找書,根據書籍的分類找也是演算法 3.你知道複雜度分析嗎? 3.1.資料結構與演算法核心二字決:快、省 3.2.快,是指執行效率要高 3.3.省,是指消耗的空間要少 3.4.通過複雜度分析,可以衡量演算法的執行效率 3.5.通過複雜度分析,可以衡量演算法的空間消耗 4.你知道時間複雜度分析嗎? 4.1.【時間】複雜度分析,用於衡量演算法的執行效率 5.你知道空間複雜度分析嗎? 5.1.【空間】複雜度分析,用於衡量演算法的空間消耗 6.你知道大O表示法的含義嗎? 6.1.大O表示法:時間複雜度,表示資料規模的增長,與演算法執行時間的增長趨勢 6.2.大O表示法:空間複雜度,表示資料規模的增長,與演算法儲存空間的增長趨勢 6.3.大O表示法公式:T(n)=O(f(n)) 6.4.公式解讀: T(n):代表程式碼執行時間 n:代表資料規模 f(n):代表每行程式碼執行的次數總和 O:表示程式碼執行時間T(n),與程式碼執行次數f(n)成正比 6.5.栗子: public int sum(int n){ int sum = 0; for(int i=1;i<=n;i++){ sum +=i; } return sum; } a.以上程式碼時間複雜度是:O(n) b.大O表示法公式:T(n)=O(f(n)) c.由於f(n)是一個線性函式,推匯出:T(n)=O(n)
&n