字符串匹配问题

时间:2011-09-26 13:29:06

标签: string algorithm perl substring

  
    

编辑2:我设法找到带有后缀树Tree::Suffix perl包的解决方案。感谢MarcoS提出的trie想法。我从中发现,也可以使用后缀树。 Tree::Trie perl包被实现为哈希哈希,我想这就是它变慢的原因。我试了一下,然后回到Tree::Suffix。感谢所有其他人对不同算法的链接。我已经在尝试为我自己提到的每个算法编写代码作为学习过程

         

编辑1:我将标题从perl string-match problem更改为string-match problem

  

假设我有两个字符串,比如说,
S1 = ACGAGGATAGTATGCCACACAATGAGTACCCGTAC
S2 = CAGTATTGCACGTTGTAAAGTTACCCAGGTACGATGACAGTGCGTGAGCATACGAGGATAGTATGCCA

我最初想在S2中检查字符串S1的出现(没有或1不匹配)。我已经为此编写了perl代码。

现在,我想开发它

  

1)在S2中搜索S1的k-不匹配   2)在S2中搜索S1的出现prefix(是,前缀,而不是后缀)。如果你看一下这个例子,字符串:ACGAGGATAGTATGCCA出现在S2的结尾,这是S1的开头   3)如果可能,搜索带有k-mismatches的前缀。

问题是,我有大约1亿个这样的S2字符串。然而,S1保持相同并且对于给定问题具有定义的恒定长度。文献中是否有一种有效的算法可用于我的这个问题?

S1在50到80个字符之间变化。另外,我最初对解决problem 2感兴趣。

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以为您的目的修改Aho-Corasick algorithm

答案 1 :(得分:1)

对于近似匹配,请查看agrep中使用的http://en.wikipedia.org/wiki/Bitap_algorithm