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)數據結構
時間複雜度O(n), 空間複雜度O(1)編程語言
時間複雜度O(n), 空間複雜度O(1)函數
操做時間複雜度O(1), 空間複雜度O(1)
最好時間複雜度O(n), 最壞時間複雜度O(n^2), 平均時間複雜度O(n^2), 空間複雜度O(1)
最好時間複雜度O(n^2), 最壞時間複雜度O(n^2), 平均時間複雜度O(n^2), 空間複雜度O(1)
最好時間複雜度O(nlogn), 最壞時間複雜度O(nlogn), 平均時間複雜度O(nlogn), 空間複雜度O(n)
時間複雜度O(n), 空間複雜度O(n)
最好時間複雜度O(nlogn), 最壞時間複雜度O(n^2), 平均時間複雜度O(nlogn), 空間複雜度O(1)
時間複雜度O(n), 空間複雜度O(1)
分區函數算法示意圖
時間複雜度O(logn), 空間複雜度O(1)
時間複雜度O(logn), 空間複雜度O(1)
查找第一個值等於給定值的元素 ✓
查找最後一個值等於給定值的元素 ✓
查找第一個大於等於給定值的元素 ✓
查找最後一個小於等於給定值的元素 ✓
特色:
時間複雜度O(1), 空間複雜度O(n)
時間複雜度O(logn), 空間複雜度O(1)
時間複雜度O(logn), 空間複雜度O(1)
時間複雜度O(logn), 空間複雜度O(1)
時間複雜度O(n*logn), 空間複雜度O(1)
插入, 刪除, 查找時間複雜度O(n), 空間複雜度根前綴重合度有關.
實現多模式串匹配算法, 時間複雜度O(n), 空間複雜度O(1)
時間複雜度: 性能是KMP算法的3-4倍, 最壞時間複雜度是O(n), 3n-5n;
複雜度推導: 實在太複雜, 能力有限, 有興趣能夠看附件推薦的論文; 下面給出代碼實現中兩個重要數組的示意圖, 用於大幅提高算法性能.
時間複雜度O(n+m), n是主串長度, m是模式串長度. KMP算法的核心預處理數組以下示意圖