• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > 大数据处理算法一:Bitmap算法,数据处理bitmap算法

大数据处理算法一:Bitmap算法,数据处理bitmap算法

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含bitmap算法,bitmap数据有错误,bitmap数据结构,bitmap 图像处理,bitmap等服务器相关知识,网友希望可以进行参考

大数据处理算法一:Bitmap算法,数据处理bitmap算法


 腾讯面试题:给20亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中并且所耗内存尽可能的少?  解析:bitmap算法就好办多了  所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。  例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示。那么就可以开一个int数组,一个int有32个位,就可以表示32个人。操作的时候可以使用位操作。
一,申请512M的内存 一个bit位代表一个unsigned int值 读入20亿个数,设置相应的bit位 读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在 二、使用位图法判断整形数组是否存在重复 判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。 位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上1,如遇到 5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在着重复。这种给新数组初始化时置零其后置一的做法类似于位图的处理方法故称位图法。它的运算次数最坏的情况为2N。如果已知数组的最大值即能事先给新数组定长的话效率还能提高一倍。
java 代码实现

import java.util.BitSet;
/**
 * 大数据处理算法一,bitmap算法
 * @author JYC506
 *
 */
public class Bitmap {

 byte[] tem;

 public Bitmap(int length) {
  this.tem = new byte[length];
 }

 public void add(int num) {
  if (num < tem.length) {
   if (tem[num] != 1) {
    tem[num] = 1;
   }
  }
 }

 public boolean contain(int num) {
  if (num < tem.length) {
   if (tem[num] == 1) {
    return true;
   }
  }
  return false;
 }

 public static void main(String[] args) {
  /*运行前内存*/
  long beforeMemory = Runtime.getRuntime().totalMemory();
  long start1=System.currentTimeMillis();
  BitSet set = new BitSet(2000000000);
  for (int i = 0; i < 2000000000; i++) {
   /*假设898989这个数不在20亿个数里面*/
   if (i != 898989) {
    set.set(i, true);
   }
  }
  /*创建20亿个数后所占内存*/
  long afterMemory = Runtime.getRuntime().totalMemory();
  long end1=System.currentTimeMillis();
  System.out.println("总共内存使用:" + (afterMemory - beforeMemory) / 1024 / 1024 + "MB");
  System.out.println("存入内存耗时:"+(end1-start1)+"毫秒");
  long start2 = System.currentTimeMillis();
  boolean isExit1=set.get(898989);
  boolean isExit2=set.get(900000);
 
  long end2 = System.currentTimeMillis();
  /*输出在20亿个数中判断898989是否包含在里面*/
  System.out.println(isExit1);
  System.out.println("20个亿中"+(isExit1?"包含":"不包含")+898989);
  System.out.println("20个亿中"+(isExit2?"包含":"不包含")+900000);
  System.out.println("查询用时:"+(end2 - start2)+"毫秒");
 }

}

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 大数据处理算法一:Bitmap算法,数据处理bitmap算法

相关文章

  • Hadoop之——自定义排序算法实现排序功能,hadoop排序功能
  • 修改 openstack 中 nova boot 创建实例只能在10个以内的限制,openstacknova
  • Hadoop2伪分布模式安装,hadoop2分布模式
  • mongodb基础操作,mongodb基础
  • Error: unable to connect to node &#39;rabbit@devlop-ceilo&#39;: nodedown,unabletoconnect
  • hadoop-common源码分析之-WritableUtils,hadoopcommon源码
  • 机器学习算法-K-means聚类,算法-k-means聚类
  • Elasticsearch 之 Facet,elasticsearchfacet
  • Install Docker Mac OS X,installdocker
  • 在 Mac OS X 系统里使用 Docker,osdocker

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • B-TREE索引,btree
    • hadoop2.7配置HA,使用zk和journal,hadoop2.7zk
    • 新增数据页面360浏览器样式异常,新增360浏览器样式
    • 《转》 Openstack Grizzly 指定 compute node 创建 instance,《转》openstack
    • 系统监控软件Ganglia的安装,监控软件ganglia
    • Scala函数声明与定义,Scala函数声明定义
    • 大数据学习笔记3--HDFS扩展和mapreduce工作过程,3--hdfsmapreduce
    • Cloud Foundry buildpack开发部署实例解析,foundrybuildpack
    • CRM市场及Zoho模式,CRM市场Zoho模式
    • HDFS小文件的合并优化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有