在未来的项目中,我将需要实现用于搜索单词的功能(按长度或给定一组字符及其在单词中的位置),这将返回满足特定条件的所有单词。
为此,我需要可以在 LINQ 中轻松查询的语言词典。我想问的第一件事是,是否有人知道在这种应用程序和环境中使用的好的词典。
而且我还想问一下在上述词典中搜索单词的好方法。哈希表是否有助于加快查询速度?问题是语言词典可能非常庞大,并且知道我会有很多搜索条件,为了避免阻碍搜索速度,实现此类功能的好方法是什么?
最佳答案
如果不知道您可能需要优化的确切内容集,则很难说。为快速检索高效组织大量单词的标准数据结构是“trie”数据结构,或者,如果空间效率很重要(因为假设您正在为手机或其他内存受限的环境编写程序)然后是 DAWG——有向无环字图。 (DAWG 本质上是一种将公共(public)路径合并到叶子的 trie。)
在设计数据结构之前我想知道答案的其他有趣问题是:字典会改变吗?如果它确实发生了变化,那么新数据需要以多快的速度集成到结构中是否存在性能限制?该结构将仅用作快速查找设备,还是您想在其中存储有关单词的摘要信息? (如果是后者,则 DAWG 不合适,因为两个词可能共享相同的前缀和后缀节点。)等等。
我会在文献中搜索有关尝试、DAWG 和优化拼字游戏程序的方法的信息;显然,Scrabble 需要对字符串语料库进行各种巧妙的搜索,因此 Scrabble 爱好者在 DAWG 数据结构上建立了一些非常快速的变体。
我最近用 C# 编写了一个不可变的 trie 数据结构,我计划在某个时候写博客。如果我最终这样做了,我会在接下来的几个月里更新这个答案。
关于c# - 可查询语言词典和单词搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346072/