【发布时间】:2015-08-21 06:56:25
【问题描述】:
我有一个包含单词列表的文本文件(大约 35 MB 的数据)。我写了一个应用程序,它的工作原理很像 Scrabble helper 左右。我发现将整个文件加载到一个集合中是不够的,因为它需要大约 10 分钟才能完成。我在 C++ 方面没有那么丰富的经验,因此我想问你有什么更好的方法来实现它?在我的第一个应用程序版本中,我只是对它进行了二进制搜索。所以我设法通过对文件进行二进制搜索来解决这个问题(不加载它,只是使用 seekg 移动文件指针)。但是这个解决方案不如使用地图地图那么快。搜索单词时,我会在地图中查找它的第一个字母。然后我检索可能的第二个字母的地图,然后我再次搜索(第二个字母)等等。通过这种方式,我能够更快地判断该单词是否在字典中。如何在不将整个文件加载到程序中制作这些地图的情况下实现它?我可以将它们保存在数据库中并阅读它们吗?那会更快吗?
【问题讨论】:
-
您是在问如何构建这个数据结构而不读取整个文件?我认为这行不通。
-
看来您正在重新发明文件索引方案...
-
那么处理庞大字典的应用程序是如何工作的呢?就像,假设我想对 3 或 4 种语言应用相同的逻辑。尝试加载 1000 万个单词时,我可能会耗尽内存。
-
完全有可能。您只需序列化地图内容并重新加载衍生化数据。只要您不更改文件(或操作系统),seekg 位置就有效
-
所以你建议将整个结构保存到一个文件中并作为二进制文件加载回来?
标签: c++ performance dictionary