在C#中快速查找独特单词的有效方法

本文关键字:单词 有效 方法 查找 | 更新日期: 2023-09-27 18:20:04

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

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

我正在考虑实现后缀树,但我想知道是否有一种更简单的方法可以使用一些已经实现的内部结构。

附言字数≈107

在C#中快速查找独特单词的有效方法

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

另一种更简单的选择是使用一个简单的哈希表,它在C#中作为HashSet实现。虽然HashSet在理论上比最坏的情况慢,但每次查找的平均情况需要恒定的时间,对于您的应用程序来说可能已经足够了。

我的建议是:

  1. 首先尝试使用HashSet,实现、基准测试它并检查它是否足够
  2. 确保你的DS是可修改的,这样你就可以在以后决定切换时毫不费力地切换它。这通常是通过引入一个负责添加和查找单词的接口来完成的,如果你需要更改它,只需在接口中引入一个不同的实现即可
  3. 如果你决定添加后缀树或trie-使用社区资源,无需重新发明轮子-有人已经实现了这些数据结构中的大部分,并且可以在线获得