算法基礎簡單整理

  1. 排序算法html

    1. 選擇排序算法

      • 每次選最小的放到最前面。一種naive的排序,沒有實際用途。
    2. 插入排序數組

      • 每次將新的數據插在合適的位置。經過插入的方式在收到新數據時維護數據的順序,至關於把排序的損耗分散到數據輸入時。但單純用來排序是意義不大的。
      • 希爾排序性能

        • 一種優化的插入排序。按必定步長將數組分紅K組,在每組內進行插入排序;逐步縮小步長直至1。數據量比較小時性能比較好,但最壞時間複雜度還是O(N^2)的。
    3. 歸併排序優化

      • 遞歸地將數組分紅兩部分排好序再合併。時間複雜度O(NlogN)。穩定的。
    4. 快速排序編碼

      • 取一個數,將比這個數小的放左邊,大的放右邊;重複這一過程。不穩定。平均複雜度爲O(nlogn),最壞爲O(n^2)
    5. 堆排序.net

      • 堆是一種徹底二叉樹:每一個結點的值都大於或等於其子節點的值,稱爲大頂堆。反之爲小頂堆。
      • 將待排序序列構造爲一個大頂堆,取走根節點;將剩餘元素從新構造大頂堆;重複這一過程。
      • 複雜度O(nlogn),不穩定
    6. 依賴數據範圍的排序算法htm

      1. 計數排序blog

        1. 數組長度是數據範圍,把全部數據放進去,天然排好序。複雜度O(n+k),其中k是數組長度。
      2. 基數排序排序

        1. 對k位數,每一位進行排序。複雜度是O(k*n),若是數據範圍爲N,十進制時k就是logN,大部分實際場景下N是int32或int64,這樣致使實際複雜度大於O(nlogn)。
      3. 桶排序

        1. 每一個桶對應必定的數據範圍,把數據放到不一樣的桶裏,而後對每一個桶內進行排序。
  2. 查找

    1. 二分查找:略
    2. 二叉樹:略
    3. 二叉排序樹(二叉查找樹/二叉搜索樹)

      1. 性質:左子樹全部節點都小於根節點,右子樹全部節點都大於根節點。
      2. 查找的平均複雜度是O(logn)的,這個跟通常的二分查找同樣;但它插入複雜度也是O(logn)的,這就是優勢了。
    4. 哈夫曼樹/哈夫曼編碼:參考https://blog.csdn.net/FX677588/article/details/70767446
    5. 平衡二叉樹

      • 性質:左子樹和右子樹的深度之差不超過1
      • 目的:爲了防止樹極度不平衡的極端場景出現
      • 實現:AVL樹、紅黑樹
    6. B樹

      • 每一個節點最多有m-1個關鍵字;每一個節點的關鍵字從小到大排序,每一個關鍵字的左子樹中全部關鍵字都小於它,而右子樹中的全部關鍵字都大於它。
      • 能夠理解爲二叉搜索樹的推廣形態。當m=2時,即二叉搜索樹。
      • B+樹:B樹的推廣,內部節點不保存數據,只用於索引,全部數據都保存在葉子節點。
    7. 字典樹(Trie樹)

      • 每一個節點表明一個字符,有相同前綴的單詞有公共的前綴節點。
      • 查詢、插入複雜度都是O(L),L是字符串長度
    8. 散列表:略
  3. 字符串

    1. 字符串匹配KMP算法

      1. 相似狀態機的方式,參考字符串匹配的KMP算法
    2. 最長公共子串 / 最長公共子序列

      1. 都是dp,參考動態規劃:最長公共子串 & 最長公共子序列
    • 待補充
相關文章
相關標籤/搜索