- 论坛徽章:
- 0
|
昨天在用代码实现一个hash算法的时候,突然想到,为什么除留余数法中除数要用质数?虽然各种教科书上都说质数可以减少地址冲突,但为什么会这样?我写了一小段代码,测试了一下,结果是除数是不是质数都没关系。为简单,桶数和除数是一样的。很困惑,请高手指点。
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
typedef vector<int> vInt;
int main()
{
int BucketNum = 10;
int tmpBucketNum;
vector<vInt *> vBuckets;
vInt *pvInt, *ptvInt;
vector<int>::iterator iterInt;
for (int i=0; i<BucketNum; i++)
{
pvInt = new vInt;
vBuckets.push_back(pvInt);
}
for (int i=0; i<100; i++)
{
tmpBucketNum = i%BucketNum;
ptvInt = vBuckets[tmpBucketNum];
(*ptvInt).push_back(i);
}
for (int i=0; i<BucketNum; i++)
{
cout << endl << "*******Bucket:" << i << endl;
ptvInt = vBuckets[i];
for (iterInt=(*ptvInt).begin(); iterInt < (*ptvInt).end(); iterInt ++)
{
cout << *iterInt << "\t";
}
}
return 0;
} |
|