面对大数据的处理(bitmap)

原创 2016年11月12日 22:39:59

随着大数据的时代来临,越来越多的数据的等待着我们去管理,而越来越多的数据的管理也就意味着消耗大量的资源,

为了让我们的数据占有更小的空间。我们必须引用一个叫“位”的东西去处理。

比如:

举个例子,我们要实现:

给定100亿个整数,设计算法找到只出现一次的整数

我们可以使用hash将所有整数映射到1000个文件中,在每个文件中使用 bitmap(位表示),用两个bit表示出现次数,00表示没出现过,01表示出现过1次,10表示出现过多次,11舍弃,最后归并每个文件中出现只有1次的数即为所求。我们称这种方法为“哈希分桶法”。

我们就设计一个简单的“位图(bitmap)”

#include<iostream>
using namespace std;
class BitMap{
public:
    BitMap(){
        bitmap = NULL;
        size = 0;
    }
    BitMap(int size){ // contractor, init the bitmap
        bitmap = NULL;
        bitmap = new char[size];
        if (bitmap == NULL) {
            printf("ErroR In BitMap Constractor!\n");
        }else{
            memset(bitmap, 0x0, size * sizeof(char));
            this->size = size;
        }
    }


    /*将该位设置成1;
     * set the index bit to 1;
     */
    int bitmapSet(int index){
        int addr = index/8;
        int addroffset = index%8;
        unsigned char temp = 0x1 << addroffset;
        if (addr > (size+1)) {
            return 0;
        }else{
            bitmap[addr] |= temp;
            return 1;
        }
    }

    /*
     * return if the index in bitmap is 1;
     */
    int bitmapGet(int index){
        int addr = index/8;
        int addroffset = index%8;
        unsigned char temp = 0x1 << addroffset;
        if (addr > (size + 1)) {
            return 0;
        }else{
            return (bitmap[addr] & temp) > 0 ? 1 : 0;
        }
    }

    /*
     * del the index from 1 to 0
     */
    int bitmapDel(int index){
        if (bitmapGet(index) == 0) {
            return 0;
        }
        int addr = index/8;
        int addroffset = index%8;
        unsigned char temp = 0x1 << addroffset;
        if (addr > (size + 1)) {
            return 0;
        }else{
            bitmap[addr] ^= temp;
            return 1;
        }
    }

private:
    char *bitmap;
    int size;
}


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

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

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

海量数据解决思路之BitMap

原文:http://zengzhaozheng.blog.51cto.com/8219051/1404108 一、概述   本文将讲述Bit-Map算法的相关原理,Bit-Map算法的一些利用...
  • u013063153
  • u013063153
  • 2017年04月26日 14:43
  • 469

大数据处理时的一种BitMap小算法

一种大数据外部排序(内存无法加载所有排序元素)、去除重复元素、快速找到随机被删除元素的BitMap小算法,核心思想即通过将一个数作为下标(index)来索引一个bit表示一个数是否存在,排序时的时间复...
  • songjinshi
  • songjinshi
  • 2015年07月21日 22:02
  • 5615

大数据之道 BitMap (按位存取)

一:起因 (0)大数据的预处理那一篇博客,仅仅讲解了如何处理数据,以及清洗数据的原则;并没有讲解大数据处理过程中,数据在内存中的存储问题,这正是本文要关注的重点。 (1)所谓大数据,就是数据量非常的大...
  • u010700335
  • u010700335
  • 2015年01月26日 11:35
  • 2490

面对大数据的处理(bitmap)

随着大数据的时代来临,越来越多的数据的等待着我们去管理,而越来越多的数据的管理也就意味着消耗大量的资源, 为了让我们的数据占有更小的空间。我们必须引用一个叫“位”的东西去处理。 比如: 举个例子...
  • xuaomo
  • xuaomo
  • 2016年11月12日 22:39
  • 429

Bitmap大数据查找算法

  • 2013年03月26日 17:52
  • 7KB
  • 下载

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

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

观点:面对大数据,你可以害怕

腾讯拿到民营银行的执照,互联网圈内同行议论纷纷的同时,最害怕的就是招商银行之类把客户服务根植在微信的金融机构了。在大数据时代,数据收集将是商业经营的起点,你会安心的把自己的数据交给自己的竞争对手吗? ...
  • asqi1
  • asqi1
  • 2014年08月06日 10:57
  • 605

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

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

大数据之位图法简单实现

所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。 举个栗子,给定40亿个整型数据,现在给一个整数,要求判断这个数在不...
  • Korey_sparks
  • Korey_sparks
  • 2016年09月12日 13:55
  • 443
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面对大数据的处理(bitmap)
举报原因:
原因补充:

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