- 一般的情况我们会用for循环来判断某个数是否在一亿的数据中。但是一亿数据进行for循环消耗的时间很大的。时间复杂度为O(N).。在N非常大的时候,时间会很长。
- 在算法有一种位图算法可以实现快速的判断某个数据是否存在于10亿个数据数据中。
- 先给出代码:
- #include
using namespace std;
int number[1000];
void setnumber(int num)
{
int i = num / 32;
int j = num % 32;
number[i] = (number[i] | (1 << j));
}
void zero(int num)
{
int i = num / 32;
int j = num % 32;
number[i] = number[i] & (~(1 << j));
}
bool inNumber(int num)
{
int i = num / 32;
int j = num % 32;
int tmep = number[i];
int flag = ((number[i]>>j) & 1);
return flag == 1;
}
int main()
{
memset(number, 0, sizeof(number));
setnumber(300);
cout << inNumber(300) << endl;
zero(300);
cout << inNumber(300) << endl;
system(“pause”);
return 0;
}
一个int型有32个字节。我们单纯的表示亿个数据是否存在。可以查找某一位数对应的bit位是否为1即可。这样一个int型可以表示32个数的存在与否,那么10亿个数据也就只需要3200万个int型表示即可。
上述代码描述了如何把一个数据标识位存在setnumber(int num)函数。如何把一个数据删除
void zero(int num)函数,如何判断一个数据是否存在bool inNumber(int num)。通过位图算法,我们可以实现甚至几千亿的数据的控制和检测。
如何确定10亿个数中是否存在某数M
最新推荐文章于 2023-02-19 23:50:42 发布