大数据之初窥门径

本文介绍了一种使用byte数组实现的十亿个整数查重算法,通过将每个整数映射到位数组中的特定位置来判断重复,并讨论了算法的具体实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  前段时间接触到一个基本的大数据的问题,十亿个整数查重。现实意义非凡,同类的商品,同样兴趣个体的筛选,相同频段的好友,各种在大数据时代里面的具象,仍然基于一个十亿个整数查重的基本问题。

  在java里面,int类型的数据从0-2的32次方个不同的数字,我们用一个2的32次方个位这么长的数组来映射所有int类型整数。因为数字总是逃不过这个范围,需求的空间是2的29次方个byte,因为java中只有byte数组来表示位,一个byte等于八个位所以2的32次方个数字转化成2的29次方个byte数组,总大小应该在内存的允许范围之内。

  对于问题的分析,需要对数据类型和问题具象的难点进行适当的算法设计,这样问题就会迎刃而解了。

  难点在于10亿个数字读入的时候,具体的数字到底怎么处理。如果你在纠结10亿个数字怎么存入内存中,那要跨过大数据的门槛,还要再加修行了。

  读入一个数字,它的特征,只有对于你设计的算法进行适当的处理,才能真正地处理掉。刚说了申请了一个2的29次方个byte数组,一个byte等于八个bit,也就是00000000。这个进来的数字,必须要以八为关键点进行分解。比如说进来一个数字是44,这个数字对于8来说是什么呢?5*8+4,这样的式子是不是有些启示。一个byte代表8个数字,从0-2的32次方对应于byte下标的0-2的29次方。44就是存在于byte[5]的第4位,注意:位是从第0位开始计数的。拿到一个数字之后,分解成需要的因子之后把相应的位置修改成1,第二次进来的时候检测到相应位为一,则这个数字重复了。输出一个。

   byte数组是有整数来呈现的,修改相应位置就是加个2的余数次方的整数,检测的时候再把byte变成二进制,创建一个8长度的int数组,只存0,1。作为验证。

  这个算法可能不是很优秀,但是对于处理大数据的入门思维有了一定的启发。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值