17、寻找具有有界间隙的最大对子

寻找具有有界间隙的最大对子

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)$ 时间。也有工作致力于检测字符串是否

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值