形态不可约性测试与正则树表达式转换的高效算法
形态不可约性测试的线性时间算法
算法时间复杂度分析
在形态不可约性测试中,对于集合 L、R 和 E 的查询可以在 O(1) 时间内完成。ActiveSet 查询的时间与返回位置的数量(加 1)成正比,而 IntervalsSet 可以在 O(1) 时间内处理任意元素的删除查询。此外,范围 la 和 ra 可以在 O(n) 时间内预先计算,α(i, j) 查询也能在 O(1) 时间内完成。
从时间复杂度的角度来看,主要工作通过新插入字母的出现次数(涉及 ProcessInterval 调用和主 while 循环的步骤)以及 R 中新插入元素的数量(涉及 Propagate 调用和主算法的其余循环)进行分摊,最终实现 O(n) 的时间复杂度。
辅助数据结构
RMQ 和 LCP 的应用
使用两种具有 O(n) 预处理时间和 O(1) 查询时间的知名数据结构:
- 范围最小查询(RMQ) :给定一个整数数组 A[1..n],经过预处理后,可以在 O(1) 时间内查询区间 [i, j](1 ≤ i ≤ j ≤ n)内的最小值对应的索引 k0,使得 A[k0] = min{A[k] : k ∈ [i, j]}。
- 最长公共前缀查询(LCP) :对于长度为 n 的单词 w,经过 O(n) 时间的预处理后,可以在 O(1) 时间内查询 w[i..n] 和 w[j..n] 之间的最长公共前缀长度 lcp(i, j)。
通过 RMQ 数据结构可以高效计算 α(i, j
超级会员免费看
订阅专栏 解锁全文
50

被折叠的 条评论
为什么被折叠?



