65.9K
CodeProject 正在变化。 阅读更多。
Home

用于单词游戏和拼写检查的高效 C++/STL 库

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.80/5 (6投票s)

2005年9月14日

CPOL

1分钟阅读

viewsIcon

40131

downloadIcon

611

DicoLib 将单词存储在按长度索引的字谜列表中,并使用一个 26 位的位集来描述单词中包含的字母。这使得搜索包含指定字母的单词以及搜索对于拼写检查应用而言“接近”的单词变得非常快速。

引言

这个项目源于一个谜题:有一个常见的英语单词,有九个字母长。每次从单词中移除一个字母,它仍然是一个英语单词——从九个字母一直到单个字母。原来的单词是什么,以及在每次移除一个字母后的单词又是什么?我编写 DicoLib 来寻找这个单词,但由于我在代码中愚蠢地将“nine”(九)翻译成了“8”,所以我没有找到真正的解决方案,而是找到了这里列出的一些其他解决方案。DicoLib 使用一种原始的数据结构,优化了搜索与给定单词“接近”或包含相同字母的单词。因此,它适用于拼写检查,尽管这个应用尚未(完全)开发。

数据结构

DicoLib 对单词进行索引

  • 按它们的长度
  • 以及一个 26 位的位集,描述单词中包含的字母

实际上,DicoLib 为每个长度/位集对存储一个字谜列表。因此,查找给定单词的字谜需要 0 时间!

对于 Scrabble,查找由指定字母组成的单词,或者查找具有给定长度和包含给定字母的单词,都非常快速,因为它主要需要位集操作和表查找。

DicoLib 中使用的数据结构在下面的示意图中显示

源代码

DicoLib 在 SourceForge 上可用。欢迎您为这个项目的发展做出贡献,朝着一个非常高效的拼写检查器或其他您可能想到的应用方向努力。

© . All rights reserved.