2. TOP N问题
小文件【A1-AN中的某一个】;遍历文件B做同样的处理;会得到对应的B1-BN个文件【A/B两个文件使用相同的哈希函数,保证文件之间的一一对应】
- 逐个比较<A1,B1>文件对【不对应的小文件不可能有相同的URL】;此时数据量足够小,可以装载到
hashmap中进行对比,最后得到结果
拓展:
可能会出现多个文件映射到同一哈希值,如何解决?改变哈希函数;每次遇到冲突映射到小文件则改变哈希函数
3、1000w有重字符串,对字符串去重
步骤:
1.【映射到不同文件】将字符串根据哈希函数映射到不同的文件中 2.【单独文件找重复】逐个文件使用哪个hash_set检查是否有重复的字符串
3.【重复之中找交集】然后对所有文件操作后的hash_set求交集
2. TOP N问题
策略:
哈希映射差分成小文件,在每个小文件中利用hash_map统计出现频率最大的数据;然后将所有文件中的最大数据放到一个大根堆中,从大根堆中取N个元素即可
如何在海量数据中找出重复最多一个
方法:
通过hash映射为小文件,通过hash_map统计各个小文件重读最多的并记录次数,对每个小文件重复最多的进行建立大根堆
1、上亿有重数据,统计最多前N个
步骤:
(1)内存存不下
- 通过hash映射为小文件
- 通过hash_map统计各个小文件重读最多的并记录次数
- 对每个小文件重复最多的进行建立大根堆并重复N次取走堆顶并重建堆操作
(2)内存存得下
- 直接内存通过hash_map统计并建大根堆
- 重复N次取走堆顶并重建堆操作
2、海量日志数据,提取出某日访问百度次数最多的那个IP(同1)
步骤:
- 将IP % 1000映射到1000个小文件中
- 相同IP会被映射到同一个文件
- 不会出现累加和更大情况
全站分卷索引 · 42 卷
- 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
- 2找出所有子集的异或总和再求和
- 3哈希表
- 4哈希冲突
- 5红黑树与AVL树
- 6平衡二叉树(AVL树)
- 7将有序数组转换为二叉搜索树
- 83. 分割(组合问题)
- 9方法论
- 10509. 斐波那契数
- 1162. 不同路径
- 1296. 不同的二叉搜索树
- 13322. 零钱兑换
- 14爬楼梯
- 15背包小总结 (01背包、完全背包)
- 16子序列问题
- 17674. 最长连续递增序列
- 18115. 不同的子序列
- 19总结
- 20技巧总结
- 21时间序列模型
- 22区间DP模型
- 23664. 奇怪的打印机
- 24编辑距离
- 25回文串
- 26DP递推公式总结
- 27排序算法
- 28其他算法
- 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
- 302. TOP N问题
- 313. 分布式的TOP N问题
- 322. Astar数据结构 + 公式
- 334. 代码实现
- 345. 总体代码
- 35堆排序
- 36单源最短路
- 37思维导图
- 38链表
- 39回溯
- 40贪心
- 41动态规划
- 42排序