面对大数据的处理(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算法就好办多了  所谓...

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

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

大数据处理之bitmap

bitmap是一个十分有用的结构。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。  ...

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

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

【大数据处理】bitmap思想和2-Bitmap 实现

1. Bit-map思想 给你一堆西安市的电话号码列表,数量大概在千万级,要求从中找出所有重复的电话号码,需要时间复杂度尽可能小。 目前西安市的电话号码大概都以8开头,为8位,也就是类似于8267...

海量数据处理系列之:用C++实现Bitmap算法

bitmap是一个十分有用的结构。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。  适...

海量数据处理--位图(BitMap)

对于海量数据这个词,大家不难理解吧。主要是针对给定的数据量特别大,占用内存特别大的情况。那么和位图有什么关系呢。看下面一个腾讯的海量数据的例子吧。 例:给40亿个不重复的无符号整数,没排过序。给一个...

海量数据处理(1)Bitmap, Bloom Filter, Hash(转)

http://dijunzheng2008.blog.163.com/blog/static/989598972010713251555/读书笔记。这一篇的Bitmap和Bloom Filter,都是...

海量数据处理---位图法Bitmap

方法介绍 什么是Bit-map 所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面对大数据的处理(bitmap)
举报原因:
原因补充:

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