在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间。但hash table需要使用巨大的内存空间,显然在处理大数据时会显得力不从心。

  bitmap可以有效地节省内存的使用,它的思想其实就是用1bit来代替一个index(通常是一个unsigned int)。

比如我要对{1,5,7,2}这四个byte类型的数字做排序,该怎么做呢?我们知道byte是占8个bit位,其实我们可以将数组中的值作为bit位的key,value用”0,1“来标识该key是否出现过?下面看图:从图中我们精彩的看到,我们的数组值都已经作为byte中的key了,最后我只要遍历对应的bit位是否为1就可以了,那么自然就成有序数组了。 
可能有人说,我增加一个13怎么办?很简单,一个字节可以存放8个数,那我只要两个byte就可以解决问题了。
(摘自:http://www.cnblogs.com/huangxincheng/archive/2012/12/06/2804756.html)
利用位操作,不难写出bitmap的置位、复位、判断、取反等操作。
置位:1左移i位与其相或
复位:1左移i位求反后与其相与
取反:1左移i位与其异或
因此,使用几个字节的bitmap作为hash table可以节省大量内存。

转载于:https://www.cnblogs.com/iyjhabc/archive/2013/03/30/2990631.html

[算法]bitmap算法相关推荐

  1. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

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

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

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

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

  4. 《算法与数据结构专场》BitMap算法介绍

    我们先来看个简单的问题. 假如给你20亿个非负数的int型整数,然后再给你一个非负数的int型整数t,让你判断t是否存在于这20亿数种,你会怎么做呢? 有人可能会用一个int数组,然后把20亿个数给存 ...

  5. 【转】漫画:Bitmap算法

    漫画:Bitmap算法 转载于:https://www.cnblogs.com/apeway/p/10786283.html

  6. 漫画:Bitmap算法 整合版

    转载自  玻璃猫 程序员小灰 两个月之前-- 为满足用户标签的统计需求,小灰利用Mysql设计了如下的表结构,每一个维度的标签都对应着Mysql表的一列: 要想统计所有90后的程序员该怎么做呢? 用一 ...

  7. 通过BitSet源码来理解BitMap算法

    BitMap是一种很常用的数据结构,它的思想的和原理是很多算法的基础,当然,并且在索引,数据压缩,海量数据处理等方面有广泛应用. 一.简介 BitMap 是一种很常用的数据结构,它的思想和原理是很多算 ...

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

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

  9. java bitmap算法_BitMap算法详解

    所谓的BitMap就是用一个bit位来标记某个元素所对应的value,而key即是该元素,由于BitMap使用了bit位来存储数据,因此可以大大节省存储空间. 基本思想: 这此我用一个简单的例子来详细 ...

  10. Bitmap算法简介

    Bitmap算法中文又叫做位图算法.那么什么是Bitmap算法呢? 位图算法中的位图是内存中连续的二进制位(bit),用于对大量整形数据做去重和查询. 举个例子,给定一块长度是10bit的内存空间,想 ...

最新文章

  1. HTTPS安全证书介绍
  2. Java记录 -1- 基础JDK
  3. Spring初学(一)
  4. 高并发负载均衡(三):LVS的DR模型试验搭建
  5. javaweb如何定位
  6. vector容器中重写sort方法
  7. Larbin源代码分析[6]LARBIN中线程处理类
  8. 安卓逆向_21 --- Java层和so层的反调试( IDA 动态调试 JNI_OnLoad、init_array下断)
  9. 矩阵中不重复的元素(51Nod-1024)
  10. linux erlang安装教程,linux(CentOS7)中安装erlang(20.3)以及rabbitmq(3.6.15)的步骤以及一些注意事项...
  11. Cocos2d-x一张小背景重复贴图充满整个屏幕
  12. java过滤器验证app用户token_SpringCloud笔记之Zuul过滤器PreFilter实现token校验(简单样例)...
  13. matlab 拟合优度检验,χ~2拟合优度检验在教学中的应用及Matlab实现
  14. Electron技术架构
  15. Bitcion Core 目录说明、使用说明、bitcoin.conf 配置说明
  16. c2c开店流程图_c2c的主要业务流程图以及路线?
  17. 烘焙软件Knald介绍
  18. 2014中国高中排行榜发布 华中师大一附中居首
  19. mac笔记本当做服务器记录
  20. java获取指定日期的所在周的第一天(周一)

热门文章

  1. hdu1263 简单模拟
  2. [漏洞案例]thinkcmf 2.x从sql注入到getshell实战
  3. Vue使用Mint-ui的Popup, Picker组件报错问题
  4. django-xadmin定制之分页显示数量
  5. spring cloud报错解决:java.lang.ClassNotFoundException: com.netflix.servo.monitor.Monitors
  6. Windows PowerShell是啥?看完本文你就懂它了
  7. python3带tkinter窗口的ftp服务器,并使用pyinstaller打包成exe
  8. ApiDemos示例学习(1)——ApiDemos示例的导入
  9. Java第二节课总结
  10. Tarjan在图论中的应用(二)——用Tarjan来求割点与割边