后缀
后缀数组
其核心是将字符串所有后缀按字典序排序后,存储对应起始位置的数组。优势在于简洁高效,通过排序将后缀关系转化为有序索引,便于快速处理字符串问题。
从复杂度来看,构建后缀数组的时间复杂度通常为\(O(n\log n)\)(如倍增算法),空间复杂度为\(O(n)\),其中\(n\)为字符串长度。
应用上,可快速实现子串查找(借助二分查找,时间复杂度为\(O(m\log n)\),\(m\)为子串长度)、重复子串分析(结合LCP数组,求解最长重复子串时间复杂度为\(O(n)\))及求解两字符串最长公共子串等。
后缀自动机
作为确定性有限状态自动机,以“等价类”压缩存储字符串所有子串(相同结束位置集合的子串归为一类)。特点是空间紧凑(与字符串长度呈线性关系,空间复杂度\(O(n)\))且支持在线构建,构建时间复杂度为\(O(n)\),适合动态字符串处理。
主要用于子串匹配(时间复杂度\(O(m)\))、统计子串出现次数(时间复杂度\(O(n)\))、查找最长重复子串(时间复杂度\(O(n)\))及计算不同子串的数量(时间复杂度\(O(n)\))等。
后缀树
将字符串所有后缀以前缀树形式紧凑表示,通过路径压缩合并公共前缀,避免冗余。核心优势是模式匹配能力强,可快速定位子串位置,处理多模式串匹配。
构建后缀树的时间复杂度为\(O(n)\)(如Ukkonen算法),空间复杂度为\(O(n)\)。在模式匹配中,单模式匹配时间复杂度为\(O(m)\),多模式匹配可在\(O(m + z)\)内完成,其中\(z\)为匹配结果数量。
在DNA序列分析、全文搜索加速及数据压缩算法(如Burrows-Wheeler变换)中应用显著。

浙公网安备 33010602011771号