大数据下-巧用位数组排序和判重及布隆过滤器的简单应用

技巧一:对无重复的数据集排序

对于给定的数据集,(2,4,1,12,9,7,6)如何对它排序?

第一种方式、使用最基本的冒泡,快排、基数排序等,最小时间复杂度 0(nlogn)。

第二种方式、使用位数组排序算法。

对于数据集排序,相信大多数都会在第一时间便能想起来,而对于方法二,就需要一定的思考了。

对于我们给定的数据集,最大数值为 12,那么我们可以开辟一个长度为 12 的字节数组,如下图,都初始化为0,

然后读取数据,例如,读取到 2 的时候,就将下标为 1 的位置为 1,即 a[2-1] = 1,此时数组状态如下图:

当读到 4 的时候,数组的状态如下图:

当读取完之后,数组的状态如下图:

此时,我们再遍历一遍该字符数组,依次记录值为 1 的所有元素的下表,即 0,1,3,5,6,8,11,也就是1,2,4,6,7,9,12。

比较方法一和方法二:

方法一,最好情况下的时间空间复杂度为 O(nlogn),O(nlogn)。

方法二,时间复杂度和空间复杂度完全依赖于数据集中最大的数字,为 O(n),如果数据集合适,它是十分高效的算法。它的局限也很明显:数据集需是无重复集,数据分布比较密集,数据区间上下限差不能太大,最大数不宜过大。

技巧二:对有重复的数据进行判重

对于给定数据集(2,4,1,12,2,9,7,6,1,4)如何找出重复出现的数字?

方法一、使用排序算法排序,然后遍历找出重复出现的元素。

方法二、首先开辟出长度为 12 的位数组,并初始化为0。然后遍历元素集,对于每次出现的数据,如2,则令 a[2-1] = 1 ,如此这般,一直遍历到12,此时位数组的状态如下图:

对于下一个元素 2,当访问 a[1]时发现a[1]=1,说明2之前出现过,则2即为重复出现的数。

实际应用案例

应用1:某文件中包含一些 8 位的电话号码,统计电话号码出现的个数?

8位电话号码,最大的整数,为 99999999,需建立的位数组大概占用 100000000/8 = 1250000B = 12500K = 12.5MB,可以看出需要大约 12.5MB的空间。

应用2:某文件中包含一些 8 位的电话号码,统计只出现一次的号码?

这里需要扩展一下,可以用两个 bit 表示一个号码,00 代表没有出现过,01代表出现过一次,10表示出现过两次,11表示三次。此时,大约需要 25MB 的空间。

应用3:有两个文件,文件1中有1 亿个10位的qq号码,文件2中有5千万个10位的QQ号码,判断两个文件中重复出现的QQ号?

同应用1, 10位的QQ号最大数为 9999999999 , 需建立的数组大约占用 1250MB 即 1.25G ,全部初始化为0,。读取第一个文件,将出现过的位标记为1。标记完之后,再读取第二个文件,对于读取到每一个号码,如果该号码对应的位为1,则说明该号码为重复QQ号。

应用4:有两个文件,文件1中含有1亿个15位的QQ号码,文件2中含有5千万个15位的QQ号码,判断两个文件中重复出现的QQ号?

在这里QQ号码的位数升级为15位了,如果还采用应用3的方法,此时需要的空间大概有125000GB = 125TB,显然这是不现实的,那么我们就要寻求别的解决方案。

Bloom Filter(布隆过滤器)

对于Bit-Map分析一下,每次都会开辟一块表示最大数值大小的bit数组,比如情景1中的12,将对应的数据经过映射到bit数组的下标,这其实是一种最简单的hash算法,对1去模。在上述应用4中,当qq号码改为15位的时候,Bit-Map就不太好用了,如何改进呢?解决办法:减少bit数组的长度,增加hash函数的个数。

对于每一个qq号码,我用K个hash函数,经过k次映射,得到k个不同位置,假设k=3,那么对于一个qq号码,映射到位数组中3个不同的位置。

当读取第二个包含5千万个qq号码的文件的时候,使用同样的3个hash函数进行映射,当3个位置全部是1的时候才表示出现过,否则表示没有出现过。

这种判重算法对于大数据量的情况下是十分高效的,因为所有的操作都是在内存中完成的,避免了磁盘读写对速度的影响。

但是这种算法并不能保证 100%的准确性,只能保证可控制的误差范围。这种可控误差的精确数学公式会在 BloomFilter 有关的文章中专门介绍。

时间: 2024-10-25 21:09:53

大数据下-巧用位数组排序和判重及布隆过滤器的简单应用的相关文章

大数据下的数据分析平台架构zz

转自http://www.cnblogs.com/end/archive/2012/02/05/2339152.html 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析已经成为一个非常重要且紧迫的需求. 作为一家互联网数据分析公司,我们在海量数据的分析领域那真是被“逼上梁山”.多年来在严苛的业务需求和数据压力下,我们几乎尝试了所有可能的大数据分析方法,最终落地于Had

【CSWS2014 Summer School】大数据下的游戏营销模式革新-邓大付

大数据下的游戏营销模式革新 邓大付博士腾讯专家工程师 Bio:毕业于华中科技大学,现任腾讯IEG运营部数据中心技术副总监,负责腾讯游戏的数据挖掘相关工作,包括有用户画像,推荐系统,基础算法研究等.主要感兴趣的领域包括有分布式计算平台系统架构,机器学习算法等. =================================================== 这个讲座时间比较短,内容也比较少,不过还是让我开拓了眼界,比如TX游戏数据的规模.游戏服务器的规模以及游戏中一些算法.模型的应用. ==

MySQL大数据下Limit使用

对于一直用Oracle的我,今天可是非常诧异,MySQL中同一个函数在不同数量级上的性能居然差距如此之大. 先看表ibmng(id,title,info)  唯一  id key 索引title 先看看两条语句: select * from ibmng limit 1000000,10 select * from ibmng limit 10,10 很多人都会认为不会有多大差别,但是他们都错了,差别太大了,(可能机器不同有点差距,但绝对10倍以上)具体执行时间留给好奇的同学. 这是为什么呢,都是

大数据下的数据分析平台架构

时间:2011-08-15 14:59 作者:谢超 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析已经成为一个非常重要且紧迫的需求. 谢超 Admaster数据挖掘总监,云计算实践者,10年数据仓库和数据挖掘咨询经验,现专注于分布式平台上的海量数据挖掘和机器学习. 作为一家互联网数据分析公司,我们在海量数据的分析领域那真是被“逼上梁山”.多年来在严苛的业务需求和数据压

大数据下,24小时精准医疗或将在2020年实现?

日前,在2016英特尔生命科学信息技术论坛上,一款名为GTX One的生物计算加速平台现身,引发了业内对于精准医疗行业新的看法.这款GTX One加速系统,通过算法创新充分释放FPGA的计算能力,相当于将一台超级计算机压缩到一个小盒子里:一张FPGA加速卡就能达到60台高性能至强Xeon CPU服务器的计算性能,极大地缩短了生物信息数据的计算时间.事实上,通过生物数据与医疗行业结合,生物医疗行业正在经历高速发展.此次英特尔在京推出的“英特尔精准医疗伙伴计划(Intel BioIT Partner

【阿里云产品公测】大数据下精确快速搜索OpenSearch

[阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like 或者FIND_IN_SET来实现.后者性能稍微好点但是必须要逗号分隔才可以实现匹配.甚至多条件的话还可能用到OR这是极影响系统性能的. 最近公司项目需要.主要是系统查询缓慢.并且查询精度不敢恭维.一开始想到的是Lucene 毕竟是一个开放源代码的全文检索引擎工具包 并且官方还在持续更新中.当时闲暇时

大数据下Limit使用(MySQL)

对于一直用Oracle的我,今天可是非常诧异,MySQL中同一个函数在不同数量级上的性能居然差距如此之大. 先看表ibmng(id,title,info)  唯一  id key 索引title 先看看两条语句: select * from ibmng limit 1000000,10 select * from ibmng limit 10,10 很多人都会认为不会有多大差别,但是他们都错了,差别太大了,(可能机器不同有点差距,但绝对10倍以上)具体执行时间留给好奇的同学. 这是为什么呢,都是

大数据下一站:智慧医疗?

基于大数据技术,有朝一日,机器的诊疗准确率甚至可能超过人类历史上最有名的名医. 日前,美国最大的医疗保险公司 Wellpoint已经开始通过运用IBM的超级计算机“Watson”帮助医生来针对病人的病情进行诊断,服务7000万人.在癌症治疗领域,目前需要 一个月或更长时间才能制定出针对性的药物治疗方案,未来利用Watson的认知计算技术可以将周期缩短至一天,极大提高癌症患者的治愈率. “Watson在医疗.医药行业可以帮助肿瘤中心做几个复杂癌症疾病的诊断和数据分析:还能够帮助分析疾病风险,保证理

大数据下的“商业学习实验” 能否改变超市业?

浓缩观点 消费动力不足.利润下滑.电商侵蚀,大型超市的突围之路在哪里?掌握以大数据分析为基础的“商业实验学习”的5个方向,将给零售企业带来数以亿计的经济效益. 零售企业可能每天都会产生令人兴奋但有些风险的创意,这些点子要不要做?效果又会如何? 大数据下的“商业学习实验” 台湾的全家便利店,在台湾拥有2000多家门店.它们在调查中发现,消费者对现煮咖啡有显著需求.对全家而言,是贸然在所有门店都提供现煮咖啡,还是将这些咖啡机将优先添置在某些店铺?现煮咖啡大卖的同时,是否会挤占店里其他咖啡及饮料产品的