{"name":"字符串","id":"算法与数据结构-字符串","content":"# 字符串算法：原理、体系与设计哲学\n\n## 一、字符串计算的统一抽象\n\n字符串并不是普通的可比较对象，而是一种：\n\n> **由有限字符集构成的、有序符号序列，天然具备前缀结构与状态演进特性**。\n\n围绕这一事实，几乎所有字符串算法都可以归入四种稳定的计算范式。\n\n### 1. 四大核心计算范式\n\n| 计算范式 | 本质抽象      | 解决的问题       | 典型算法                |\n| ---- | --------- | ----------- | ------------------- |\n| 序列排序 | 按位分解与分桶   | 全序排列        | LSD / MSD / 三向字符串快排 |\n| 前缀索引 | 前缀共享、树化存储 | 快速查找 / 自动补全 | Trie / TST          |\n| 模式匹配 | 状态迁移与跳跃   | 子串定位        | KMP / BM / AC       |\n| 信息压缩 | 概率建模与冗余消除 | 空间最优编码      | Huffman / LZW       |\n\n> 后续所有算法，都是对上述范式的不同工程化实现。\n\n---\n\n## 二、字符串排序：从“整体比较”到“按位认知”\n\n### 1. 设计动机\n\n通用比较排序假设：\n\n* 比较代价恒定\n\n而字符串排序的真实情况是：\n\n* 比较代价 ∝ 公共前缀长度\n\n因此，字符串排序必须**利用字符位置这一结构性信息**。\n\n---\n\n### 2. 低位优先排序（LSD）\n\n**核心思想：**\n\n> 将字符串视为定长向量，从最低位到最高位进行稳定排序。\n\n**抽象特征：**\n\n* 基于分配（而非比较）\n* 强依赖稳定性\n* 适用于等长字符串\n\n**本质：**\n\n> 用空间换时间，将多字符比较拆解为多次单字符分类。\n\n---\n\n### 3. 高位优先排序（MSD）\n\n**核心思想：**\n\n> 从最高位开始，根据前缀递归划分子问题。\n\n**设计哲学：**\n\n* 前缀越短，越早分流\n* 子问题规模快速收缩\n\n**工程权衡：**\n\n* 小子问题切换插入排序\n\n---\n\n### 4. 三向字符串快速排序\n\n**本质抽象：**\n\n> 将快速排序的“三向切分”思想迁移到字符维度。\n\n**优势：**\n\n* 特别适合大量重复前缀\n* 比 MSD 更节省空间\n\n**统一视角：**\n\n> 排序的本质不是比较大小，而是**信息逐步显露的过程**。\n\n---\n\n## 三、前缀索引结构：Trie 与 TST\n\n### 1. Trie：前缀共享的极致体现\n\n**第一性原理：**\n\n> 字符串集合的公共前缀是可压缩的结构性信息。\n\n**本质模型：**\n\n* 字符 = 边\n* 前缀 = 路径\n* 单词 = 根到节点的状态\n\n**能力特征：**\n\n* 查找时间与字符串长度相关\n* 与键数量弱相关\n\n---\n\n### 2. Trie 的工程问题与优化\n\n**核心问题：**\n\n* 空间占用与字符集规模成正比\n\n**稳定优化思想：**\n\n* 路径压缩（缩点）\n\n> 优化的不是算法，而是**信息冗余**。\n\n---\n\n### 3. 三向单词查找树（TST）\n\n**折中哲学：**\n\n> 在时间与空间之间寻找连续谱上的平衡点。\n\n**结构特征：**\n\n* 节点存字符\n* 三条指针（小 / 等 / 大）\n\n**对比视角：**\n\n* Trie：空间换时间\n* TST：时间换空间\n\n---\n\n## 四、子字符串查找：从暴力到状态机\n\n### 1. 问题本质\n\n> 在一个长序列中，寻找一个模式序列的首次出现位置。\n\n核心挑战：\n\n* 如何避免重复比较\n\n---\n\n### 2. 暴力算法：基线模型\n\n**意义：**\n\n* 提供正确性参考\n* 暴露性能瓶颈\n\n**瓶颈本质：**\n\n> 已知信息未被复用。\n\n---\n\n### 3. KMP：前缀函数与失败跳转\n\n**核心思想：**\n\n> 利用模式串自身的结构，构建失败时的最优回退位置。\n\n**抽象模型：**\n\n* 模式串 = 有限状态自动机\n* next 数组 = 状态迁移表\n\n---\n\n### 4. BM：最大化跳跃\n\n**反直觉设计：**\n\n> 从右向左匹配。\n\n**两条稳定规则：**\n\n* 坏字符规则\n* 好后缀规则\n\n**哲学本质：**\n\n> 利用“已知不匹配”信息，尽可能多跳。\n\n---\n\n### 5. RK：概率换速度\n\n**核心思想：**\n\n> 用哈希指纹近似比较。\n\n**本质权衡：**\n\n* 小概率错误\n* 极高平均性能\n\n---\n\n### 6. AC 自动机：多模式的统一解\n\n**本质：**\n\n> Trie + KMP\n\n**抽象升级：**\n\n* 从“字符串”到“模式集合”\n* 从比较到自动机运行\n\n---\n\n## 五、正则表达式：字符串的代数系统\n\n**稳定认知：**\n\n> 正则表达式不是语法，而是**形式语言的代数表示**。\n\n### 三种基本构造\n\n* 连接\n* 或\n* 闭包\n\n**底层统一模型：**\n\n* 正则表达式 ⇄ 有限自动机\n\n---\n\n## 六、数据压缩：信息论视角下的字符串\n\n### 1. 压缩的第一性原理\n\n> 压缩 = 消除冗余 + 利用概率偏置。\n\n---\n\n### 2. RLE：局部重复消除\n\n* 利用连续性\n* 适合低熵数据\n\n---\n\n### 3. Huffman：最优前缀码\n\n**稳定结论：**\n\n> 频率越高，编码越短。\n\n**本质：**\n\n* 概率模型\n* 前缀无歧义\n\n---\n\n### 4. LZW：自解释字典\n\n**核心哲学：**\n\n> 编码本身即是模型。\n\n* 不传输字典\n* 编码过程即建模过程\n\n---\n\n## 七、字符串算法的统一哲学总结\n\n1. 用结构对抗规模（Trie / 自动机）\n2. 用预处理换查询效率（KMP / BM）\n3. 用概率近似换确定成本（RK / 压缩）\n4. 用状态机统一复杂逻辑（正则 / AC）\n\n> **真正稳定的不是算法，而是这些思想。**\n\n## 关联内容（自动生成）\n\n- [/算法与数据结构/基本数据结构.md](/算法与数据结构/基本数据结构.md) 基本数据结构是字符串数据结构的基础，理解基本数据结构有助于深入理解字符串算法的实现原理\n- [/算法与数据结构/散列表.md](/算法与数据结构/散列表.md) 散列表与字符串算法在查找和存储方面有相似之处，特别是字符串哈希算法的应用\n- [/算法与数据结构/图.md](/算法与数据结构/图.md) 图算法与字符串算法在某些场景下有交集，如后缀自动机构建等高级字符串处理技术\n- [/编译原理/编译原理.md](/编译原理/编译原理.md) 编译原理中的词法分析与字符串算法密切相关，特别是正则表达式和自动机理论的应用\n- [/中间件/数据库/redis/数据结构.md](/中间件/数据库/redis/数据结构.md) Redis中的字符串数据结构实现与字符串算法原理相关，体现了工程实践中的字符串处理优化\n- [/计算机网络/http/HTTP.md](/计算机网络/http/HTTP.md) HTTP协议中使用了哈夫曼编码等字符串压缩算法，体现了字符串算法在实际协议中的应用\n- [/数据技术/检索技术.md](/数据技术/检索技术.md) 检索技术中大量使用字符串匹配算法，如KMP、BM等，用于文本检索和处理\n- [/中间件/数据库/ElasticSearch.md](/中间件/数据库/ElasticSearch.md) ES中的文本分析和分词处理涉及字符串算法，特别是正则表达式分析器的应用\n- [/中间件/数据库/数据类型.md](/中间件/数据库/数据类型.md) 数据库中的字符串类型处理与字符串算法密切相关，涉及存储和检索优化策略\n","metadata":"tags: ['数据结构与算法', '数据结构', '模式匹配']","hasMoreCommit":false,"totalCommits":10,"commitList":[{"date":"2026-02-24T16:31:16+08:00","author":"MY","message":"docs(DSL): 移除正则表达式文档并更新相关引用","hash":"f441087334e8941816736ac9f023d734c42d39c6"},{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2025-12-29T11:39:35+08:00","author":"MY","message":"docs(字符串算法): 重构字符串算法文档结构并添加计算范式分析","hash":"8471359dc178df0c5a1e818361edbe26e6e471f4"},{"date":"2024-02-26T19:42:15+08:00","author":"MY","message":"✏算法","hash":"d5fb62fdbd3a50125f819ecf0d2ca8e1b6868d28"},{"date":"2024-02-23T17:34:36+08:00","author":"MY","message":"✏字符串","hash":"6cadacd85f899a958294f14d642dfce098d4361f"},{"date":"2023-03-09T09:41:00Z","author":"My","message":"🛠替换在线图片","hash":"0c8b08bc22fbe482ba02da2f1fcad211441d3c23"},{"date":"2022-07-13T14:17:35+08:00","author":"cjiping","message":"✏️更新 trie","hash":"5dc09852098380a664db931c7c36ab6b3de5442e"},{"date":"2022-07-09T15:26:49+08:00","author":"MY","message":"✏️更新 算法","hash":"2d8ca900074aa66c48b668e03cc082547eae7449"},{"date":"2019-12-06T21:20:51+08:00","author":"0xcaffebabe","message":"新增正则表达式与压缩算法","hash":"e09b5aeeda9e2ffdf002249606b4843a36d54b63"},{"date":"2019-12-05T21:21:45+08:00","author":"0xcaffebabe","message":"新增了几个关于字符串的算法与数据结构","hash":"bb085afff221c8a2c964b2a7d66993055fd57d5d"}],"createTime":"2019-12-05T21:21:45+08:00"}