【算法篇】Bitmap 算法
首先,什么是Bitmap算法(位图算法)呢?
一:定义:
Bit map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。使用Bit为用来存储数据的单位, 可以大大节省存储空间。
在32位机器上, int a 在内存中占32 位,可以用对应的32bit 对应十进制的0-31个数,bitmap就是应用此思想对大量整型数据来进行去重,排序与查询。
举个例子:
给定了一块长度为8 bit的内存空间,依次插入6,2,7,1,那么
给定长度为8的bitmap,每个位对应0到7八个整数型。此时bitmap中所有位均是0.

7 6 5 4 3 2 1 0
将整数6存进去,对应下标为6,将bit置为1

7 6 5 4 3 2 1 0
同理,依次将2,7,1存进去,bit都置为1

7 6 5 4 3 2 1 0

7 6 5 4 3 2 1 0

7 6 5 4 3 2 1 0
所以Bitmap方便查询,还可以去除重复的整数型。
二:应用:
例如,我们要调查使用该软件的用户群体,统计的内容有男女比例,各婚姻状况的用户数量,性别,职业等等很多项,那需要怎么做呢 罒ω罒。。。。
首先我们可能想到:利用MySQL建立一个表,每一列代表一个用户标签。利用SQL语句就可以轻松的求交集或并集了。。但是!问题来了!!
我们需要统计的越来越多。。表格越来越大,及其不易管理,SQL语句也变得十分复杂。。。。。
这个时候。。
Bitmap算法闪亮登场೭(˵¯ꇴ¯˵)౨
将用户以Bitmap形式存起来,用一个调查项对应多个用户即可:建立用户名与用户ID的一一映射,每一个调查项包含符合条件的所有用户ID。
可是,为什么不用HashMap呢。。。。。因为每个用户ID需占用int四个字节,32bit,消耗的空间大大增加了。
三:优缺点:
优点: 1.如上文所说,占用内存少
2.效率高,不能进行比较和移位
缺点: 1.无法对存在重复的数据进行排序和查找
2.无法求‘非’
四:思考
在一个很长的Bitmap中仅仅有少量用户,浪费空间怎么办?
---恢复内容结束---
【算法篇】Bitmap 算法的更多相关文章
- 大数据排序算法:外部排序,bitmap算法;大数据去重算法:hash算法,bitmap算法
外部排序算法相关:主要用到归并排序,堆排序,桶排序,重点是先分成不同的块,然后从每个块中找到最小值写入磁盘,分析过程可以看看http://blog.csdn.net/jeason29/article/ ...
- 算法篇---java算法应用
算法应用之百钱买白鸡 案列说明:主要内容是:公鸡5元一只,母鸡3元一只,小鸡1元三只,问100元怎样可以买100鸡? 思想:想要实现此算法,只要明白各种条件的关系即可,而且知道公鸡最多买20只,母鸡最 ...
- 二级py--day4 数据结构与算法篇
二级py--day4 数据结构与算法篇 1.算法的基本特征:可行性.确定性.有穷性.拥有足够的情报 2.算法的设计要求包括效率与低存储量,既要考虑算法的时间复杂度和空间复杂度 3.算法的优劣:与算法描 ...
- 【算法与数据结构专场】BitMap算法基本操作代码实现
上篇我们讲了BitMap是如何对数据进行存储的,没看过的可以看一下[算法与数据结构专场]BitMap算法介绍 这篇我们来讲一下BitMap这个数据结构的代码实现. 回顾下数据的存储原理 一个二进制位对 ...
- BitMap算法应用:Redis队列滤重优化
工作中有用到Redis滤重队列. 原来的方法如下: 方法一 为了保证操作原子性,使用Redis执行Lua脚本. 在脚本中的逻辑是,如果队列不超过某个数值,进行一次lrem操作(队列使用list结构), ...
- bitmap算法
概述 所谓bitmap就是用一个bit位来标记某个元素对应的value,而key即是这个元素.由于采用bit为单位来存储数据,因此在可以大大的节省存储空间 算法思想 32位机器上,一个整形,比如int ...
- 深度学习word2vec笔记之算法篇
深度学习word2vec笔记之算法篇 声明: 本文转自推酷中的一篇博文http://www.tuicool.com/articles/fmuyamf,若有错误望海涵 前言 在看word2vec的资料 ...
- 经典算法题每日演练——第十一题 Bitmap算法
原文:经典算法题每日演练--第十一题 Bitmap算法 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场 ...
- BitMap 算法
什么是 BigMap 算法 所谓 BitMap 就是用一个 bit 位来标记某个元素对应的 value,而 key 即是这个元素.由于采用bit为单位来存储数据,因此在可以大大的节省存储空间. 算法思 ...
随机推荐
- service与systemctl命令比较
本文将比较 linux 的 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较. 从 CentOS 7.x 开始,CentOS 开始使用 systemd 服 ...
- 云原生 PostgreSQL - CrunchyData PGO 教程:创建、连接、删除 Postgres 集群
入门 作为安装的一部分,请确保您已完成以下操作: 分叉 Postgres Operator 示例存储库并将其克隆到您的主机. https://github.com/CrunchyData/postgr ...
- C#的in/out关键字与协变逆变
C#提供了一组关键字in&out,在泛型接口和泛型委托中,若不使用关键字修饰类型参数T,则该类型参数是不可变的(即不允许协变/逆变转换),若使用in修饰类型参数T,保证"只将T用于输 ...
- 号外!号外!这个敏捷高效的大数据bi看板可以免费使用啦!
随着信息革命的深入推进,数据已经成为国家基础性战略资源,各个行业开始重视数据分析,企业不同,数据分析需求当然不一样,如销售行业需要对商品进行销售分析:网站运营需要进行用户.渠道.流量等信息分析:制造行 ...
- BI企服界大众点评来袭!Smartbi入围36氪企服软件系列三大榜单!
近日,36氪企服点评中国商业智能BI金榜揭晓.作为国产民族BI软件的领跑者,思迈特软件凭借深耕多年大数据BI领域中拥有过硬的产品实力与优质的服务,荣获"商业智能BI最佳软件总榜TOP10&q ...
- 【windwos 操作系统】关键的Windows内核数据结构一览(下)
I/O管理器 nt!_IRP IRP表示一个I/O请求包结构体,它用来封装执行一个特定I/O操作所需要的所有参数以及I/O操作的状态.IRP的表现也类似于一个线程独立调用栈因此它可以从一个线程传递到另 ...
- 安装grunt-browser-sync时报错:“未能加载Visual C++ 组件 “VCBuild.exe”
报错环境:windows7 X64 , VS2012 报错内容: MSBUILD : error MSB3428: 未能加载 Visual C++ 组件"VCBuild.exe". ...
- AtCoder Beginner Contest 242 题解
目录 C - 1111gal password D - ABC Transform E - (∀x∀) F - Black and White Rooks G - Range Pairing Quer ...
- omnet++:官方文档翻译总结(四)
学习翻译自:Adding Statistics Collection - OMNeT++ Technical Articles Part 5 - Adding Statistics Collectio ...
- Python音频操作+同时播放两个音频
对于python而言,音频的操作可以使用pygame包中的sound 和 music对象,本博客主要讲解这两个对象. 1.sound对象 Sound对象适合处理较短的音乐,如OGG和WAV格式的音频文 ...