TRIE是最值得推荐的数据结构,同时设计类似于存储单词的字典吗?是否有其他改善时间或内存性能的替代方案?
我相信如果没有碰撞,哈希可能会很好但是内存需求开始变得不好重叠的单词:覆盖,重叠,重叠,重叠,重叠都会占用独占存储,而我们可以在trie中共享空间。
编辑:感谢@Moron和大家提供的非常有用的答案。我同意 - 生成散列键是O(n),因此是TRIE搜索。然而,对于哈希事物可能会更糟糕,链接增加时间,而对于TRIE,这不会发生。我担心的是,对于TRIE中的每个节点,我需要保留一个指针,如果字典大小很小,它可能正在吹东西。
答案 0 :(得分:5)
与哈希表相比,trie具有以下优势:
O(m)
时间更快。不完美的哈希表可能存在关键冲突。密钥冲突是将不同密钥的哈希函数映射到哈希表中的相同位置。不完美哈希表中的最差情况查找速度为O(N)
时间,但更典型的是O(1)
,评估哈希值的时间为O(m)
。尝试有以下缺点:
如果缺点是你可以忍受的东西,我建议你去看看。
来源:Wikipedia: Trie#As a replacement of other data structures
答案 1 :(得分:2)
您可以尝试考虑Directed Acyclic Word graph,这基本上是一个特里,但内存使用率更高,根据维基,对于英语,内存消耗远低于特里。
时间方面,它就像一个特里,可能比哈希更好。不知道你在哪里获得哈希的O(logn)时间。对于合理的哈希值应为O(n),其中n是被搜索词的长度。
答案 2 :(得分:0)
我想这是个大问题,是吗?也许试试看Bloom过滤器?