寻找具有有界间隙的最大对子
1. 引言
在字符串处理中,对子指的是相同子串的两次出现。若子串的两次出现不能在不使其不同的情况下向左或向右扩展,则该对子为最大对子。对子的间隙是指子串两次出现之间的字符数。例如,在字符串 “maximal” 中,子串 “ma” 的两次出现构成了一个间隙为 2 的最大对子。
以往的算法虽能在 $O(n + z)$ 时间和 $O(n)$ 空间内报告字符串中的所有最大对子(其中 $n$ 为字符串长度,$z$ 为报告的对子数量),但这些算法对最大对子的间隙没有限制,导致许多报告的对子可能是重叠的或在字符串中相距很远,这在计算生物学的许多应用中并不理想。
本文将介绍如何在 $O(n \log n + z)$ 时间和 $O(n)$ 空间内找到字符串中间隙在上下界区间内的所有最大对子。允许的间隙区间可以选择为仅当间隙在常数 $c_1$ 和 $c_2$ 之间时报告最大对子,更一般地,也可以选择为仅当对子 $\alpha$ 的间隙在 $g_1(|\alpha|)$ 和 $g_2(|\alpha|)$ 之间时报告,其中 $g_1$ 和 $g_2$ 是可以在常数时间内计算的函数。如果去除允许间隙的上界,仅要求报告的对子 $\alpha$ 的间隙至少为 $g_1(|\alpha|)$,则运行时间可减少到 $O(n + z)$。
1.1 相关问题研究
寻找字符串中重复子串出现的问题已得到广泛研究。大部分工作集中在寻找连续重复子串出现的高效方法。形式为 $\alpha\alpha$ 的子串出现被称为平方或串联重复。大多数著名的寻找字符串中所有串联重复出现的方法需要 $O(n \log n + z)$ 时间。也有工作致力于检测字符串是否
超级会员免费看
订阅专栏 解锁全文
863

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



