一共有30个文件,任何一个包含大约100,000个数据项,数据项就是这样:key->count,例如abcdefg->100,表示key 'abcdefg'的count值为100,key可以一次只出现在一个文件中,但它可能出现在其他文件中。
我应该如何获得 10 个键,它的总计数值应该在 30 个文件中的所有前 10 个中。
任何帮助将不胜感激。
我假设您想要总计数最多的 10 个键 [根据您的第一条评论,这似乎是正确的]
设计指南:
算法 :
HashMap:key->int
,它将在您阅读文件时填充。对于您正在读取的每个键,如果它已经在直方图中 - 将计数添加到直方图中的现有值,如果它不存在 - 只需将 (key,count) 对添加到直方图中。[O(n)
平均运行时间]O(n)
如此。好处:
O(n)
平均运行时间。坏处:
1:如果假设不成立,可以通过对密钥进行哈希处理,只存储密钥来部分解决。一旦发生哈希冲突,请检查是否相等 - 在磁盘本身中。会增加读取次数,但是碰撞次数应该比较低,有很好的hash函数。此外,您应该将它们的哈希冲突的键加载到内存中[再次,以避免多次磁盘读取],并且只有它们,它将比元素总数小得多。
我会尝试以下方法: