首先,什么是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 算法的更多相关文章

  1. 大数据排序算法:外部排序,bitmap算法;大数据去重算法:hash算法,bitmap算法

    外部排序算法相关:主要用到归并排序,堆排序,桶排序,重点是先分成不同的块,然后从每个块中找到最小值写入磁盘,分析过程可以看看http://blog.csdn.net/jeason29/article/ ...

  2. 算法篇---java算法应用

    算法应用之百钱买白鸡 案列说明:主要内容是:公鸡5元一只,母鸡3元一只,小鸡1元三只,问100元怎样可以买100鸡? 思想:想要实现此算法,只要明白各种条件的关系即可,而且知道公鸡最多买20只,母鸡最 ...

  3. 二级py--day4 数据结构与算法篇

    二级py--day4 数据结构与算法篇 1.算法的基本特征:可行性.确定性.有穷性.拥有足够的情报 2.算法的设计要求包括效率与低存储量,既要考虑算法的时间复杂度和空间复杂度 3.算法的优劣:与算法描 ...

  4. 【算法与数据结构专场】BitMap算法基本操作代码实现

    上篇我们讲了BitMap是如何对数据进行存储的,没看过的可以看一下[算法与数据结构专场]BitMap算法介绍 这篇我们来讲一下BitMap这个数据结构的代码实现. 回顾下数据的存储原理 一个二进制位对 ...

  5. BitMap算法应用:Redis队列滤重优化

    工作中有用到Redis滤重队列. 原来的方法如下: 方法一 为了保证操作原子性,使用Redis执行Lua脚本. 在脚本中的逻辑是,如果队列不超过某个数值,进行一次lrem操作(队列使用list结构), ...

  6. bitmap算法

    概述 所谓bitmap就是用一个bit位来标记某个元素对应的value,而key即是这个元素.由于采用bit为单位来存储数据,因此在可以大大的节省存储空间 算法思想 32位机器上,一个整形,比如int ...

  7. 深度学习word2vec笔记之算法篇

    深度学习word2vec笔记之算法篇 声明:  本文转自推酷中的一篇博文http://www.tuicool.com/articles/fmuyamf,若有错误望海涵 前言 在看word2vec的资料 ...

  8. 经典算法题每日演练——第十一题 Bitmap算法

    原文:经典算法题每日演练--第十一题 Bitmap算法 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场 ...

  9. BitMap 算法

    什么是 BigMap 算法 所谓 BitMap 就是用一个 bit 位来标记某个元素对应的 value,而 key 即是这个元素.由于采用bit为单位来存储数据,因此在可以大大的节省存储空间. 算法思 ...

随机推荐

  1. 网页外部注入vConsole调试

      概要 本篇介绍一种十分方便的方法为网站添加 vConsole 调试(通过篡改请求外部注入的方式,不需要您是网站的拥有者,主要用于调试线上站点). 之前已经发过一篇<借助FreeHttp为任意 ...

  2. 02.Oracle之安装与配置

    1.Oracle简介 Oracle是世界上最早的商品化的关系型数据库管理系统,是数据库专业厂商ORACLE(中文名字叫甲骨文)公司开发的,也是当前应用最为广泛.功能最强大.具有面向对象特点.采用了客户 ...

  3. 防世界之Web_ics-06

    题目: 进入实验环境,发现其他页面啥都没有,题目描述说报表中心数据被删,打开报表中心看看 进入数据中发现url上有?id=1的字样就要注意,敏感起来.id是数值,可以尝试爆破一下. 打开burpsui ...

  4. hydra安装及破解rdp方法

    hydra暴力破解工具 下载:https://github.com/vanhauser-thc/thc-hydra 安装步骤: ./configure make&&make insta ...

  5. JsonResponse类的使用、form表单上传文件补充、CBV和FBV、HTML的模板语法之传值与过滤器

    昨日内容回顾 Django请求生命周期 # 1.浏览器发起请求 到达Django的socket服务端(web服务网关接口) 01 wsgiref 02 uwsgi + nginx 03 WSGI协议 ...

  6. mysql 语句的使用

    查看数据库 show databases; use 数据库名: show tables; //显示数据库的表名describe 表名; //显示某表的字段, 建表模板 这是为了清楚直观,再mysql行 ...

  7. Qt:QString

    0.说明 区别于QByteArray,QString串是Unicode串,每个元素都是QChar 16-bit UTF-16编码(Unicode) :而QByteArray是8-bit串. 0.1.初 ...

  8. Tableau怎么制作专业图表

    Tableau怎么制作专业图表 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. 统计表 1.1 不同种类的图表风格 商业周刊的图表风格 经济学人的图表风格 华尔 ...

  9. Tableau学习Step6一如何制作炫彩地图

    Tableau学习Step6一如何制作炫彩地图 本文首发于博客冰山一树Sankey,去博客浏览效果更好. 一.统计地图概述 1.1 统计地图的基本概念 统计地图的本质:数据的正确对应 将数据信息和地理 ...

  10. 如何使用 PuTTY 远程连接矩池云主机

    PuTTY 是一款开源的连接软件,用来远程连接服务器,支持 SSH.Telnet.Serial 等协议. 矩池云的主机支持 SSH 登录,以下为使用 PuTTY 连接矩池云 GPU 的使用教程. 如您 ...