如何在Python中对非常大的数据集执行高效的成员资格搜索

时间:2014-02-14 02:06:37

标签: python algorithm search member bioinformatics

我的问题是列表/设置会员搜索效率。我想比较一小组基因组kmers(核苷酸串)和一个非常大的kmers列表来测试成员资格。大型列表可以达到GB范围,因为该算法是为大型真核基因组设计的。

较小的列表只会在KB范围内,但可能有数百万个列表!显然,我迫切需要一种有效的方法来搜索这个大型列表。

根据我所看到的类似问题,我不应该将大型列表转换为一个集合,因为它会花费太多内存。我一直在使用较小的列表作为集合,但它并没有为我节省大量的时间。

最后,一旦脚本完成,它将被设计为在通常用于大型基因组算法的大型内存机器上运行。

谢谢

2 个答案:

答案 0 :(得分:4)

BioPython有一个trie实现正是为了这个目的。

from Bio import trie
tr = trie.trie()

答案 1 :(得分:2)

trie可能是基因组学的一个很好的数据结构,但你也可以考虑一个 BloomFilter (一种概率数据结构可以提供惊人的空间效率集合成员资格)测试 - 例如,这是一些拼写检查器存储有效单词的大词典的方式。