ハッシュ バケットに指紋の配列があります。バケットに挿入して、エントリ 0 からエントリ n に移動せずに検索したいと思います。
私がやりたいことは、バケットにエントリを追加するときに、フィンガープリントを入力として使用して、追加するバケットを決定するために使用できるハッシュを計算することです。これは難しくありませんでしたが、同じアルゴリズムを使用してフィンガープリントをハッシュして、バケット内のどのスロットにフィンガープリントを追加するかを特定しようとすると、多くの衝突が発生することがわかりました。
これは、フィンガープリントをバケットにハッシュするために使用したコードです。より多くの文字で同じコードを使用しようとしましたが、それでも衝突が大きくなります。
he.fingerprint は 33 文字幅です
バケット数は 1024
バケットあたりのエントリ数は 2048 です
char hph[32];
int bk,en;
unsigned long h = 0, g,i=0;
int j=0;
strncpy(hph,(const char*)(he).fing_print,32);
while ( j<32 )
{
h =h + hph[j]++;
g = h & 0xFFf00000;
h ^= g >> 24;
h &= ~g;
j++;
}
bk=h%buckets;
en=h%entries_per_bk;