青岛达内it培训 > 达内新闻
如何高效的处理亿万级数据?(5)
- 发布:青岛达内
- 来源:青岛达内
- 时间:2019-03-20 14:02
青岛达内的小编总结,那如何出队呢
出队一定是出数组的第一个元素,这么来第一个元素以前的位置就成了空位,我们需要把这个空位挪至叶子节点,然后把数组最后一个元素插入这个空位,把这个“空位”尽量往上挪。这种操作的复杂度也是Ο(logn)
适用范围
海量数据前n大,并且n比较小,堆可以放入内存
基本原理及要点
最大堆求前n小,最小堆求前n大。方法,比如求前n小,我们比较当前元素与最大堆里的最大元素,如果它小于最大元素,则应该替换那个最大元 素。这样最后得到的n个元素就是最小的n个。适合大数据量,求前n小,n的大小比较小的情况,这样可以扫描一遍即可得到所有的前n元素,效率很高。
扩展
双堆,一个最大堆与一个最小堆结合,可以用来维护中位数。
100w个数中找最大的前100个数
用一个100个元素大小的最小堆即可。

寻找热门查询,300万个查询字符串中统计最热门的10个查询
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门),请你统计最热门的10个查询串,要求使用的内存不能超过1G.
解答:由上题,我们知道,数据大则划为小的,如一亿个IP求Top 10,可先%1000将IP分到1000个小文件中去,并保证一种IP只出现在一个文件中,再对每个小文件中的IP进行HashMap计数统计并按数量排序,最后归并或者最小堆依次处理每个小文件的Top10以得到最后的结果
但如果数据规模比较小,能一次性装入内存呢?比如这题,虽然有一千万个Query,但是由于重复度比较高,因此事实上只有300万的Query,每个Query 255字节,因此我们可以考虑把他们都放进内存中去(300万个字符串假设没有重复,都是最大长度,那么最多占用内存3M*1K/4=0.75G.所以可以将所有字符串都存放在内存中进行处理),而现在只是需要一个合适的数据结构,在这里,HashMap绝对是我们优先的选择。
所以我们放弃分而治之hash映射的步骤,直接上hash统计,然后排序。针对此类典型的TOP K问题,采取的对策往往是:HashMap + 堆
以上就是青岛达内给大家做的内容详解,更多关于UI的学习,请继续关注青岛达内
最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 哈尔滨
- 济南
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 长沙
- 昆明
- 太原
- 无锡
- 石家庄
- 南宁
- 佛山
- 珠海
- 宁波
- 保定
- 呼和浩特
- 洛阳
- 烟台
- 运城
- 潍坊
如何高效的处理亿万级数据?(5)
- 发布:青岛达内
- 来源:青岛达内
- 时间:2019-03-20 14:02
青岛达内的小编总结,那如何出队呢
出队一定是出数组的第一个元素,这么来第一个元素以前的位置就成了空位,我们需要把这个空位挪至叶子节点,然后把数组最后一个元素插入这个空位,把这个“空位”尽量往上挪。这种操作的复杂度也是Ο(logn)
适用范围
海量数据前n大,并且n比较小,堆可以放入内存
基本原理及要点
最大堆求前n小,最小堆求前n大。方法,比如求前n小,我们比较当前元素与最大堆里的最大元素,如果它小于最大元素,则应该替换那个最大元 素。这样最后得到的n个元素就是最小的n个。适合大数据量,求前n小,n的大小比较小的情况,这样可以扫描一遍即可得到所有的前n元素,效率很高。
扩展
双堆,一个最大堆与一个最小堆结合,可以用来维护中位数。
100w个数中找最大的前100个数
用一个100个元素大小的最小堆即可。

寻找热门查询,300万个查询字符串中统计最热门的10个查询
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门),请你统计最热门的10个查询串,要求使用的内存不能超过1G.
解答:由上题,我们知道,数据大则划为小的,如一亿个IP求Top 10,可先%1000将IP分到1000个小文件中去,并保证一种IP只出现在一个文件中,再对每个小文件中的IP进行HashMap计数统计并按数量排序,最后归并或者最小堆依次处理每个小文件的Top10以得到最后的结果
但如果数据规模比较小,能一次性装入内存呢?比如这题,虽然有一千万个Query,但是由于重复度比较高,因此事实上只有300万的Query,每个Query 255字节,因此我们可以考虑把他们都放进内存中去(300万个字符串假设没有重复,都是最大长度,那么最多占用内存3M*1K/4=0.75G.所以可以将所有字符串都存放在内存中进行处理),而现在只是需要一个合适的数据结构,在这里,HashMap绝对是我们优先的选择。
所以我们放弃分而治之hash映射的步骤,直接上hash统计,然后排序。针对此类典型的TOP K问题,采取的对策往往是:HashMap + 堆
以上就是青岛达内给大家做的内容详解,更多关于UI的学习,请继续关注青岛达内
最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 厦门
- 哈尔滨
- 济南
- 福州
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 大连
- 长沙
- 昆明
- 温州
- 太原
- 南昌
- 无锡
- 石家庄
- 南宁
- 中山
- 兰州
- 佛山
- 珠海
- 宁波
- 贵阳
- 保定
- 呼和浩特
- 东莞
- 洛阳
- 潍坊
- 烟台
- 运城