【发布时间】:2012-11-19 13:59:48
【问题描述】:
我的问题: 假设我有字符串:
ali, aligator, aliance
因为它们有共同的前缀,所以我想将它们存储在 trie 中,例如:
trie['ali'] = None
trie['aligator'] = None
trie['aliance'] = None
到目前为止一切顺利 - 我可以使用 Biopython 库中的 trie 实现。 但我想要实现的是能够在该 trie 中找到包含特定子字符串的所有键。
例如:
trie['ga'] would return 'aligator' and
trie['li'] would return ('ali','aligator','aliance').
有什么建议吗?
【问题讨论】:
-
你想找到这个一次(所以这很慢没关系),还是重复(所以很重要)?
-
@PhilH OP 正在询问一个具体的实现(trie),它可以有效地实现这一点。
-
@KonradRudolph:特里树可以有效地存储和检索带有公共存根的字符串。据我所知,它不会整理常见的子序列。因此,除非我们还构造一个索引,否则要在键树的不同部分之间找到公共子序列是没有效率的。但是如果公共子序列搜索很少,那么存储和插入/删除成本就没有意义了。如果是普遍的,那么收益大于成本,我们应该构建指数。我错过了什么吗?
-
好的。我的情况是我有 120 万个这样的字符串:InChI=1S/C9H12/c1-4-7-8(5-2)9(7)6-3/h4-6H,1-3H3/b7-4 -,8-5-,9-6- 我想让索引能够找到包含某些给定子字符串的所有字符串。实现不一定要用trie,但应该是有效的。
标签: python data-structures tree substring trie