思路:从简单的排序谈到BitMap算法,再谈到数据去重问题,谈到大数据量处理利器:布隆过滤器。

情景1:对无重复的数据进行排序

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

方法1:基本的排序方法包括冒泡,快排等。

方法2:使用BitMap算法

方法1就不介绍了,方法2中所谓的BitMap是一个位数组,跟平时使用的数组的唯一差别在于操作的是位。

首先是开辟2个字节大小的位数组,长度为16(该长度由上述数据中最大的数字12决定的)如图


 
      然后,读取数据,2存放在位数组中下标为1的地方,值从0改为1,4存放在下标为3的地方,值从0改为1....结果如图

最后,读取该位数组,得到排好序的数据是:(1,2,4,6,7,9,12)

比较方法1和方法2的差别:方法2中,排序需要的时间复杂度和空间复杂度很依赖与数据中最大的数字比如12,因此空间上讲需要开2个字节大小的内存,时间上需要遍历完整个数组。当数据类似(1,1000,10万)只有3个数据的时候,显然用方法2,时间复杂度和空间复杂度相当大,但是当数据比较密集时该方法就会显示出来优势。

情景2:对有重复的数据进行判重

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

首先是开辟2个字节大小的位数组,长度为16(该长度由上述数据中最大的数字12决定的)如图

当读取完12后,数组中的数据如下图:

当读取2的时候,发现数组中的值是1,则判断出2是重复出现的。

应用

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

8为最大是99 999 999,大约是99M的bit,12.5MB的内存,就可以统计出来出现的号码。

应用2:某文件中包含一些8位的电话号码,统计只出现一次的号码?(判断有谁出现并且指出现1次)

需要扩展一下,可以用两个bit表示一个号码,0代表没有出现过,1代表只出现过1次,2代表至少出现2次。

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

首先建立10的10次方个大小的位数组(占用内存大约是1.25G),全部初始化为0,读取第一个文件,对应的qq号存放到对应的未知,数值改为1,如果重复出现仍是1.读取完毕第一个文件后,读取第二个文件,对应的位置为1则表示重复出现。

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

应用4中,qq号码上升为15位的时候,显然内存是不够用了,这个时候怎么办?使用Bloom Filter(布隆过滤器)

Bloom Filter(布隆过滤器):

对于Bit-Map分析一下,每次都会开辟一块表示最大数值大小的bit数组,比如情景1中的16,将对应的数据经过映射到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的时候才表示出现过,否则表示没有出现过。

有什么疑问吗?

显然,对于一个qq号码,如果它在第一个文件中没有出现过,但是它映射的3个位置已经全部是1的情况会有吗?答案是会的,但是这种概率是可控的,可控的意思是:这种误差跟hash函数的个数和质量是有关系的,可以通过控制hash函数的个数和位数组的大小来控制误差概率。至于表示3者之间的关系精确的数学公式就不再详细研究了。

可以这样讲,布隆过滤器是Bit-Map的进一步扩展,对于大数据量判重,布隆过滤器可以在内存中进行判断,避免了对磁盘的读写,效率是很高的。以上是自己关于两者的理解,有错误望指教。

从另一个角度看大数据量处理利器:布隆过滤器相关推荐

  1. 从全生命周期管理角度看大数据安全技术研究

    从全生命周期管理角度看大数据安全技术研究 李树栋1,2, 贾焰2, 吴晓波3, 李爱平2, 杨小东4, 赵大伟5 1. 广州大学网络空间先进技术研究院,广东 广州 510006 2. 国防科技大学计算 ...

  2. 大数据审计的发展_从历史的角度看大数据审计发展

    龙源期刊网 http://www.qikan.com.cn 从历史的角度看大数据审计发展 作者:欧阳双 来源:<中小企业管理与科技 · 上旬刊> 2019 年第 08 期 [摘 要]党的十 ...

  3. 2015年《大数据》高被引论文Top10文章No.2——大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(上)...

    2015年<大数据>高被引论文Top10文章展示 [编者按]本刊将把2015年<大数据>高被引论文Top10的文章陆续发布,欢迎大家关注!本文为高被引Top10论文的No.2, ...

  4. 【2015年第4期】大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(上)...

    大数据时代的数据挖掘 -- 从应用的角度看大数据挖掘 李 涛1,2,曾春秋1,2,周武柏1,2,周绮凤3,郑 理1,2 1. 南京邮电大学计算机学院 南京 210023:2. 美国佛罗里达国际大学 迈 ...

  5. 物联网与大数据(二)从物联网看大数据

    前言 物联网.大数据.人工智能是近几年经常相提并论的概念.每一个概念背后都涵盖了丰富的技术和应用,三者各有特点,也互有重叠,甚至还有依赖.物联网侧重于让物体联网,形成万物互联的局面,这是物理世界深刻的 ...

  6. Laravel 使用PHP_XLSXWriter实现大数据量Excel导出

    我在去年写过一篇关于laravel的Excel导出文章:Laravel Excel 实现 Excel/CSV 文件导入导出功能,使用的是Laravel Excel实现的. 该扩展包含Excel导入导出 ...

  7. SAP ABAP 探索 CL_FDT_XL_SPREADSHEET 读取大数据量 Excel 的可能性

    SAP ABAP 探索 CL_FDT_XL_SPREADSHEET 读取大数据量 Excel 的可能性 引言: 今时不同往日了,特别是在电商和零售行业中,动不动一个导入的 Excel 就有几十万行几十 ...

  8. 2015年《大数据》高被引论文Top10文章No.2——大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(下)...

    2015年<大数据>高被引论文Top10文章展示 [编者按]本刊将把2015年<大数据>高被引论文Top10的文章陆续发布,欢迎大家关注!本文为高被引Top10论文的No.2, ...

  9. 【2015年第4期】大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(下)...

    大数据时代的数据挖掘 -- 从应用的角度看大数据挖掘(下) 李 涛1,2,曾春秋1,2,周武柏1,2,周绮凤3,郑 理1,2 1. 南京邮电大学计算机学院 南京 210023:2. 美国佛罗里达国际大 ...

最新文章

  1. 2019微生物组—宏基因组分析技术专题研讨会第四期
  2. Mybatis_映射文件配置
  3. ASP.NET Core端点路由中三种让人困惑的路由函数
  4. UVA - 247 Calling Circles(Floyd求传递闭包)
  5. 微软物联网平台再推新!
  6. jQuery入门[1]-构造函数
  7. python pyquery不规则数据的抓取_11. 数据提取-PyQuery
  8. matlab求解pde,matlab求解pde问题
  9. 学校机房计算机安全使用制度,学校机房安全管理制度
  10. 【3D建模制作技巧分享】Zbrush如何将图片转浮雕模型
  11. 湖畔大学梁宁:比能力重要1000倍的,是你的底层操作系统
  12. 对三极管特性曲线的理解
  13. 博士阶段能学到什么硕士学不到的东西?
  14. 正则表达式判断是否为纯数字
  15. 机器人编程要学哪些知识
  16. 微信公众号服务器接收不到粉丝留言消息
  17. 妙赞大讲糖:糖友食谱的三宜
  18. 基于搜索指数预测各城市首轮感染高峰期;AI+眼镜:失聪者看字幕盲人听语音;ChatGPT VSCode插件教程;谷歌开源注意力中心模型 | ShowMeAI资讯日报
  19. OkHttp实现多线程断点续传下载,单例模式下多任务下载管理器,一起抛掉sp,sqlite的辅助吧
  20. 地震勘探专业词汇(2)FWI专题

热门文章

  1. 【转】2.3async中必须始终返回Task(@Ron.liang)
  2. 【转】刨根究底字符编码之零——前言
  3. 第六节:WebApi的部署方式(自托管)
  4. 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题
  5. oracle 600 session,记一次ORA-600[4042]故障的处理
  6. aop实现原理_Java:由浅入深揭开 AOP 实现原理
  7. 【Python CheckiO 题解】Time Converter (12h to 24h)
  8. java不建议用全局变量吗_不要使用全局变量, ThreadLocal也不行
  9. java中sql之count_按SQL Server中的count()子句分组
  10. 【CF - 699C】 Vacations (日程安排 dp)