dna大型数据库的模式匹配算法

时间:2011-12-04 15:48:05

标签: algorithm design-patterns

在模式匹配中是否存在任何预先存在的有效算法(DNA的大数据)?

有很多算法,如Knuth-Morris-Pratt算法,Boyer-Moore算法,基于索引的前向后向多模式算法,但它们很有效,并且当它很大时表现很差。所以请帮助我了解模式匹配中的高效算法......

2 个答案:

答案 0 :(得分:2)

查看BLAST algorithm

答案 1 :(得分:1)

我确信这一定必须在其他地方讨论过。

我猜你已经只使用两位来存储字符串(而不是每个字符使用8位)。这不仅将存储大小减少了四倍(我猜你的字符串可以长达数亿个字符),而且还减少了传输此数据的时间(例如,从磁盘到内存或从内存到CPU缓存) )。

以下假设在要搜索的字符串保持不变的情况下存在大量查询,因此根据字符串计算和存储一些额外的数量是合理的。

  • 我建议您查看suffix trees,可以使用Ukkonen's algorithm以线性时间构建。

  • 如果这不可行,也许你应该考虑一种混合方法,比如建立一个固定长度为L的所有可能单词的固定集合字典,并将你的字符串划分为区域。

    • 对于词典中的每个单词存储它们出现的区域索引(在构建此列表时包括下一个区域的L-1个字符)
    • 搜索单词时,将其拆分为长度为L的字符串,并检查这些字符串出现的区域。假设最大搜索字符串长度不超过区域的长度,则搜索字符串只能出现在搜索字符串的所有部分(长度为L)出现(或位于前/后区域)的区域中
    • 使用标准字符串搜索算法,仅搜索搜索字符串的结果区域 (这可能类似于Bloom filter所做的)

对于第二种方法,您需要调整参数(字典中单词的长度L和区域的大小/数量)。