我需要一个内存数据结构来存储大量string
类型的值(~10M记录),长度最多为100个字符(以防它有帮助)。
我将广泛运行以下操作:
显然,上述任何操作都需要在O(1)
或O(logn)
我有点生疏了。那个最好的数据结构是什么?最好把我带到正确的班级。
谢谢
答案 0 :(得分:2)
你想要的是一个trie,它是一个树,每个节点都有一个字符映射到节点(分支),trie中的walk是一个前缀walk,某些节点也有一个标志,暗示它是否在存储在trie中的字符串的结尾,即使节点可能还有其他分支(字符串是另一个添加的字符串的前缀)。正常实现具有复杂性:插入O(w),查找为O(w),前缀搜索为O(w + n),其中w为字符串长度,n为树中单词的总长度,w为前缀。
您可以在这里阅读一个c#实现
https://visualstudiomagazine.com/articles/2015/10/20/text-pattern-search-trie-class-net.aspx?m=1
<强>更新强> 我想澄清一下,在考虑你的字符串长度上限为100时,你特殊情况下的时间复杂度实际上是O(1)。