【发布时间】:2016-05-10 17:51:36
【问题描述】:
我正在设计一个程序,用户输入一个单词,程序会确定该单词在文本语料库中出现的次数。现在文本语料库太大而无法放入内存,为了优化内存,我决定使用磁盘数据结构。我想使用哈希表进行插入和搜索,但不知道如何为磁盘设计它。如何设计密钥,以便在磁盘上查找密钥的值需要恒定的时间。我是否应该为特定的键子集创建单独的文件,以便查找是 O(1)?我确实知道存在 B 树,但是如何为这样的应用程序设计这样的哈希表?提前感谢您的回答!
【问题讨论】:
-
从缓冲的
std::ifstream中读取单个单词并获得std::map<srd::string,int>。 -
构建一个哈希图,其中单词是键,计数是存储的值。在大多数现代计算机上,这应该很容易放入内存中,因为单词的数量可能只有几千个(即使它们的数量非常多)。
-
数据结构不会存储在 RAM 上,如何使用磁盘内存来实现?
-
@physio 为什么您不想使用磁盘内存来执行此操作?创建一个可重新读取的索引文件?
-
语料库中有多少个dinstinct词?下限(“至少 n 个单词_”)也会有所帮助。
标签: c++ algorithm data-structures