我的问题是列表/设置会员搜索效率。我想比较一小组基因组kmers(核苷酸串)和一个非常大的kmers列表来测试成员资格。大型列表可以达到GB范围,因为该算法是为大型真核基因组设计的。
较小的列表只会在KB范围内,但可能有数百万个列表!显然,我迫切需要一种有效的方法来搜索这个大型列表。
根据我所看到的类似问题,我不应该将大型列表转换为一个集合,因为它会花费太多内存。我一直在使用较小的列表作为集合,但它并没有为我节省大量的时间。
最后,一旦脚本完成,它将被设计为在通常用于大型基因组算法的大型内存机器上运行。
谢谢
答案 0 :(得分:4)
BioPython有一个trie实现正是为了这个目的。
from Bio import trie
tr = trie.trie()
答案 1 :(得分:2)
trie可能是基因组学的一个很好的数据结构,但你也可以考虑一个 BloomFilter (一种概率数据结构可以提供惊人的空间效率集合成员资格)测试 - 例如,这是一些拼写检查器存储有效单词的大词典的方式。