大数处理问题汇总

1、找出中位数

思想: 划分区间,遍历数组将对应的数据放在对应的桶中,并统计每个桶中的元素数量,只要两次读取全部的数据就可以

重点/细节: (1)、两次读取数据,第一次划分区间划分的比较细,第二次划分就可以粗一点

划分区间的思想另外一个应用:找出最大的重复的URL\IP\WORLD,首先就是进行一个映射hash(因为对字符无法进行大小的划分,数字最好),然后进行大区间的划分,再划分更小的区间。

(2)、对数据的大小以及内存的计算(1G=10^9byte 1亿=10^8),具体的计算可以看这个,里面还有其他方法的分析

2、找出重复的IP 或 重复/出现 次数最高的URL

基本思想: 只有利用哈希才能找到重复的元素,所以还是利用哈希的思想
比如有10个文件/数据,将这么多的数据哈希映射到1000个小文件中,然后再对每一个小的文件进行哈希处理,这样就不是大数问题了(其中映射到不同的文件的思想就是桶的思想,比如想将数据映射到0-2000的区间,直接 hash(x)%2000,统计出现频率的话一般用 hashmap)

http://blog.sina.com.cn/s/blog_7ebe664201013ggv.html (用的桶实现)

note: 单找重复的URL ,其中还可以用 bloom filter

3、找出top10 / top100大的数

**思想:**面对大数问题,本质还是改为小数据量问题,所以这里将不同的数据分为不同的分区,再找出分区中最大的N个数据,然后统一做对比。一般来说有下述两种方式来实现:
(1)、可以对最小堆来实现,而不是最大堆,然后不断的读取数据
(2)、每次读取一千万或者其他大小的进行排序,找出最大的100个数,然后不断这样,最后将这些前100的放在一起,再找出最后的top100),找出top100的过程可以根据最小堆实现或者快拍实现等

——————————————————————

资料

这篇介绍的都比较详细,重复的,大数据量的,小数据量的,以及topk的都有介绍。

链接地址

Bloom Filter:

和 bitmap 类似的处理方式,设置 K 个哈希函数,将元素分别使用K个哈希函数得到 K 个位置,然后对应映射到M位位数组的位置,当某个元素映射的K个位置都被置为1时,我们大概率认为该元素已经存在。

bitmap

使用位来指示是否该位置被占用,一般用于重复元素的查找和堆数据的排序,还可以有 2-bitmap n-bitmap,看是否有重复等等

hashmap

也是一个 key_value的形式,在此之外加上一个next指针指向下一个元素,最主要的是其采用数组+(链表/红黑树),数组具有查询效率高,链表和红黑树的插入删除效率高。
最通俗易懂搞定HashMap的底层原理

其中里面涉及到了很多hashset hashmap(hashset是一个set也就是集合,但不是有序的也允许重复,重点实在hash,hashmap也就是一个键值对,重点也在hash,和C++里面的set map不同)

计算问题

1字节=8位 (1 byte = 8bit)
eg: 1 int = 4 byte = 32 bit
1G = 10^9 byte
1 亿 = 10^8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值