可查询语言词典和词搜索功能

时间:2011-03-17 22:31:47

标签: c# dictionary

在未来的项目中,我需要实现用于搜索单词的功能(通过长度或给出一组字符及其在单词中的位置),这将返回符合特定条件的所有单词。

为了做到这一点,我需要在LINQ中可以轻松查询的语言词典。我想问的第一件事是,是否有人知道在这种应用程序和使用的环境中使用好的词典。

我还想问一下搜索一下这个字典的好方法。哈希表是否有助于加快查询速度?问题是语言词典可能非常庞大,并且知道我将有足够的搜索条件,为了避免妨碍搜索速度,实现这些功能的好方法是什么?

1 个答案:

答案 0 :(得分:2)

在不知道您可能需要优化的确切内容的情况下,很难说。用于有效组织大量单词以便快速检索的标准数据结构是“trie”数据结构,或者,如果空间效率很重要(因为假设您正在为电话或其他内存受限的环境编写程序)然后是DAWG - 有向无环字图。 (DAWG本质上是一种将常见路径合并到叶子上的特里。)

在设计数据结构之前,我想知道答案的其他有趣的问题是:字典会不会改变?如果确实发生了变化,那么新数据需要多快地集成到结构中会有性能限制吗?该结构是仅用作快速查找设备,还是要存储有关其中单词的摘要信息? (如果后者那么DAWG不合适,因为两个单词可能共享相同的前缀和后缀节点。)依此类推。

我会在文献中搜索有关尝试,DAWG和优化Scrabble程序的方法的信息;显然Scrabble需要对字符串语料库进行各种巧妙的搜索,因此在Scrabble爱好者构建的DAWG数据结构上有一些非常快速的变种。

我最近在C#中编写了一个不可变的trie数据结构,我计划在某些时候写博客。如果我最终做到这一点,我会在接下来的几个月内更新这个答案。