「在主串里找模式串」是编译器、搜索引擎、IDS、日志管道里的高频问题。教材常按 KMP、BM 顺序讲;工程里还要考虑多模式、流式、SIMD、模糊纠错。本页按场景串联本站文章,方便从 Google 搜索「字符串匹配算法」「KMP」「BM 算法」直达正确深度文。
一、按场景选型
| 场景 | 推荐算法 / 结构 | 本站文章 |
|---|---|---|
| 单模式、最坏 \(O(n)\) 保证 | KMP | KMP 与 Boyer-Moore |
| 单模式、文本随机、追求平均最快 | Boyer-Moore(BM) | KMP 与 Boyer-Moore |
| 多模式、文本扫一遍 | Aho-Corasick | AC 自动机 |
| 多模式哈希、实现简单 | Rabin-Karp / 滚动哈希 | 字符串哈希 |
| 静态文本、大量不同查询 | 后缀数组 / FM-index | 后缀数组、BWT/FM-index |
| 超长文本 SIMD 扫描 | SIMD 字符串 | SIMD 字符串处理 |
| 拼写纠错、编辑距离 | DP / 模糊匹配 | 编辑距离 |
| 正则引擎 | NFA/DFA、ReDoS | 正则与性能 |
二、单模式:KMP vs Boyer-Moore vs Rabin-Karp
- KMP:失配时利用已匹配前缀,不回溯文本指针;最坏 \(O(n+m)\),实现比 BM 稳。
- Boyer-Moore(BM):从模式尾部比较,坏字符 / 好后缀规则大幅跳过;随机英文文本常最快。
- Rabin-Karp:滚动哈希;单模式略慢于 BM,但扩展多模式、二维匹配、内容分块更自然。
深度实现与对比见 KMP 与 Boyer-Moore 详解(含 Sunday 变体与代码)。
Rabin-Karp 工程篇 含与 KMP/BM 的 benchmark 表。
三、推荐阅读路径
工程 / 日志 / 安全: AC 自动机 → SIMD 字符串
生物信息 / 静态索引:后缀数组 → BWT/FM-index
自然语言 / 纠错:编辑距离 → Unicode 文本陷阱
四、与分布式系统的交叉
返回 算法工程索引
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
字符串匹配算法:KMP 与 Boyer-Moore(BM)详解
KMP、Boyer-Moore(BM 算法)字符串匹配:暴力法对比、失配函数、Sunday 变体与工程性能——字符串匹配算法选型必读。
算法工程索引
汇总本站算法工程相关文章,覆盖排序、哈希、树、字符串、近似数据结构、SIMD、随机化与编译器相关算法。
排序算法专题:从 TimSort 到并行排序
把 TimSort、pdqsort、radix sort、external sort、parallel sort 与 benchmark 串成一条阅读路径。先读哪篇、什么时候选哪种排序,这一页讲清。
SIMD 加速字符串查找(strchr / strstr)系统指南
面向工程实践的SIMD字符串查找优化完全指南:SSE2/AVX2/AVX-512并行比较原理,位掩码技巧,跨块与页边界安全处理,strchr/strstr高性能实现,包含完整代码示例和性能陷阱分析