利用位图进行海量文件运算处理的方法

文档序号:8258682阅读:263来源:国知局
利用位图进行海量文件运算处理的方法
【技术领域】
[0001] 本发明涉及利用位图进行海量文件运算处理的方法。
【背景技术】
[0002] 在很多软件系统中,都存在类似以下应用场景:
[0003] 从两批号码中,取两者交集。例如QQ有3000万会员,黄钻有2000万,需要提取既 是会员也是黄钻用户的名单。
[0004] 对一批号码进行去重处理,例如某电商网站进行了 10. 1大促活动,有7000万人次 通过QQ号码登录进行了浏览和购买。导出这些购买记录后,提取出QQ号码列表,每个QQ 只提取一次。
[0005] 对两批数据取并集,例如玩A游戏的用户有300万,玩B游戏的用户有450万,有一 款同类型的新游戏上市,准备对A、B两款游戏的玩家投放广告,但每个用户只能投放一次, 需要提取A、B两个游戏的玩家名单取并集,并去重。
[0006] 提取在一个数据集,但是不在另一个数据集的部分。例如有3000万QQ会员用户, 2000万QQ黄钻用户,需要提取是QQ会员,但不是黄钻的用户名单。
[0007] 此类应用可以抽象为,数据集A有M个元素,数据集B有N个元素,需要提供一种 方法,对A和B取交集、取并集、对某个数据集去重、取差集;
[0008] 在一般的软件系统应用中,针对数据集取交集去重等功能,一般使用数据库,或者 操作系统提供的sort排序,uniq去重,comm提取交集或并集。
[0009] 当数据量较小的时候,比如A、B数据集的规模在10W以内时,上述方法能很好的解 决问题。但当数据集规模增加时,上述方法运算耗时急剧增加。

【发明内容】

[0010] 本发明的目的是提供一种利用位图进行海量文件运算处理的方法。
[0011] 为了实现上述目的,本发明提供的技术方案为:提供一种利用位图进行海量文件 运算处理的方法,包括如下步骤:插入一个数据到位图;判断某个数是否在位图中;打印位 图中的所有数据集;去重处理;取并集或交集或差集。
[0012] 需要512M空间存储位图数据,所有数据需要初始化清零。
[0013] 插入一个数据到位图,需要将对应的位置为1。
[0014] 判断数据集中是否已经存在一个数,需要判断对应的bit位是否为1。
[0015] 与现有技术相比,本发明利用位图进行海量文件运算处理的方法中,插入一个数 据到位图;判断某个数是否在位图中;打印位图中的所有数据集;去重处理;取并集或交集 或差集。本发明基于C/C++语言的位运算,提供对海量数据集进行取交集、并集、去重、差集 等运算功能。极大提高数据运算处理速度。
[0016] 通过以下的描述并结合附图,本发明将变得更加清晰,这些附图用于解释本发明 的实施例。
【附图说明】
[0017] 图1为本发明利用位图进行海量文件运算处理的方法的第一个实施例的示意图。
[0018] 图2为本发明利用位图进行海量文件运算处理的方法的第二个实施例的示意图。
[0019] 图3为本发明利用位图进行海量文件运算处理的方法的第三个实施例的示意图。
[0020] 图4为本发明利用位图进行海量文件运算处理的方法的第四个实施例的示意图。 图5为计算机系统中一个字节由8个bit位组成的示意图。
【具体实施方式】
[0021] 现在参考附图描述本发明的实施例,附图中类似的元件标号代表类似的元件。
[0022] 本发明核心是利用位图来记录某个数据,是否有在数据集中出现过。位图查找的 时间复杂度为常量,极大提高处理效率。
[0023] 如图5所示,在计算机系统中,一个字节由8个bit位组成,每个位可以为0或1 两种状态。一个字节最多可以表示8个数是否存在,例如从0-7bit,分别表示0-7这8个数 字是否有在数据集中。如果有存在,把对应的bit位置1。
[0024]
[0025] 目前常用的32位无符号整数,取值范围为0到4294967295。如果用一个字节来表 示,需要4G内存。在32位操作系统中,应用程序可用内存一般在2G以内。用bit位来表 示,则只需要4G/8 = 512M空间,提高空间效率。
[0026] 请参考图1,该图所示的实施例中,求两个数集的交集,首先是读取数集A;将A中 的每个数据调用insert插入位图;读取数集B ;判断数集B中的数据是否在位图中;若是, 则属于交集;若否,则不属于交集。
[0027] 请参考图2,该图所示的实施例中,求两个数集的差集,首先是读取数集A;将A中 的每个数据调用insert插入位图;读取数集B ;判断数集B中的数据是否在位图中;若是, 则不属于差集;若否,则属于差集。因此可见,求两个数据集的差集与求两个数据集的交集, 其流程基本相同。
[0028] 请参考图3,该图所示的实施例中,求两个数据的并集,首先是读取数集A;将A中 的每个数据调用insert插入位图;读取数集B ;将B中的每个数据调用insert插入位图; 打印整个位图中包含的数据。
[0029] 请参考图4,该图所示的实施例中,为对一个数集进行去重处理,首先是读取数集 A ;将A中的每个数据调用insert插入位图;打印整个位图中包含的数据。
[0030] 测试对比结果如下:
[0031]
【主权项】
1. 一种利用位图进行海量文件运算处理的方法,其特征在于,包括如下步骤;插入一 个数据到位图;判断某个数是否在位图中;打印位图中的所有数据集;去重处理;取并集或 交集或差集。
2. 如权利要求1所述的利用位图进行海量文件运算处理的方法,其特征在于,需要 512M空间存储位图数据,所有数据需要初始化清零。
3. 如权利要求1所述的利用位图进行海量文件运算处理的方法,其特征在于,插入一 个数据到位图,需要将对应的位置为1。
4. 如权利要求1所述的利用位图进行海量文件运算处理的方法,其特征在于,判断数 据集中是否已经存在一个数,需要判断对应的bit位是否为1。
【专利摘要】本发明公开了一种利用位图进行海量文件运算处理的方法,包括如下步骤:插入一个数据到位图;判断某个数是否在位图中;打印位图中的所有数据集;去重处理;取并集或交集或差集。本发明能够对海量数据集进行取交集、并集、去重、差集等运算功能,极大提高数据运算处理速度。
【IPC分类】G06F17-30
【公开号】CN104572810
【申请号】CN201410652811
【发明人】国睿
【申请人】深圳市光息谷科技发展有限公司
【公开日】2015年4月29日
【申请日】2014年11月17日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1