1

所以,我有这个包含 200 000 个单词的文本文件(由 Aspell 生成)。它将用于一个crabble 游戏,以检查这个词是否合法。这意味着,很可能会有大量的检查,其中没有单词,我想知道最有效的方法是什么。

  1. 每行检查文本文件行每次检查需要 200 000 次迭代,所以这是我的最后选择。

  2. 获取 QList 中的所有单词,并使用 Qlist::contain() 函数(或 QList::indexOf(),因为我认为我使用的是 Qt4.8)。不过,我不知道这样做的效率,而且会占用大量内存。

  3. 使用哈希表。老实说,我不确定它是如何工作的,所以如果有人能告诉我是否提供了 Qt 数据类型,我可以做一些研究。

还有其他有效的方法吗?目前倾向于 QList 方法,似乎最容易实现:)

4

3 回答 3

1

您可以使用std::unordered_set,它通过哈希表执行查找。Qt 有它自己的实现QSet

不要使用 QList 或第一个文件遍历方法,因为两者都比一个哈希表查找慢几个数量级。

于 2013-08-16T17:08:46.370 回答
1

假设哈希是好的,使用哈希表肯定是最快的方法(因为它是哈希的简单计算 - 因为字符串可能不是很长,所以不应该花费太多时间 - 典型的英语单词大约 5 个字符长)。

此页面的 QHash 部分中有一个示例,说明如何对字符串进行哈希处理:http: //doc.qt.digia.com/qq/qq19-containers.html

于 2013-08-16T17:13:00.977 回答
0

对列表进行排序——一次性操作:将其排序保存,或在启动程序时对其进行排序——并使用二分搜索。在 200,000 个项目中查找任何单词平均需要 17.6 次查找,大约前四个操作只需要检查一个字符。

于 2013-08-16T21:02:00.910 回答