最近各种忙呀.............需要了解各种知识。发现现在网上的资料真的太杂了,很难找到自己想要的,最重要的还是得靠自己。另外就是搜技术相关的东西最好还是用google。
继续努力........
-----------以下切入正题-------------
bitmap位图法是利用二进制的几位来表示数据一种状态的方法,通常适用于数据量大的处理与分析。网上举得最多的例子就是给你N个不重复的乱序的数,然后再给一个数,让你判断这个数是否在这N个数中(N这个数字很大)。遇到这种数据量大,但是状态很少的问题(这个例子中就是一个数存在或者不存在)。
在处理过程比较需要注意的是用于存储状态的位数组的方向。
以下是一个小例子:
#include<stdio.h> #include<stdlib.h> typedef int (*fun_bit)(int,char*,int); typedef struct{ fun_bit set; fun_bit statistic; }fun_bitmap; /* *put the num to the bitmap *the first param is useless */ int set_bit(int num,char *bitmap,int size){ int pos,bit; if(size*8-1<num){ printf("num is too large\n"); return -1; } bit=num%8; pos=num/8; bitmap[pos]|=(0x01<<bit); return 0; } /* *statisc the number of unique num in bitmap *the first param is useless */ int statistic(int num,char *bitmap,int size){ unsigned char p=0x01; int i,j,sum=0; for(i=0;i<size;i++){ for(j=0;j<8;j++){ if(bitmap[i]&(p)){ printf("the num is:%d\n",i*8+j); ++sum; } p<<=1; } p=0x01; } return sum; } int main(int argc,char *argv[]){ int i; int array[]={1,2,2,3,4,3,5,6,7,8,9,10,1000}; char bitmap[200]={0}; int size=200; fun_bitmap bit={set_bit,statistic}; for(i=0;i<13;i++){ bit.set(array[i],bitmap,size); } printf("num total:%d\n",bit.statistic(0,bitmap,size)); return 0; }