“KMP 解决的是单模式精确匹配。字符相等关系必须稳定,文本流中的每个符号一旦处理便不再回看;若问题允许编辑距离、通配符或完整正则语义,状态需要同时表达更多可能位置,不能只把 换成一个宽松谓词…”
形式陈述 ​
Trie(前缀树)以根表示空串,边标记字母;从根沿路径读出的串对应前缀,终止标记指出哪些前缀本身是已存单词。插入、查询和删除一个长度
直觉
Trie 按字符逐层共享公共前缀,把字符串比较逐字符展开成树导航,避免重复存储相同前缀。从根到某节点的路径标签就是一个前缀,终止标记区分“某词到此结束”和“只是更长词的前缀”。查询时间与键长度成正比而不直接依赖词典大小,代价是节点与稀疏子指针可能占用大量内存。它利用的是字母表结构,不是键的全序比较。
例子与边界
插入 to,tea,ten 时,三个词共享首字符 t,后两者继续共享 te。查询 te 能走到节点但若没有终止标记,就不能判定它是已存单词;前缀查询则可返回其子树中所有词。
字符编码粒度必须一致:按 UTF-8 字节建树与按 Unicode 字符建树会有不同深度和边标签。操作为
推论与应用
词与树定义前缀路径。自动补全、词频和路由最长前缀匹配使用字符 Trie;Aho–Corasick 再加入失败链接实现多模式匹配。二进制 Trie 与 Patricia Trie把整数按 bit 导航,并压缩单分支路径,复杂度通常依赖字长
x-fast/y-fast Trie进一步在 Word-RAM 上组合前缀哈希与分桶,服务整数前驱问题;其期望或最坏界需要明确哈希与字长模型。FM-index则预处理固定文本的 BWT 与 rank,回答模式区间而不保存字典中每个前缀节点。三条路线共享“前缀”图像,却索引不同对象并提供不同接口。
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
- Robert E. Tarjan, Data Structures and Network Algorithms, SIAM, 1983,Chs. 1–6。