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

原创 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亿个数即可。


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

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

相关文章推荐

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

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

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

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

大数据时代的精准推送限制了我们的视野

现在我们处于一个大数据时代,我们的喜好、习惯、每天出入的场所、我们关注的新闻甚至于我们的一切都在被这个大数据时代所监听。亚马逊知道我喜欢读IT类的书,网易云知道我喜欢日系音乐,沃尔玛知道我喜欢甜品,我...

突破R内存限制的企业级大数据挖掘利器:Microsoft R Server 快速上手

Microsoft R Server 是一款基于R的企业级大数据分析平台. 支持各种大数据统计分析,预测性模型和机器学习功能 支持基于R的全套数据分析过程-探索、分析、可视化和建模等. 通过利用和扩...

一道面试题(大数据量 内存限制)

问题:3000w数据的表,取某项字段前50项数据 ,内存2g方案:一个数据文件,有3000W行,每行有一个id号,文件内容无任何排序。现在让你把id前 TOP 位取出来, TOP = 50.要求:你的...

突破php.ini上传文件限制,phpmyadmin导入大数据方法

Normal 0 7.8 磅 0 2 false false false MicrosoftIn...

【开源夏令营优秀开题报告】专题之三-云与大数据合集

5个提案的14个开题报告,涉及数据可视化实践、社交云电视模型、Spark上流式机器学习算法实现、基于云存储的Linux系统增强服务和网络拓扑距离的高效KNN查询。

面试题目-大数据量专题

1. 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。  2. 有10个文件,每个文件1G, 每个文件的每一行都存放的是用户的qu...
  • nengyu
  • nengyu
  • 2012-05-29 09:44
  • 1593
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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