You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
# 算法 和 数据结构
|
|
|
|
|
|
|
|
|
|
## 线性查找法
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 排序基础
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 数据结构基础:动态数组,栈和队列
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 动态数据结构基础:链表
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 归并排序法
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 快速排序法
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 二分查找法
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 二分搜索树
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 堆,优先队列和堆排序
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 冒泡排序,希尔排序和排序算法大总结
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 线段树,Trie 和并查集
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## AVL 树和红黑树
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 哈希表和 SQRT 分解
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 非比较排序
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 模式匹配
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 随机算法,外存算法和更多
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 实战
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 前缀树 - 字典树 Trie 的应用
|
|
|
|
|
- Web框架中如何实现路由匹配?
|
|
|
|
|
|
|
|
|
|
#### 路由匹配
|
|
|
|
|
- 一个好用的 Web 框架,要能尽可能快地解析请求 URL 并映射到不同 API 的处理逻辑,也就是我们常说的“路由匹配”。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 动态路由
|
|
|
|
|
- 如何保存路由和处理方法的对应关系呢?
|
|
|
|
|
- 不采用 HashMap 来存储路由表,因为利用哈希表存储的路由和处理逻辑的关系,只能用来索引静态路由,也就是路由中没有动态参数的路由,比如
|
|
|
|
|
/user/enabletime.xxx.org/hybrid/pvip ,这样的路由,路径是明确的,一个路由只有一种可能性
|
|
|
|
|
- 动态路由如何实现呢?方式有很多种,可以用正则表达式匹配来实现,另一种更常用的方式就是我们要重点学习的 Trie 树。
|
|
|
|
|
|
|
|
|
|
#### Trie 树总结
|
|
|
|
|
- Trie 树,也称为前缀树或者字典树,是一种常用的维护字符串集合的数据结构
|
|
|
|
|
- 能用来做 排序、保存、查询 字符串
|
|
|
|
|
- 常用场景比如搜索引擎关键词匹配、路由匹配、词频统计和字符串排序等
|
|
|
|
|
- EMQ X 也有用到相关的数据结构来实现 MQTT 协议路由表
|
|
|
|
|
- Trie 树主要的特点和优势都建立基于前缀的树状存储方式上
|
|
|
|
|
- 相比于 treemap 来说,trie 树存储的开销要小得多,并且因为它天然的前缀匹配和排序的特性,在很多时候也能帮助我们更快检索数据。
|
|
|
|
|
|
|
|
|
|
#### 前缀树实现
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|