私は現在ハッシュテーブルに取り組んでおり、二重ハッシュについて少し混乱しています。まず、私が与えられた情報から始めましょう。
最初にすべてのデータを保持する配列を作成し、キーでソートします。式 K % size を使用して、キーが配置される配列内の位置を見つけました。すでにキーがある場所にキーを送信すると、衝突と呼ばれます。ここで double の出番です。式 max(1,(K/size) % size) を使用して、その位置から減少する数値を取得します。
だから私はこれらの機能を思いついた:
int hashing(table_t *hash, hashkey_t K)
{
int item;
item = K % hash->size;
return item;
}
int double_hashing(table_t *hash, hashkey_t K)
{
int item;
item = K/hash->size % hash->size);
return item;
}
//This is part of another function which involves the double.
else if(hash->probing_type == 2)
{
int dec, item;
item = hashing(hash,K);
if(hash->table[item] == NULL)
{
hash->table[item]->K == K;
hash->table[item]->I == I;
}
else
{
dec = double_hashing(hash,K);
hash->table[item-dec]->K == K;
hash->table[item-dec]->I == I;
}
}
そこで、2 つの式を使用してキーを移動します。キーが既に配置されている別の場所にデクリメントして着地するとどうなるか、今、私は混乱しています。場所が見つかるまで、またそれだけ減らさなければならないのでしょうか?