1. 位图概述
- 概念
- 一种“特殊”的散列表
- 通过数组下标来定位数据,访问效率非常高
- 每个数字用一个二进制位来表示,数字范围不大的情况下,需要的内存空间非常节省
2. 字符串匹配算法概述
单模式串算法
BM 算法
概念
- 利用模式串本身的特点,在模式串中某个字符与主串不能匹配的时候,将模式串往后多滑动几位,以此来减少不必要的字符比较,提高匹配的效率
实现
- 好后缀规则和坏字符规则
- 好后缀规则可以独立于坏字符规则使用
- 坏字符规则的实现比较耗内存,为了节省内存,只用好后缀规则来实现 BM 算法
KMP 算法
- 概念
- 根据规律在遇到坏字符的时候,把模式串往后多滑动几位
- 和 BM 算法的本质非常类似
- 概念
多模式串算法
AC 自动机
概念
- 在 Trie 树之上,加了类似 KMP 的 next 数组,只不过此处的 next 数组是构建在树上
实现
- 将多个模式串构建成 Trie 树,在 Trie 树上构建失败指针
- 在 AC 自动机中匹配主串
3. 红黑树概述
概念
- 一种大致平衡的二叉查找树,一类被标记为黑色,一类被标记为红色
- 一种性能非常稳定的二叉查找树
概念辨析
- 根节点是黑色的
- 每个叶子节点都是黑色的空节点(NIL),即叶子节点不存储数据
- 任何相邻的节点都不能同时为红色,即红色节点是被黑色节点隔开的
- 每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数组的黑色节点
实现
- 按照固定的操作步骤,保持插入、删除的过程,不破坏平衡树的定义即可
- 找准关注节点,不要搞丢、搞错关注节点
- 插入操作的平衡调整比较简单,删除操作就比较复杂
操作
基础操作
- 左旋和右旋
插入操作
- 原则:插入的节点必须是红色的,二叉查找树中新插入的节点都放在叶子节点上
- 如果插入节点的父节点是黑色的,那什么都不用做;如果插入的节点是根节点,那直接改变它的颜色,把它变成黑色
删除操作
- 针对删除节点初步调整
- 针对关注节点进行二次调整
应用
- 在工程中,但凡用到动态插入、删除、查找数据的场景,都可以用红黑树
- 实现起来比较复杂,很多场景可以用跳表来替代红黑树
4. 哈希算法概述
概念
- 将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法
- 通过原始数据映射之后得到的二进制值串就是哈希值
设计步骤
- 从哈希值不能反向推导出原始数据
- 对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大不相同
- 散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小
- 哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值
应用
- 安全加密,唯一标识,数据校验,散列函数,负载均衡,数据分片,分布式存储