我正在python中實現Trie。到目前爲止我所遇到兩種不同的方法來實現它:內存Trie實現的高效數據結構
- 使用類節點(類似於C爲結構節點++)與數據成員 -
焦 - 存儲字符
is_end - 存儲字的結束(true或false)
prefix_count - 詞的門店數量與當前前綴
子 - 節點類型字典使用字典來存儲所有的數據(存儲的其它節點,即對於26個字母表)
class Node(object):
def __init__(self):
self.char = ''
self.word = ''
self.is_end = False
self.prefix_count = 0
self.child = {}
- 。
words = {'foo', 'bar', 'baz', 'barz'}
{'b': {'a': {'r': {'_end_': '_end_', 'z': {'_end_': '_end_'}}, 'z': {'_end_': '_end_'}}}, 'f': {'o': {'o': {'_end_': '_end_'}}}}
哪一個是高效,規範的數據結構,這既是內存高效,快速的對字的大數據集遍歷和其他線索操作?
https://github.com/kmike/marisa-trie –
你如何計劃在'self.child'中引用'Node'的對象,考慮到這是一本字典?如果確實將它保留爲'dict',並以某種方式引用'Node'對象,則我將這兩種方法看作具有相同的時間複雜度,但第一種方法具有更多空間複雜性。如果您將'self.child'作爲列表,那麼第一個可能會慢一點 – hyades
感謝您的回覆。 Node中的每個子節點都有另一個節點類型的對象,這將使它成爲一棵n-ary樹。@hyades – divyum