Swift通用算法庫

DSA

Data Structure & Algorithm, 算法之美, Swift語言實現.git

代碼還在更新中, 都是提高技術的必修算法知識, 喜歡的朋友能夠start一下. 項目地址: github.com/cocos543/DS…github

安裝方法算法

下載代碼, 打開 DSA.xcworkspace , 運行AlgorithmDemo target便可, 或者運行DSA_SwiftTests中的測試用例.
其中DSA工程編譯以後會生成 DSA.framework, 可獨立使用.
複製代碼

說明編程

1. 複雜度分析時, 因爲編程語言的差別, 當兼容OC時, Swift沒法使用inout關鍵字, 致使數組會產生copy, 和算法無關, 空間複雜度分析時忽略該因素
2. 因爲要兼容OC, 沒法使用Swift的泛型編程, 所以庫中傳入的數據均爲Any類型, OC對應類型爲id
3. 代碼持續更新中, bug持續修復中...
複製代碼

實現必修的數據結構與算法

目錄

目錄最後補上
複製代碼

單向鏈表

鏈表常見操做

  • 反轉單向鏈表 ✓

時間複雜度O(n), 空間複雜度O(1)swift

  • 鏈表中環的檢測 ✓

時間複雜度O(n), 空間複雜度O(1)數組

  • 合併兩個有序鏈表 ✓

時間複雜度O(n), 空間複雜度O(1)數據結構

  • 刪除鏈表倒數第N個節點 ✓

時間複雜度O(n), 空間複雜度O(1)編程語言

  • 求鏈表的中間節點 ✓

時間複雜度O(n), 空間複雜度O(1)函數

雙向鏈表

棧存儲結構

隊列

操做時間複雜度O(1), 空間複雜度O(1)

排序

穩定的排序算法

最好時間複雜度O(n), 最壞時間複雜度O(n^2), 平均時間複雜度O(n^2), 空間複雜度O(1)

image

最好時間複雜度O(n^2), 最壞時間複雜度O(n^2), 平均時間複雜度O(n^2), 空間複雜度O(1)

image

最好時間複雜度O(nlogn), 最壞時間複雜度O(nlogn), 平均時間複雜度O(nlogn), 空間複雜度O(n)

image

時間複雜度O(n), 空間複雜度O(n)

不穩定的排序算法

最好時間複雜度O(nlogn), 最壞時間複雜度O(n^2), 平均時間複雜度O(nlogn), 空間複雜度O(1)

image

時間複雜度O(n), 空間複雜度O(1)

分區函數算法示意圖

image

查找

二分查找

時間複雜度O(logn), 空間複雜度O(1)

image

時間複雜度O(logn), 空間複雜度O(1)

四種二分查找的變形算法

  1. 查找第一個值等於給定值的元素 ✓

  2. 查找最後一個值等於給定值的元素 ✓

  3. 查找第一個大於等於給定值的元素 ✓

  4. 查找最後一個小於等於給定值的元素 ✓

哈希表

衝突解決方式

特色:

  1. 支持動態擴容策略
  2. 性能穩定, 每次刪除, 插入, 查詢的時間複雜度都是O(1)
  3. 合理使用內存空間, 不浪費

時間複雜度O(1), 空間複雜度O(n)

image

  1. 動態生成滿二叉樹 ✓
  2. 可視化打印滿二叉樹 ✓
  3. 二叉樹前中後序遍歷(遞歸) ✓
  4. 層序遍歷 ✓
  5. 檢測二叉樹深度 ✓

image

  1. 查找, 插入, 刪除 (假設元素不重複) ✓

時間複雜度O(logn), 空間複雜度O(1)

image

  1. 插入數據 ✓

時間複雜度O(logn), 空間複雜度O(1)

  1. 刪除堆頂 ✓

時間複雜度O(logn), 空間複雜度O(1)

  1. 堆排序 ✓

時間複雜度O(n*logn), 空間複雜度O(1)

image
image
image

插入, 刪除, 查找時間複雜度O(n), 空間複雜度根前綴重合度有關.

  1. 子節點使用哈希表存儲
  2. 支持任意字符構建字典樹
  3. 支持字符串增刪查找

image

實現多模式串匹配算法, 時間複雜度O(n), 空間複雜度O(1)

  1. 基於trie樹實現
  2. 支持多模式串匹配, 可用於關鍵詞過濾

存儲結構

image

圖的搜索

字符串

時間複雜度: 性能是KMP算法的3-4倍, 最壞時間複雜度是O(n), 3n-5n;

複雜度推導: 實在太複雜, 能力有限, 有興趣能夠看附件推薦的論文; 下面給出代碼實現中兩個重要數組的示意圖, 用於大幅提高算法性能.

image
image

時間複雜度O(n+m), n是主串長度, m是模式串長度. KMP算法的核心預處理數組以下示意圖

image

回溯算法

動態規劃

附件

相關文章
相關標籤/搜索