给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中
位图思想解法:
#include "stdio.h"
#include "stdlib.h"
#include "memory.h"
#define MAX_NUM (4294967295)
int main(void)
{
unsigned int inputNum[4]={1,2,3,MAX_NUM};
unsigned int testNum1 = MAX_NUM;
int i = 0;
unsigned char *mapMem = (unsigned char *)malloc((MAX_NUM)*sizeof(unsigned char)/8 +1);
memset(mapMem,'\0',((MAX_NUM)*sizeof(unsigned char)/8 +1));
for (i = 0; i<4; i++)
{
mapMem[inputNum[i]/8] |= (1 << (inputNum[i]%8));
}
//test
if (mapMem[testNum1/8] & (1 << (testNum1%8)))
{
printf("%d is in the array\n",testNum1);
}
else
{
printf("%d isn't in the array\n",testNum1);
}
free(mapMem);
}
本文介绍了一种利用位图思想解决大规模数据集中快速查找特定元素的问题。通过使用位图来标记40亿个不重复的unsigned int整数,实现了高效判断给定数值是否存在于这些数据中。
1216

被折叠的 条评论
为什么被折叠?



