算法基礎簡單整理
-
排序算法html
-
選擇排序算法
- 每次選最小的放到最前面。一種naive的排序,沒有實際用途。
-
插入排序數組
- 每次將新的數據插在合適的位置。經過插入的方式在收到新數據時維護數據的順序,至關於把排序的損耗分散到數據輸入時。但單純用來排序是意義不大的。
-
希爾排序性能
- 一種優化的插入排序。按必定步長將數組分紅K組,在每組內進行插入排序;逐步縮小步長直至1。數據量比較小時性能比較好,但最壞時間複雜度還是O(N^2)的。
-
歸併排序優化
- 遞歸地將數組分紅兩部分排好序再合併。時間複雜度O(NlogN)。穩定的。
-
快速排序編碼
- 取一個數,將比這個數小的放左邊,大的放右邊;重複這一過程。不穩定。平均複雜度爲O(nlogn),最壞爲O(n^2)
-
堆排序.net
- 堆是一種徹底二叉樹:每一個結點的值都大於或等於其子節點的值,稱爲大頂堆。反之爲小頂堆。
- 將待排序序列構造爲一個大頂堆,取走根節點;將剩餘元素從新構造大頂堆;重複這一過程。
- 複雜度O(nlogn),不穩定
-
依賴數據範圍的排序算法htm
-
計數排序blog
- 數組長度是數據範圍,把全部數據放進去,天然排好序。複雜度O(n+k),其中k是數組長度。
-
基數排序排序
- 對k位數,每一位進行排序。複雜度是O(k*n),若是數據範圍爲N,十進制時k就是logN,大部分實際場景下N是int32或int64,這樣致使實際複雜度大於O(nlogn)。
-
桶排序
- 每一個桶對應必定的數據範圍,把數據放到不一樣的桶裏,而後對每一個桶內進行排序。
-
查找
- 二分查找:略
- 二叉樹:略
-
二叉排序樹(二叉查找樹/二叉搜索樹)
- 性質:左子樹全部節點都小於根節點,右子樹全部節點都大於根節點。
- 查找的平均複雜度是O(logn)的,這個跟通常的二分查找同樣;但它插入複雜度也是O(logn)的,這就是優勢了。
- 哈夫曼樹/哈夫曼編碼:參考https://blog.csdn.net/FX677588/article/details/70767446
-
平衡二叉樹
- 性質:左子樹和右子樹的深度之差不超過1
- 目的:爲了防止樹極度不平衡的極端場景出現
- 實現:AVL樹、紅黑樹
-
B樹
- 每一個節點最多有m-1個關鍵字;每一個節點的關鍵字從小到大排序,每一個關鍵字的左子樹中全部關鍵字都小於它,而右子樹中的全部關鍵字都大於它。
- 能夠理解爲二叉搜索樹的推廣形態。當m=2時,即二叉搜索樹。
- B+樹:B樹的推廣,內部節點不保存數據,只用於索引,全部數據都保存在葉子節點。
-
字典樹(Trie樹)
- 每一個節點表明一個字符,有相同前綴的單詞有公共的前綴節點。
- 查詢、插入複雜度都是O(L),L是字符串長度
- 散列表:略
-
字符串
-
字符串匹配KMP算法
- 相似狀態機的方式,參考字符串匹配的KMP算法
-
最長公共子串 / 最長公共子序列
- 都是dp,參考動態規劃:最長公共子串 & 最長公共子序列
-
圖
歡迎關注本站公眾號,獲取更多信息