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

标签 c# algorithm unique words suffix-tree

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

当然,这需要非常快,主要是因为单词数量巨大。

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

附注字数 ≈ 107

最佳答案

首先,请注意,后缀树在这里可能有点过头了,因为它们允许快速搜索任何单词的任何后缀,这可能比您要查找的内容有点太多。一个trie是一个非常相似的 DS,也允许快速搜索单词,但由于它不支持快速搜索任何后缀 - 它的创建更简单(无论是编程还是效率)。

另一个更简单的替代方案是使用简单的哈希表,它在 C# 中实现为 HashSet 。虽然 HashSet 理论上在最坏情况下速度较慢 - 每次查找的平均情况需要恒定时间,这对于您的应用程序来说可能足够了。

我的建议是:

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

关于c# - C#中快速查找唯一单词的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25591104/

相关文章:

c# - 反射 - 作为接口(interface)的类的 GetProperties

c# - 从 C# 表达式中删除不需要的装箱转换

algorithm - 在 Go 中异或一个 slice

java - Pi计算算法

c++ - 宾果游戏板 : Generating unique values

java for 循环执行得太快导致 System.currentTimeMillis() 重复

c# - 为什么这个 Base36 随机字符串不使用 RandomNumberGenerator 随机分布字符

algorithm - 具有偶数个元素的集合的划分

Grails - 子类中的唯一约束

c# - 从unity c#调用java方法