青岛达内的小编总结,给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,找出a、b文件共同的url
可估计每个文件的大小为5G×64=320G,远远大于内存限制。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法
分而治之/hash映射
遍历文件a,对每个url求取
然后根据所取得的值将url分别存储到1000个小文件
(漏个a1)中。
这样每个小文件大约300M
遍历文件b,采取和a相同方式将url分别存储到1000个小文件
这样处理后,所有可能相同的url都在对应的小文件
不对应的小文件不可能有相同的url.然后我们只要求出1000对小文件中相同的url即可
HashSet统计
求每对小文件中相同的url时,可以把其中一个小文件的url存储到HashSet
然后遍历另一个小文件的url,看其是否在刚才构建的HashSet中,如果是,那么就是共同的url,存到文件即可

此即第一个秘技
分而治之/hash映射 + hash统计 + 堆/快速/归并排序
再看最后4道题
在海量数据中找出重复次数最多的
先hash
然后求模映射为小文件,求出每个小文件中重复次数最多的,并记录重复次数
最后找出上一步求出的数据中重复次数最多的即为所求
千万或上亿数据(有重复),统计次数最多的前N个数据
上千万或上亿的数据,现在的机器的内存应该能存下
考虑采用HashMap/搜索二叉树/红黑树等来进行统计次数
最后利用堆取出前N个出现次数最多的数据
一个文本文件,约一万行,每行一个词,统计出其中最频繁的10个词,给出思想及时间复杂度分析
方案1
如果文件较大,无法一次性读入内存,可采用hash取模,将大文件分解为多个小文件
对于单个小文件利用HashMap统计出每个小文件中10个最常出现的词
然后归并
找出最终的10个最常出现的词
方案2
通过hash取模将大文件分解为多个小文件后
-用trie树统计每个词出现的次数,时间复杂度O(n*le)(le:单词平均长度),最终同样找出出现最频繁的前10个词(可用堆来实现),时间复杂度是O(n*lg10)。
以上就是青岛达内给大家做的内容详解,更多关于UI的学习,请继续关注青岛达内