快速查找C#中唯一单词的有效方法

时间:2014-08-31 10:32:48

标签: c# algorithm unique words suffix-tree

我有以下问题。我必须在内存中存储多种语言的唯一单词列表,当然,当我添加新单词时,我必须检查新单词是否已经存在。

当然,这需要非常快,主要是因为词汇量很大。

我正在考虑实施Suffix Tree,但我想知道是否有一些已经实现的内部结构更简单的方法。

P.S。单词数量≈10 7

1 个答案:

答案 0 :(得分:2)

首先请注意,后缀树在这里可能是一种过度杀伤,因为它们允许快速搜索任何单词的后缀,这可能比你想要的要多一些。 trie是一个非常相似的DS,它也允许快速搜索单词,但由于它不支持快速搜索任何后缀 - 它的创建更简单(无论是编程还是效率)。

另一个更简单的选择是使用简单的哈希表,它在C#中实现为HashSet。虽然HashSet在最坏的情况下理论上较慢 - 每次查找的平均情况需要恒定的时间,并且它可能足以满足您的应用。

我的建议是:

  1. 首先尝试使用HashSet,这需要更少的工作量,对其进行基准测试并检查它是否足够。
  2. 确保您的DS是可修改的,因此如果您以后决定,可以轻松切换它。这通常是通过引入负责添加和查找单词的interface来完成的,如果需要更改,只需在界面中引入不同的实现。
  3. 如果您决定添加后缀树或trie - 使用社区资源,则无需重新发明轮子 - 有人已经实施了大部分数据结构,并且可以在线获取。