【发布时间】:2013-12-06 09:06:59
【问题描述】:
在将pattern 与文本进行比较时,我正在寻找一种有效的算法来允许不匹配(最多 3 个)。原始 KMP 在我的数据上有效地完成了这项工作,但正在考虑扩展此算法以适应不匹配。
对于我的情况:GACCCT 被认为与 GGGGGAGGTTTTTT 匹配,第二个序列中的起始位置为 4
我需要在两个文件之间进行成对比较。每个包含大约 500,000 个序列。一个文件中的序列相对较短(~50 个碱基),而另一个文件中的序列较长(~200)
我尝试了 Python 中的 Regex 包、Levenshtein 算法和编辑距离。但是它们很慢,我将不得不等待几周才能完成工作。
【问题讨论】:
-
strstr适用于直接匹配,可能使用strstr之类的东西作为模式的前半部分并计算后半部分的不匹配,然后strstr查找后半部分并计算上半场的失配会奏效吗?当然,对于三个不匹配,您需要至少 1/4 的字符串来匹配并计算其余的不匹配...在您的示例中,找到模式中的任何一个字母就足够了,因为您最多允许三个不匹配。 -
去过那里,但速度是威慑。我需要到这几千亿次。这些的运行时间不是很好,因为它需要数周才能完成。这就是为什么我现在正在寻找 KMP 看看是否可以修改。
-
您的数据有多大(大约)? 1 KB、1 MB、100 MB、1 GB...?
-
@Mehrdad,请参阅 OP。感谢您的评论
标签: c string algorithm string-matching