bitmap 位图算法

原创 2017年08月30日 10:25:55

位图算法简单介绍


1.业务场景

有一批用户数据

id分别为 :1,2,3,4,5,6,7,8,9,10 ( int );

如果依赖java内存来进行存储的话,从数据大小的角度来说,1 int 32bit,存储该批数据内存大小使用 10 * 32 bit ,但此时我们的用户数据3000W条,

继续使用内存的情况下将使用 960000000bit 即0.11G ,如果用户数据3亿条…


2.bitmap结构

引出位图算法。给出长度是10的bit数组,每一个bit位分别对应着从0到9的10个

整型数(用户id),初始bit数组所有元素值都为0,  bit为二进制位,0表示没有值,1表示有值。



图1 数据结构为bit数组  大小为10 , 现在将用户id为 2,4两个用户写入bit数组,写入bit数组2跟4的位置,同时将bit的值从0调整到1

现在图2表示,一个10个大小bit的数组,存入了 2,4 。 



3.bitmap场景


用户画像功能 会给一个用户打上不同的标签,结构化场景如下:




为每一个用户标签创建一个bitmap数组,一个标签对应N多个用户,例如游泳bitmap,旅行bitmap …...




4.bitmap运算


业务需求要查询出 用户标签是 爱好上网并且喜欢旅行的用户,

爱好旅行bitmap数组内容如下.



爱好上网的bitmap数组内容如下.



                                                            


直接对不同标签进行位运算0000011000&0000010000 = 0000010000;根据bitmap算法求出用户id为4的用户满足要求,或运算同理。


5.持久化

bitmap持久化可以简单的理解成 一个数字N就是一个用户标签A。

例如  N=123  二进制转换成 1111011, 根据bitmap算法推算出 A标签下存了0,1,3,4,5,6 元素。

版权声明:本文为博主原创文章,未经博主允许不得转载。

浅谈bitmap算法

转自:http://weihe6666.iteye.com/blog/1184554 浅谈bitmap算法 久闻《编程珠玑》一书中提出的bitmap算法之大名,只是没有深入的去研究...
  • hackerwin7
  • hackerwin7
  • 2013年12月26日 16:04
  • 9778

大数据处理算法一:BitMap算法

腾讯面试题:给20亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中并且所耗内存尽可能的少?  解析:bitmap算法就好办多了  所谓...
  • h348592532
  • h348592532
  • 2015年04月29日 09:57
  • 4498

基础算法-BitMap详解

问题:      一台主机,2G内存,40亿个不重复的没排过序的unsigned int的整数的文件,然后再给一个整数,如何快速判断这个整数是否在那40亿个数当中? 解决法案: 遍历法   ...
  • liufei_learning
  • liufei_learning
  • 2014年02月16日 23:13
  • 7655

RoaringBitmap源码分析一(AND操作)

在上文“RoaringBitmap简析”中,简单的描述了RoaringBitmap的原理,主要是关于底层的数据结构。今天再重点根据源码来分析常用的位图操作是如何高效实现的。 考虑到Bitmap在搜索引...
  • xywtalk
  • xywtalk
  • 2016年09月19日 22:51
  • 1352

RoaringBitmap简析

更新: RoaringBitmap源码分析一(AND操作)Bitmap索引在数据库和搜索引擎里使用的很广泛。最近发现几个实时OLAP分析引擎,比如Druid和Pinot也都在用,所以深入研究了一下。这...
  • xywtalk
  • xywtalk
  • 2016年03月27日 14:51
  • 3677

位图bitmap算法(java)

简单的说就是用数组存放若有数据就标志为1或true,若不存在标志为0或false。比如1,2,2,5,这里最大值为5,0至5中不存0,3,4,所以:Array[0]=0,Array[1]=1,Arra...
  • xgdofull
  • xgdofull
  • 2010年03月28日 13:53
  • 13750

海量数据去重排序--bitmap(位图法)在java中的实现的两种方法

在海量数据中查找出重复出现的元素或者去除重复出现的元素是面试中常考的文图。针对此类问题,可以使用位图法来解决。例如:已知某个文件内包含若干个电话号码,要求统计不同的号码的个数,甚至在O(n)时间复杂度...
  • y999666
  • y999666
  • 2016年04月22日 15:48
  • 4179

JAVA版位图排序(算法珠玑开篇的例子)

package com.sdo.tradinghub.domain; public class BitSortTest { private static final int BITSPE...
  • evane1890
  • evane1890
  • 2010年09月20日 15:37
  • 1578

java实现Bitmap算法

package edu.xaut.jzd; public class Test { int numSize = 1000; int arraySize =(int)Math.cei...
  • jiangzhengdong
  • jiangzhengdong
  • 2013年01月19日 19:55
  • 2244

位图排序算法(一),java版

还是很久以前看的《编程珠玑》,开篇就是这个在特殊条件下的排序问题,当时只是粗略的看了一下,并没有真正的理解,现在又翻出了这本书,还是遇到开篇这个问题,但是这次也不知道怎么回事,一下子就理解了,细想一下...
  • hackerain
  • hackerain
  • 2011年09月18日 18:19
  • 2583
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bitmap 位图算法
举报原因:
原因补充:

(最多只允许输入30个字)