能够做到的大量记录的数据结构" GetAllWithPrefix"快速

时间:2017-07-08 17:17:23

标签: c# .net arrays data-structures

我需要一个内存数据结构来存储大量string类型的值(~10M记录),长度最多为100个字符(以防它有帮助)。

我将广泛运行以下操作:

  1. 添加
  2. 获取
  3. 删除
  4. GetAllWithPrefix(string prefix) - 返回与前缀对应的所有值的列表。
  5. 显然,上述任何操作都需要在O(1)O(logn)

    中完成

    我有点生疏了。那个最好的数据结构是什么?最好把我带到正确的班级。

    谢谢

1 个答案:

答案 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)。