《利用位图进行海量文件运算处理的方法.pdf》由会员分享,可在线阅读,更多相关《利用位图进行海量文件运算处理的方法.pdf(8页完整版)》请在专利查询网上搜索。
本发明公开了一种利用位图进行海量文件运算处理的方法,包括如下步骤:插入一个数据到位图;判断某个数是否在位图中;打印位图中的所有数据集;去重处理;取并集或交集或差集。本发明能够对海量数据集进行取交集、并集、去重、差集等运算功能,极大提高数据运算处理速度。。
CN201410652811.X
2014.11.17
CN104572810A
2015.04.29
实审
审中
实质审查的生效IPC(主分类):G06F 17/30申请日:20141117|||公开
G06F17/30
深圳市光息谷科技发展有限公司
国睿
518000广东省深圳市南山区招商街道南海大道1029号万融大厦B座G层01-02,06-12号房
深圳市中联专利代理有限公司44274
李俊
本发明公开了一种利用位图进行海量文件运算处理的方法,包括如下步骤:插入一个数据到位图;判断某个数是否在位图中;打印位图中的所有数据集;去重处理;取并集或交集或差集。本发明能够对海量数据集进行取交集、并集、去重、差集等运算功能,极大提高数据运算处理速度。
权利要求书1. 一种利用位图进行海量文件运算处理的方法,其特征在于,包括如下步骤:插入一个数据到位图;判断某个数是否在位图中;打印位图中的所有数据集;去重处理;取并集或交集或差集。2. 如权利要求1所述的利用位图进行海量文件运算处理的方法,其特征在于,需要512M空间存储位图数据,所有数据需要初始化清零。3. 如权利要求1所述的利用位图进行海量文件运算处理的方法,其特征在于,插入一个数据到位图,需要将对应的位置为1。4. 如权利要求1所述的利用位图进行海量文件运算处理的方法,其特征在于,判断数据集中是否已经存在一个数,需要判断对应的bit位是否为1。
说明书利用位图进行海量文件运算处理的方法 技术领域 本发明涉及利用位图进行海量文件运算处理的方法。 背景技术 在很多软件系统中,都存在类似以下应用场景: 从两批号码中,取两者交集。例如QQ有3000万会员,黄钻有2000万,需要提取既是会员也是黄钻用户的名单。 对一批号码进行去重处理,例如某电商网站进行了10.1大促活动,有7000万人次通过QQ号码登录进行了浏览和购买。导出这些购买记录后,提取出QQ号码列表,每个QQ只提取一次。 对两批数据取并集,例如玩A游戏的用户有300万,玩B游戏的用户有450万,有一款同类型的新游戏上市,准备对A、B两款游戏的玩家投放广告,但每个用户只能投放一次,需要提取A、B两个游戏的玩家名单取并集,并去重。 提取在一个数据集,但是不在另一个数据集的部分。例如有3000万QQ会员用户,2000万QQ黄钻用户,需要提取是QQ会员,但不是黄钻的用户名单。 此类应用可以抽象为,数据集A有M个元素,数据集B有N个元素,需要提供一种方法,对A和B取交集、取并集、对某个数据集去重、取差集; 在一般的软件系统应用中,针对数据集取交集去重等功能,一般使用数据库,或者操作系统提供的sort排序,uniq去重,comm提取交集或并集。 当数据量较小的时候,比如A、B数据集的规模在10W以内时,上述方法能很好的解决问题。但当数据集规模增加时,上述方法运算耗时急剧增加。 发明内容 本发明的目的是提供一种利用位图进行海量文件运算处理的方法。 为了实现上述目的,本发明提供的技术方案为:提供一种利用位图进行海量文件运算处理的方法,包括如下步骤:插入一个数据到位图;判断某个数是否在位图中;打印位图中的所有数据集;去重处理;取并集或交集或差集。 需要512M空间存储位图数据,所有数据需要初始化清零。 插入一个数据到位图,需要将对应的位置为1。 判断数据集中是否已经存在一个数,需要判断对应的bit位是否为1。 与现有技术相比,本发明利用位图进行海量文件运算处理的方法中,插入一个数据到位图;判断某个数是否在位图中;打印位图中的所有数据集;去重处理;取并集或交集或差集。本发明基于C/C++语言的位运算,提供对海量数据集进行取交集、并集、去重、差集等运算功能。极大提高数据运算处理速度。 通过以下的描述并结合附图,本发明将变得更加清晰,这些附图用于解释本发明的实施例。 附图说明 图1为本发明利用位图进行海量文件运算处理的方法的第一个实施例的示意图。 图2为本发明利用位图进行海量文件运算处理的方法的第二个实施例的示意图。 图3为本发明利用位图进行海量文件运算处理的方法的第三个实施例的示意图。 图4为本发明利用位图进行海量文件运算处理的方法的第四个实施例的示意图。 图5为计算机系统中一个字节由8个bit位组成的示意图。 具体实施方式 现在参考附图描述本发明的实施例,附图中类似的元件标号代表类似的元件。 本发明核心是利用位图来记录某个数据,是否有在数据集中出现过。位图查找的时间复杂度为常量,极大提高处理效率。 如图5所示,在计算机系统中,一个字节由8个bit位组成,每个位可以为0或1两种状态。一个字节最多可以表示8个数是否存在,例如从0-7bit,分别表示0-7这8个数字是否有在数据集中。如果有存在,把对应的bit位置1。 目前常用的32位无符号整数,取值范围为0到4294967295。如果用一个字节来表示,需要4G内存。在32位操作系统中,应用程序可用内存一般在2G以内。用bit位来表示,则只需要4G/8=512M空间,提高空间效率。 请参考图1,该图所示的实施例中,求两个数集的交集,首先是读取数集A;将A中的每个数据调用insert插入位图;读取数集B;判断数集B中的数据是否在位图中;若是,则属于交集;若否,则不属于交集。 请参考图2,该图所示的实施例中,求两个数集的差集,首先是读取数集A;将A中的每个数据调用insert插入位图;读取数集B;判断数集B中的数据是否在位图中;若是,则不属于差集;若否,则属于差集。因此可见,求两个数据集的差集与求两个数据集的交集,其流程基本相同。 请参考图3,该图所示的实施例中,求两个数据的并集,首先是读取数集A;将A中的每个数据调用insert插入位图;读取数集B;将B中的每个数据调用insert插入位图;打印整个位图中包含的数据。 请参考图4,该图所示的实施例中,为对一个数集进行去重处理,首先是读取数集A;将A中的每个数据调用insert插入位图;打印整个位图中包含的数据。 测试对比结果如下: 备注:测试环境为CPU i51.8G,内存2G,操作系统为RedHat企业版Linux 6.032BitX86。 从测试对比数据可以看出,在数据规模较小的情况下,本发明无优势,甚至可能出现效率的下降。当数据规模在10W条左右,已经有60%以上效率提升;当数据规模达到百万、千万、甚至上亿后,本发明能提高十倍到数十倍的时间效率。 下面例举本发明一个实际应用中的例子: 例如光息谷注册用户中100万会员,微信粉丝200万,需要提取: 1、即是网站会员又是微信粉丝的用户信息 2、是网站会员但不是微信粉丝的用户信息 3、是微信粉丝但不是网站会员的用户信息 可用到以上方法,从而进行后续的营销工作,例如“是微信粉丝但不是网站会员”的用户发送微信鼓励加入会员。 以上所揭露的仅为本发明的优选实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明申请专利范围所作的等同变化,仍属本发明所涵盖的范围。
下载文档到电脑,查找使用更方便
30 金币 0人已下载
还可以输入200字符
暂无评论,赶快抢占沙发吧。
copyright@ 2017-2018 zhuanlichaxun.net网站版权所有经营许可证编号:粤ICP备2021068784号-1