高效的字典查找
Efficient Dictionary lookup
对于我的C++应用程序,需要检查一个单词是否是有效的英语词典单词。做这件事最好的方法是什么?有没有免费的字典我可以用。我只需要收集所有可能的单词。如何使此查找成本最低。我需要散列它吗?
使用std::set<std::string>
或std::unordered_set<std::string>
。后者在C++0x中是新的,您的C++标准库实现可能支持也可能不支持;如果它不支持它,它可能会包含某种类型的hash_set
:请参阅您的文档以了解更多信息。
其中哪一个(使用二进制搜索树的set
和使用哈希表的unordered_set
)更高效取决于存储在容器中的元素数量以及标准库实现如何实现它们。你最好同时尝试这两种方法,看看哪一种更适合你的特定场景。
或者,如果单词列表是固定的,您可以考虑使用排序的std::vector
并使用std::binary_search
在其中查找单词。
关于单词列表的存在,它取决于平台。在Linux下,/usr/share/dict/words
包含一个英文单词列表可能会满足您的需求。否则,毫无疑问会有这样的名单网络上可用。
考虑到这些列表的大小,最快速的访问将是加载它转换为哈希表。std::unsorted_set
,如果你有;否则,许多C++编译器附带hash_set
,尽管不同的编译器有一个稍微不同的界面,并将其放入不同的命名空间。如果仍然存在性能问题,可以如果你事先知道条目的数量(这样表就永远不会必须增长),并在std::vector(甚至是C型数组);处理冲突将稍微复杂一些,然而
另一种可能性是trie。这几乎肯定会导致在查找中最少的基本操作中易于实现。典型的实现会非常糟糕然而,这可能会使它比其他地方慢实际实践中的解决方案同时执行和测量)。
我实际上是几个月前做的,或者是类似的事情。你可能可以在网上免费找到一个。
喜欢这个网站:http://wordlist.sourceforge.net/
只需将其放在一个文本文件中,并将单词与列表中的单词进行比较。它的顺序应该是n,n是列表中的单词数。您是否需要更快的时间复杂性?
希望这能有所帮助。
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 查找后更改类变量
- 使用正则表达式regex_search在字符串中查找字符串
- 如何在没有分隔符的大文本文件中查找所有字典单词
- 在字典中查找单词模式,高性能
- 具有非常快速的内>数据查找和快速反向查找(搜索/插入/删除数据)的压缩字典?
- C++-如何制作查找矩阵的静态字典
- 尝试字典上的数据结构以查找押韵的单词
- 查找字典中包含的最长前缀
- 字典查找与数组查找;数组分配与字典分配
- 查找字符串中按字典顺序排列的最大旋转
- 查找最小字典数组
- 通过语音在字典中查找单词
- 使用列文施泰因距离在字典中查找朋友的朋友
- 高效的字典查找