Algorithm 寻找字符串重叠的有效算法

Algorithm 寻找字符串重叠的有效算法,algorithm,string,performance,overlap,intervals,Algorithm,String,Performance,Overlap,Intervals,我将不深入讨论我试图解决的问题的细节,但它涉及到一个大字符串,并涉及到查找字符串中存在的重叠间隔。我只能使用其中一个重叠的区间,所以我想把这些区间分开,分别进行分析。我想知道使用什么算法来尽可能高效地完成这项工作 我必须强调速度在这里是最重要的。我需要尽快把间隔分开。我想到的算法是区间树,但我不确定这是否是我们能做到的最好的算法 区间树可以在Olog n时间内查询,n是区间数,构造只需要LOG n时间,尽管我想知道我们是否可以减少这两种时间 谢谢 编辑:我知道这个问题很模糊。我为这一混乱道歉。我

我将不深入讨论我试图解决的问题的细节,但它涉及到一个大字符串,并涉及到查找字符串中存在的重叠间隔。我只能使用其中一个重叠的区间,所以我想把这些区间分开,分别进行分析。我想知道使用什么算法来尽可能高效地完成这项工作

我必须强调速度在这里是最重要的。我需要尽快把间隔分开。我想到的算法是区间树,但我不确定这是否是我们能做到的最好的算法

区间树可以在Olog n时间内查询,n是区间数,构造只需要LOG n时间,尽管我想知道我们是否可以减少这两种时间

谢谢


编辑:我知道这个问题很模糊。我为这一混乱道歉。我建议大家看看艾伦·胡兰的答案和对同一问题的评论。这将有助于澄清更多问题

您希望计算两个字符串之间的差值,对吗?你想用什么语言做这个

更新: 如果没有任何关于如何选择使用哪个时间间隔的标准,那么就有大量可能的解决方案

一种方法是取最低的起点,抓住终点。 抓取下一个高于上一个间隔结束的起始编号。完成这段间歇,然后重复

所以对于0-4,5-13,8-19,10-12
你得到:0-4,5-13,忽略其他的。

好吧,我昨晚很无聊,所以我用Python做了这个。这是不必要的递归,我只是阅读了小Schemer,认为递归现在非常简洁,但它解决了您的问题,并处理了我向它抛出的所有输入

区间=[0,4,5,13,8,19,10,12] def重叠sx,y: x1,x2=x y1,y2=y 回来
x1您可能希望尝试使用Ukkonen的算法,请参见


中有一个免费的代码版本,你说字符串中的间隔重叠是什么意思?字符串:这是TestStringToshowTime和ByInterval间隔:这里是0-4、5-13、8-19、10-12,间隔5-13、8-19和10-12重叠等等,我只能使用其中一个。间隔是否总是按起始点排序?所以间隔独立于正在处理的字符串?我认为这个句子涉及到查找字符串中存在的重叠间隔。我只能使用其中一个重叠的区间,所以我想把这些区间分开,分别进行分析。需要进一步澄清我在使用Java,但我不想计算两个字符串之间的差异。我只有一个字符串,其中定义了多个间隔。我需要使用这些区间来进行一些计算,但我只能使用所有重叠区间中的一个,这就是为什么我希望将它们分开。@Dharmesh:定义在其中的多个区间是什么意思?您正在尝试分析数据格式吗?如果是这样的话,你能提供一些示例输入吗?我已经将分数附加到字符串间隔,我需要分数最高的一个。因此,区间10-12可能得分最高,但如果我们使用上面描述的方法,我们将在运行时间上获得更高的分数。此外,上面的注释中有示例输入。是的,我知道字符串的长度并不重要。我也在线性时间中实现了类似的东西,但我希望我能做得更好。我认为区间树可以把我们带到Olog n,尽管我还没有正确地阅读它们。g函数是什么?你是不是漏掉了什么东西,或者是某种Python内置的东西,我在互联网上找不到?我想这实际上是在^2的重叠间隔数上,因为在每次迭代中,你都会将以前找到的所有元素与新找到的元素一起复制到一个新列表中。另外,我相信您依赖于预先排序的间隔,它位于日志n上。