大数据和空间限制问题专题(二)

原创 2017年01月03日 16:51:00

大数据和空间限制问题专题(二)

(一).认识布隆过滤器

【题目】100亿个不安全的网页黑名单,每个网页的URL最多占用64字节,现在想要实现一种网页过滤系统,可以根据网页的URL判断该网页是否在黑名单上,要求该系统允许有万分之一以下的判断失误率,并且使用的额外空间不要超过30G。

(1).如果遇到网页黑名单系统,垃圾邮件过滤系统,爬虫的网址判断重复系统,又看到系统容忍一定的失误率,但是对空间有严格要求,
很可能是需要使用布隆过滤器的知识求解。

(2)布隆过滤器可以精确的代表一个集合,可以精确判断某一元素是否在此集合中,精确程度由用户的具体设计决定,做到100%的精确即正确是不可能的。

详细的解析在我的这篇博客给出:布隆过滤器


(二).只用2GB内存在20亿个整数中找到出现次数最多的数

【题目】有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数。

【分析】很明显第一反应是通过哈希表对20亿个整数进行词频统计。哈希表的key是32位的整数,value最坏打算是20亿个,需要4B存储。32位整数用4B内存存储,2^32 约等于42亿,所以20亿可以用4B内存存储。所以一共需要的内存远超于2GB!一条记录需要8B存储,当哈希表的记录数为2亿个时,至少需要1.6GB的内存!
这里写图片描述

【解决方法】把包含20亿个整数的大文件通过哈希函数分流为16小文件,根据哈希函数的基本性质,相同的整数必将被分配到同一小文件中,并且只要哈希函数足够优秀,得到哈希值均匀,那么所有小文件最坏打算也不超过2亿个整数,这时候在符合内存要求的情况下通过哈希表进行词频统计,最终将每个小文件出现最多的词频进行比较,最终得出总的结论。
这里写图片描述

(三).40亿个非负数整数中找到没出现的数

【题目】32位无符号整数范围0~4294967295,现在有一个正好包含40亿个整数的文件,所以整个范围中必然有没有出现的数。可以使用最多1GB的内存,怎么找到所有没出想过的数。

【分析】如果用哈希表存储,40亿条记录,40亿*4B 约等于16GB!所以考虑用bitmap模型!2^32位 =512MB,符合内存要求!当出现7000时,在arr[7000]处赋值为1,以此类推,将40亿个整数遍历处理! 当处理完成之后,在遍历一次,arr[i]==0的下标即为没有出现过数的值!
这里写图片描述

【题目】内存限制为10MB,但是只用找到一个没有出现过的数即可。

【分析】考虑512/64 =8MB,8MB符合内存要求。所以将2^32个分为64个区间。由题目可知必然有区间计数不足2^32/64。

如何找出计数不足的区间呢? 通过取模方法,遍历40亿个整数,将整数落在某个区间上对计数变量加一,最终遍历完后随意取出一个区间进行关注。

再遍历40亿个数,对这40亿个数只关注落在取出区间的整数。并且用bitmap统计出区间内的数出现的情况。


(四).找到100亿个URL中重复的URL

【题目】有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL。

【分析】bitmap使用于给定范围,这样可以固定bit类型数组的大小!此题URL不能固定范围,所以使用哈希函数的分流功能。哈希函数有一个重要性质:同一个输入值将产生同一个哈希值,最终在哈希表中的分布地址也必然相同,利用该性质,我们常常在处理大数据问题时由于空间不够,把大文件通过哈希函数分配到机器,或者通过哈希函数把大文件划分成小文件,一直划分,直到划分的结果满足资源限制的要求。

【补充题目】某搜索公司一天的搜索词汇是海量的(百亿级数据量),请设计出一种每天最热top100词汇的可行方法

【分析】这个又是词汇重复问题!先用哈希函数把百亿数据分流到不同服务器中,如果分流到的数据过大,继续把大文件通过哈希函数分流为子文件。在子文件中用哈希表统计每种词及其词频。遍历哈希表时使用大小为100的大顶堆来选出每个小文件的Top100(整体未排序),再将每个小文件词频的大顶堆排序,得到排序后的Top100。再用每个小文件的Top100进行外排序,最终求得整个百亿数据量的top100。
这里写图片描述

【注意】对于Top100来说,除了哈希函数和哈希表做词频统计外,还常用堆结构和外排序的手段进行处理。


(五).40亿个非负整数中找到出现俩次的数

【分析】bitmap模型变形,申请一个2^32 *2长度的bit数组进行操作。

【补充题目】可以使用最多10MB的内存,怎么找到这40亿个整数的中位数!

【分析】用分区间的方式进行处理,长度为2MB的无符号整数数组占用内存空间为8MB。所以将区间数量定义为2^32/2M ,向上取整为2148个区间。
遍历40亿个整数,对每个整数进行遍历,得到每个区间的整数个数(不需要进行词频统计)!假设0~k-1的区间为19.998亿,加上k区间的话肯定就超过20亿,所以中位数在k区间上!

申请2MB长度的数组(占用内存为8MB),遍历40亿整数对K区间的数进行词频统计,最后在区间k上找到第0.002亿个数即可。


(六).一致性哈希算法基本原理

版权声明:本文为博主原创文章,未经博主允许不得转载。

80题题目+AC代码汇总 ~ 南阳 NYOJ

小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位。 声明:        题目部分皆为南阳OJ题目。     代码部分包含AC代码(可能...
  • qq_36617521
  • qq_36617521
  • 2017年02月28日 09:32
  • 2030

使用超图SuperMap制作气象类专题图全攻略(一)

首先进行一下效果展示: 本文将介绍通过使用supermap完成一副降雨图的制作。内容绝对详细。 一、数据准备 制作降雨图,首先要准备地图数据和降雨数据。 1.地图数据 首先需...
  • lucahan
  • lucahan
  • 2016年08月14日 20:49
  • 2592

2015程序设计实习之第二次上机周六

A:放苹果(POJ1664) B:古代密码 C:棋盘问题 D:求平均年龄 E:拦截导弹 F:Flip Game G:最大子矩阵 H:Tour...
  • Irene_ruru
  • Irene_ruru
  • 2015年06月03日 20:03
  • 2011

大数据和空间限制问题专题(一)

大数据和空间限制问题专题(一)
  • qq_21688757
  • qq_21688757
  • 2017年01月03日 11:51
  • 310

大数据和空间限制的问题!

1.打击灌水和欺诈信息的发布,58上的帖子从到展示要经历重重检测。检测规则一共有50个,一条帖子可能会同时被同时被多个规则拦截,也可能不被任何规则拦截。现有一个日志文件,每一行都记录着一个帖子ID和若...
  • nanaMasuda
  • nanaMasuda
  • 2016年08月30日 16:31
  • 570

【算法】大数据与空间限制

这篇blog 没有代码,主要是总结了一下处理大数据和有限内存情况下的一般解题思路。很多的代码面试题都给出了数十亿的数据量,或整数,或字符串,再给出1G甚至小到10M的内存空间,让在苛刻条件下完成搜索和...
  • dongrixinyu
  • dongrixinyu
  • 2017年12月22日 21:39
  • 29

【表空间支持的最大数据文件大小的算法】【数据库限制】【数据文件文件头保留数据块数】

本地管理表空间中设置不同大小的db_block_size时数据文件头保留空间对应如下:--?? db_block_size=2KB,文件头保留32个数据块,即64KB。 db_block_size...
  • u014343942
  • u014343942
  • 2014年05月21日 21:30
  • 244

大数据实验增加,导致虚拟机的根目录/ 磁盘空间不够,会带来各种问题, 使用gpated工具解决!!

使用gpated给linux根目录增加空间 原来的空间: [root@master ~]#  df -k Filesystem           1K-blocks      Used Ava...
  • duan_zhihua
  • duan_zhihua
  • 2016年03月04日 20:13
  • 898

Qcon全球软件开发大会[20160421]_大数据应用层层深入专题

  • 2016年05月04日 12:34
  • 6.09MB
  • 下载

Qcon全球软件开发大会[20160422]_大数据平台架构专题

  • 2016年05月04日 12:48
  • 14.98MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大数据和空间限制问题专题(二)
举报原因:
原因补充:

(最多只允许输入30个字)