Skip to content
master
Go to file
Code

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
Jun 10, 2019
DSA
New
Jul 2, 2019
May 28, 2019
May 28, 2019

README.md

文档更新说明

  • 最后更新 2019年07月02日
  • 首次更新 2019年05月22日

DSA

Data Structure & Algorithm, 算法之美, Swift语言实现

安装方法

下载代码, 打开 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)

  • 链表中环的检测 ✓

时间复杂度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

回溯算法

动态规划

附件

About

Data Structure & Algorithm, Swift通用算法库

Topics

Resources

License

Releases

No releases published

Packages

No packages published
You can’t perform that action at this time.