我正在使用Python实现Trie。目前我已经学习了两种不同的实现方法:
哪种数据结构在处理大量单词数据时既节省内存又能快速遍历和执行其他trie操作?
1)使用类节点(类似于C ++中的结构体节点),其中包含以下数据成员:
char
- 存储字符
is_end
- 存储单词末尾(true或false)
prefix_count
- 存储具有当前前缀的单词数
child
- 节点类型字典(用于存储其他节点,即26个字母表中的节点)
class Node(object):
def __init__(self):
self.char = ''
self.word = ''
self.is_end = False
self.prefix_count = 0
self.child = {}
2) 使用字典存储所有数据:
例如,对于输入 words = {'foo','bar','baz','barz'}
我们得到以下字典:
{'b': {'a': {'r': {'_end_': '_end_', 'z': {'_end_': '_end_'}},
'z': {'_end_': '_end_'}}},
'f': {'o': {'o': {'_end_': '_end_'}}}}
哪种数据结构在处理大量单词数据时既节省内存又能快速遍历和执行其他trie操作?
self.child
中的Node
对象,考虑到它是一个字典?如果你确实将其保留为dict
,并以某种方式引用Node
对象,我认为这两种方法的时间复杂度相同,但第一种方法的空间复杂度更高。如果你将self.child
引用为列表,则第一种方法可能会慢一些。 - hyadesdict
来实现trie树,那么你几乎是在作弊。 - Dima Tisnek