编辑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
感兴趣。
非常感谢。
答案 0 :(得分:1)
您可以为您的目的修改Aho-Corasick algorithm。
答案 1 :(得分:1)
对于近似匹配,请查看agrep中使用的http://en.wikipedia.org/wiki/Bitap_algorithm。