前段时间接触到一个基本的大数据的问题,十亿个整数查重。现实意义非凡,同类的商品,同样兴趣个体的筛选,相同频段的好友,各种在大数据时代里面的具象,仍然基于一个十亿个整数查重的基本问题。
在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。作为验证。
这个算法可能不是很优秀,但是对于处理大数据的入门思维有了一定的启发。
相关推荐
VLAN(Virtual Local Area Network)的中文名为”虚拟局域网”。 虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的...
交换机在江湖之初窥门径—VLAN隔离篇.doc
Django初窥门径-oauth登录认证
金融行业研究方法-初窥门径:我国外汇市场简介—申万债券研究部汇率专题研究之四.pdf
VLAN(Virtual Local Area Network)的中文名为”虚拟局域网”。 虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的...
1. 检测用户名和序列号是否为空,序列号长度是否小于5 2. 将用户名各个字符的ASCII码的十进制转换成字符串连接起来得到一个数result 3. 判断res
Android基础入门教程——4.1.2 Activity初窥门径-附件资源
主要介绍了maven的简单知识,介绍了maven的定义及核心功能,具有一定参考价值,大家可以了解下。
[金融分会场]个人金融信息保护门径初窥与重要话题.pdf
交换机在江湖之初窥门径—VLAN基础篇.docx 交换机在江湖之初窥门径—VLAN通信篇.docx ....等等内容
实验一:Python程序设计之初窥门径 2 实验二:Python程序设计之结构与复用 7 实验三:Python程序设计之组合数据类型 11 实验四:Python程序设计之文件 15
实验一:Python程序设计之初窥门径 2 实验二:Python程序设计之结构与复用 7 实验三:Python程序设计之组合数据类型 11 实验四:Python程序设计之文件 15
实验一:Python程序设计之初窥门径 2 实验二:Python程序设计之结构与复用 7 实验三:Python程序设计之组合数据类型 11 实验四:Python程序设计之文件 15 **********************************实验一 #正方形螺旋线 ...
此资源为PL语言编译器扩充报告,包括详细实验报告和源代码,用PASCAL语言编写。 编译器扩充内容包括: 复合赋值语句扩充 case语句 if else语句 repeat语句 for语句 所有语句包括支持begin....end扩充,对于for语句...
初写作文的几个门径.doc
【课程列表】 00愉快的开始 01第一次亲密接触 02设计第一个游戏 03小插曲之变量和字符串 04改进我们的小游戏 05数据类型 06之常用操作符 07了不起的分支和循环2 ...40Scrapy框架之初窥门径 41Pygame:播放声音和音效
python爬虫项目学习,各种小的项目,配合该博客的学习文章,你一定会对爬虫这个技能初窥门径。祝你成功。