zoukankan      html  css  js  c++  java
  • [算法]bitmap算法

      在所有具有性能优化的数据结构中,我想大家使用最多的就是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可以节省大量内存。
  • 相关阅读:
    有关类成员变量和局部成员变量初始值设置问题
    Redis在windows下安装与配置
    java内存区域-方法区
    Java中的反射机制(一)
    (转)Spring实现IoC的多种方式
    UUID
    Python os.path
    Leetcode 215、数组中第k个最大的元素
    树的非递归遍历
    About MySQL
  • 原文地址:https://www.cnblogs.com/iyjhabc/p/2990631.html
Copyright © 2011-2022 走看看