大資料處理時的一種BitMap小演算法

2021-09-22 22:04:27 字數 2576 閱讀 9138

一種大資料外部排序(記憶體無法載入所有排序元素)、去除重複元素、快速找到隨機被刪除元素的bitmap小演算法,核心思想即通過將乙個數作為下標(index)來索引乙個bit表示乙個數是否存在,排序時的時間複雜度為o(n),需要的額外空間的複雜度o(n/8),支援整個int範圍(正負數都支援)的演算法示例如下:

char bitmask = ;

int writenumberbittobyte(char *bytearra , unsigned int bytearrasize , int number)

int basearrabitpos = bytearrasize *4; //bytearrasize *8 /2

basearrabitpos+=number;

printf("basearrabitpos=%d,number=%d\n",basearrabitpos,number);

bytearra[basearrabitpos/8] |= mask[basearrabitpos%8];

return 1; //success

}int isnumberbitinbyte(char *bytearra , unsigned int bytearrasize , int number)

int basearrabitpos = bytearrasize *4; //bytearrasize *8 /2

basearrabitpos+=number;

if (bytearra[basearrabitpos/8] & bitmask[basearrabitpos%8])

return 0; //number not found.

}void printorderedbitmap(char *bitmap,unsigned int bitmapcount)

} printf("\n");

}int main()

; int maximumvalue =arra[0],minmumvalue=arra[0];

for (int i = 0; i < sizeof(arra)/sizeof(arra[0]); ++i) }

maximumvalue=maximumvalue<0?-maximumvalue:maximumvalue;

minmumvalue=minmumvalue<0?-minmumvalue:minmumvalue;

maximumvalue=maximumvalue>minmumvalue?maximumvalue:minmumvalue;

printf("maximumvalue=%d\n",maximumvalue);

//unsigned int bitmapcount = (maximumvalue*2+7)/8;

unsigned int bitmapcount = (maximumvalue+3)/4;

bitmapcount = bitmapcount>0?bitmapcount:1;

char *bitmap = (char*)malloc(bitmapcount);

for (int i = 0; i < sizeof(arra)/sizeof(arra[0]); ++i)

printorderedbitmap(bitmap,bitmapcount);

}

僅支援unsigned int範圍的演算法示例如下:

char bitmask = ;

int writenumberbittobyte(char *bytearra , unsigned int bytearrasize , unsigned int number)

int bytepos = number / 8;

int bitpos = number % 8;

bytearra[bytepos] |= bitmask[bitpos];

return 1; //success

}int isnumberbitinbyte(char *bytearra , unsigned int bytearrasize , unsigned int number)

int bytepos = number / 8;

int bitpos = number % 8;

if (bytearra[bytepos] & bitmask[bitpos])

return 0; //number not found.

}

上面的演算法都是用乙個bit來表示乙個數,即只有2種可能,要麼有,要麼無,可以擴充套件到乙個位元組表示乙個數,這樣就可以統計出現255次範圍內的重複元素,原理以此類推。

另外用bit來表示乙個int數,節約了31倍的記憶體空間,即int(4*8),bit(8/1),所以資料量越來使用這種方式的優勢越明顯,前提是場景適用這種方式。

大資料處理 Bitmap

mapreduce是一種程式設計模型,用於大規模資料集 大於1tb 的並行運算。概念 map 對映 和 reduce 歸約 bit map空間壓縮和快速排序去重 1.bit map的基本思想 32位機器上,對於乙個整型數,比如int a 1 在記憶體中佔32bit位,這是為了方便計算機的運算。但是對...

大資料處理時的字串處理

最近在做文字的shingles時,遇到了乙個問題,希望把每個句子按照5個字元一組進行map,因此碰到了字串分割的問題,這裡羅列三種方法 split substring stringtokenize 上網調查了一下,stringtokenize效能最優,substring其次,split最差。但是!請...

一種基於策略模式實現的資料處理流程模組

本人基於策略模式實現了一種資料處理流程模組,該模組可在qt環境下直接使用。模組支援資料處理流程的定製化,目前提供濾波 公式計算 fft三種資料處理方式,可根據實際需求進行處理方式的組合新增以及排序。模組提供了一種資料處理流程框架,實現上採用的是策略設計模式,支援處理方式的擴充套件,可應用於需要對資料...