小编典典

使用二进制搜索和Trie的复杂性

algorithm

给定文件中按字母顺序排序的单词的大列表,我需要编写一个程序,给定单词x,该程序确定x是否在列表中。预处理是可以的,因为我将在不同的输入上多次调用此函数。
优先事项:1.速度。2.记忆

我已经知道我可以使用(n是单词数,m是单词的平均长度)1.特里,时间是O(log(n)),空格(最好的情况)是O(log(n m))
,空间(最坏情况)为O(n
m)。
2.将完整列表加载到内存中,然后进行二进制搜索,时间为O(log(n)),空间为O(n * m)

我不确定tri的复杂性,如果错误,请纠正我。还有其他好的方法吗?


阅读 296

收藏
2020-07-28

共1个答案

小编典典

特里树的搜索时间为O(m ),二进制搜索的 时间为O(m log(n))。 对于任何合理的方法, 该空间都是渐近O(n
m),您可以在某些情况下使用压缩来减小 该空间
。从理论上讲,特里结构在内存上要好一些,但是在实践中,它隐藏了实现细节:存储指针所需的内存和潜在的不良高速缓存访​​问。

还有其他实现集合结构的选项-在大多数语言中,hashset和treeset是容易选择的。我会选择哈希集,因为它既高效又简单。

2020-07-28